concrete5 - jQueryUI в режим на редактиране

Използвам плъгин за въртележка, който зависи от jQueryUI. За да го заредя, просто използвам Зареждане на jQueryUI addon от marketplace.

Редактиране - По-точно. Какво се случва е:

A. когато problematic.js се зарежда директно - без if: въртележката не работи, когато потребителят е влязъл и съдържанието на горната лента („Редактиране“, „Табло“) изчезва, така че дори е невъзможно да се влезе в режим на редактиране

B. когато problematic.js е зареден с такова условие:

if (!$c->isEditMode()){ ?>
    <script type="text/javascript" src="problematic.js"></script>
<?php } ?>

точно както по-горе: въртележката не работи, когато потребителят е влязъл и съдържанието на горната лента („Редактиране“, „Табло“) изчезва, така че дори е невъзможно да влезете в режим на редактиране

C. когато problematic.js е зареден с такова условие:

<?php $u = new User();
if (!$u->isRegistered()){ ?>
    <script type="text/javascript" src="problematic.js"></script>
<?php } ?>

съдържанието на горната лента е налице, възможно е страницата да се превърне в режим на редактиране, но очевидно js файлът не се изпълнява, когато потребителят е влязъл.

Това обаче не е това, от което се нуждая - искам скриптът ми да работи, когато:

  1. потребителят не е влязъл,
  2. потребителят е влязъл в уебсайта, но страницата НЕ Е в режим на редактиране.

Искам скриптът да НЕ се изпълнява, когато страницата Е САМО в режим на редактиране.

Как трябва да постигна това?

Редактиране: Ето част от PHP/HTML кода:

<?php 
    defined('C5_EXECUTE') or die(_('Access Denied.'));
?> 
<!DOCTYPE html>
<html>
    <head>
        <?php Loader::element('header_required');?>
        <script type="text/javascript" src="<?php print $this->getThemePath(); ?>/js/respond.min.js"></script>
        <script type="text/javascript" src="<?php print $this->getThemePath(); ?>/js/jquery.ui.rcarousel.min.js"></script>
        <?php $u = new User();
    if (!$u->isRegistered()){ ?>
        <!-- To prevent conflicts with C5 jQuery UI when in edit mode -->           
        <script type="text/javascript" src="<?php print $this->getThemePath(); ?>/js/home.js"></script>
    <?php } ?>
        <link rel='stylesheet' type='text/css' href="/bg<?php print $this->getStyleSheet('css/style.css'); ?>" />
        <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1' />
    </head>
    <body <?php  if ($c->isEditMode()) { ?> class='editmode' <?php  } ?>>
        <div class='c5wrapper'>
             <div id='container'>
                 <div id='content-promo' class='content-promo full-width'>
                     <div id='carousel-wrapper' class='content-promo carousel-wrapper'>
                         <?php
                            $a = new Area('Carousel');
                            $a->display($c);
                         ?>
                     </div>  <!-- End of carousel wrapper -->

                     <a href='/bg#' id='ui-carousel-prev' class='carousel-controls'><span class='carousel-control-text'>Prev</span></a>
                     <a href='/bg#' id='ui-carousel-next' class='carousel-controls'><span class='carousel-control-text'>Next</span></a>

                 </div>  <!-- End of content promo -->
<?php $this->inc('elements/footer.php'); ?>

person Walking In The Darkness    schedule 30.03.2013    source източник


Отговори (1)


Как първият примерен код не работи? Не прави това, което очаквате? Или изобщо не прави нищо? Ако приемем, че работи функционално (т.е. добавя този маркер, когато не е в режим на редактиране), тогава пълното решение на това, което искате да направите, ще бъде:

<?php $u = new User();
if ($u->isRegistered() && ! $c->isEditMode()) { ?>
    <script type="text/javascript" src="problematic.js"></script>
<?php } ?>

Ако първият пример за код не работи, тогава е възможно $c да е предефиниран или нещо друго също толкова малко вероятно...

person James S    schedule 31.03.2013
comment
1. когато се използва първият пример за код: A. потребителят не е влязъл: въртележката работи, B. потребителят е влязъл, но не е в режим на редактиране - въртележката не работи C. потребителят е влязъл и е в режим на редактиране - въртележката не работи 2. извинявам се, аз не беше достатъчно конкретен - искам problematic.js да се изпълнява, когато потребителят не е влязъл, когато потребителят е влязъл, но не в режим на редактиране, и не искам да се изпълнява САМО в режим на редактиране - person Walking In The Darkness; 01.04.2013
comment
Трябва да променя малко първоначалния си въпрос, преди няколко дни допълнителен ефект беше изчезването на съдържанието на горната лента, когато се използва първия примерен код и потребителят влезе в системата. Току-що го проверих и сега изглежда, че единственият ефект е, че кодът от problematic.js е не се изпълнява, когато потребителят влезе (въртележката не работи) - person Walking In The Darkness; 01.04.2013
comment
моля, игнорирайте втория ми коментар - качих грешен файл в сървъра и се излъгах, сега първоначалният въпрос е редактиран и се надявам да е по-ясен - person Walking In The Darkness; 01.04.2013
comment
Не е много по-ясно... :) Трябва да правите разлика между работещия код (като етикетът на скрипта problematic.js е включен в HTML източника) и въртележката, работеща или не. Звучи ми така, сякаш кодът, който обсъждаме, работи (т.е. включва етикета на скрипта, когато искате), но проблемът е в действителния js файл... и това е съвсем различен въпрос. Първото ми предложение за това, като се има предвид какво се случва, е, че problematic.js включва jquery (или jquery ui или нещо подобно), което c5 вече включва. Уверете се, че не го прави. - person James S; 01.04.2013
comment
прав си - има разлика: в случаи A & B - независимо дали потребителят е влязъл или не - problematic.js е включен, но въртележката не работи, когато потребителят е влязъл; в случай, че C - problematic.js е включен само когато потребителят НЕ е влязъл, така че всъщност и двата примера на код работят както се предполага и причината за проблема е различна... ето моето problematic.js - person Walking In The Darkness; 01.04.2013
comment
Обзалагам се, че има грешка в javascript. Проверихте ли конзолата? Източникът не работи на jsfiddle, защото rcarousel не е наличен. Това успешно ли се зарежда? Конзолата трябва да ви помогне да разберете нещата оттук.... (Освен това наистина трябва да използвате css медийни заявки вместо всички тези луди if (width > x) неща. - person James S; 01.04.2013
comment
Използвам медийни заявки, тези луди неща са необходими за презаписване на размерите на въртележката по подразбиране. Хм, всичко в скрипта изглежда работи: въртележката работи, правилните имена са присвоени на връзките Prev и Next... Ще се опитам да прекодирам js файла и ще се върна - person Walking In The Darkness; 01.04.2013