【问题标题】:CakePHP how to addScript() from inside element?CakePHP 如何从内部元素添加脚本()?
【发布时间】:2011-01-17 19:38:14
【问题描述】:

我在 CakePHP element 文件 (views/elements/nav_default.ctp) 中有一个导航菜单。

该文件包含在另一个元素中,即标题 (views/elements/header_default.ctp),然后包含在布局文件 (views/layouts/default.ctp) 中。

我试图告诉 Cake 从 nav 元素中加载一个 js 文件 (webroot/js/mega_drop.js),如下所示:

<?php
$this->addScript('mega_drop');
?>

它不包括在内。我查看了addScript 的文档,上面写着:

向内部脚本添加内容 缓冲。此缓冲区可用 在布局中作为 $scripts_for_layout。 此方法在创建时很有帮助 需要添加 javascript 的助手或 css 直接到布局。保持在 请注意,从 布局,或布局中的元素将 不被添加到 $scripts_for_layout。 这种方法最常用于 内部助手,如 Javascript 和 Html 助手。

关键部分:

请记住,从布局中添加的脚本或布局中的元素不会添加到 $scripts_for_layout。

那我该怎么做呢?

我想我可以在default.ctp 布局中添加一个&lt;script src="/js/mega_drop.js"&gt;&lt;/script&gt;。但这感觉不太对劲,因为它会将布局和元素紧密结合在一起。

CakePHP 的最佳实践方法是什么?

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

    addScript() 不加载文件;它将实际代码添加到$scripts_for_layout 变量中。这个想法是布局是加载 JavaScript 文件和代码的好地方。这样,您可以在一个位置输出所有代码 - 在头块或末尾 - 无论哪种方式都在一起。因此,如果您的视图中有 JavaScript 代码,而不是内联输出,您可以将其传递给布局。

    加载脚本文件的最佳方式是使用 HTML Helper-echo $this-&gt;Html-&gt;script("script or array('of', 'scripts')"); 考虑到这一点,您可以在元素中使用 $this-&gt;set('scripts', 'mega_drop');,然后使用布局中的 $scripts 变量调用 Html Helper。

    这样的问题:如果你的 nav_default.ctp 从布局中调用,它将不起作用。 $this->set() 在视图(或从view) 因为 View 是在 Layout 之前渲染的。如果您从布局中调用您的元素,那么设置 viewVars 以在布局中使用为时已晚。 最好的办法是从控制器中设置()脚本变量并在布局中使用 if(isset($scripts)) { echo $this-&gt;Html-&gt;script($scripts); }

    【讨论】:

      【解决方案2】:

      正确且有效的 1.3.x CakePHP 2.0 Dev 来自 example.ctp 文件:

      $this->addScript($this->Javascript->link('tab_enabler')); 
      $this->addScript($this->Html->css('jquery.tabs'));
      

      这是一个示例,说明如何从视图中正确包含 CSS 和 JS 文件并添加变量 $scripts_for_layout 以不产生 W3C 验证错误,因为在 @ 中添加指向 css 文件的链接是不正确的987654324@

      【讨论】:

        【解决方案3】:

        试试

        $this->Html->script('mega_drop', $inline=false);
        

        在没有回声的元素中。

        第二个参数表示将其添加到 $scripts_for_layout 变量中。

        您应该能够在您的元素中执行此操作,以便仅在元素存在时才包含 javascript。

        【讨论】:

          猜你喜欢
          • 2013-09-18
          • 1970-01-01
          • 1970-01-01
          • 2020-09-05
          • 2012-06-15
          • 1970-01-01
          • 1970-01-01
          • 2020-09-28
          • 2015-03-17
          相关资源
          最近更新 更多