бетон5 - jQueryUI в режиме редактирования

Я использую плагин карусели, который зависит от jQueryUI. Чтобы загрузить его, я просто использую Загрузить дополнение jQueryUI из магазина.

Изменить. Точнее. Что происходит:

A. когда problematic.js загружается напрямую - без if: карусель не работает, когда пользователь залогинен и содержимое верхней панели ("Edit", "Dashboard") исчезает, так что даже невозможно перейти в режим редактирования

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="<?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='#' id='ui-carousel-prev' class='carousel-controls'><span class='carousel-control-text'>Prev</span></a>
                     <a href='#' 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) и работающую или нет карусель. Мне кажется, что код, который мы обсуждаем, работает (т. е. включает тег script, когда вы этого хотите), но проблема в самом файле js... и это совсем другой вопрос. Мое первое предложение для этого, учитывая то, что происходит, заключается в том, что Problematic.js включает в себя jquery (или jquery ui или что-то еще), который c5 уже включает. Убедитесь, что это не так. - person James S; 01.04.2013
comment
вы правы - есть разница: в случаях А и Б - залогинен пользователь или нет - 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