【问题标题】:concrete5 - jQueryUI in Edit mode具体5 - 编辑模式下的jQueryUI
【发布时间】:2013-04-01 08:51:58
【问题描述】:

我使用依赖于 jQueryUI 的轮播插件。要加载它,我只需使用来自市场的Load jQueryUI addon

编辑 - 更准确地说。会发生什么:

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="<?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'); ?>

【问题讨论】:

    标签: concrete5


    【解决方案1】:

    第一个代码示例如何不起作用?它不做你所擅长的吗?或者它什么都不做?假设它在功能上有效(即,在不处于编辑模式时添加该标签),那么您想要做的完整解决方案将是:

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

    如果第一个代码示例不起作用,那么可能 $c 已被重新定义,或者其他同样不太可能的东西......

    【讨论】:

    • 1.当使用第一个代码示例时:A. 用户未登录:轮播工作,B. 用户登录但未处于编辑模式 - 轮播不工作 C. 用户登录并处于编辑模式 - 轮播不工作 2. 抱歉,我没有t 足够具体 - 我希望 problematic.js 在用户未登录时执行,当用户被登录但未处于编辑模式时,我不希望它仅在编辑模式下执行
    • 我需要稍微改变我原来的问题,几天前,当第一个代码示例使用并且用户登录时,顶部栏的内容消失了。我刚刚检查过,现在看来唯一的效果是用户登录时不会执行来自problematic.js 的代码(轮播不起作用)
    • 请忽略我的第二条评论 - 我将错误的文件上传到服务器并自欺欺人,现在原始问题已编辑,希望更清楚
    • 不是很清楚... :) 您需要区分代码“工作”(通过将有问题的.js 脚本标签包含在 HTML 源代码中)和轮播工作与否.在我看来,我们正在讨论的代码正在运行(即,当你想要它时包括脚本标签),但问题出在实际的 js 文件中......这是一个完全不同的问题。考虑到正在发生的事情,我的第一个建议是,problem.js 包含 jquery(或 jquery ui 或其他东西),c5 已经包含了。确保它不会那样做。
    • 你是对的 - 有区别:在情况 A 和 B - 用户是否登录 - 包括 problematic.js,但当用户登录时轮播不起作用;万一 C - problematic.js 仅在用户未登录时才包含在内,因此实际上两个代码示例都按预期工作并且问题的原因不同......这是我的problematic.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多