CakePHP如何从元素内部添加script()?
我在CakePHPCakePHP如何从元素内部添加script()?,php,cakephp,cakephp-1.3,Php,Cakephp,Cakephp 1.3,我在CakePHPelement文件(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');
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');
?>
不包括在内。我看了一下文件,上面写着:
将内容添加到内部脚本
缓冲器此缓冲区可用
在布局中作为$scripts\u for\u布局。
此方法在创建时非常有用
需要添加javascript或
css直接应用于布局。(使)留在家里
请注意,脚本是从
布局,或布局中的元素将
不能添加到$scripts\u中,以用于\u布局。
这种方法最常用于
内部助手,如Javascript
和Html助手
关键部分:
请记住,从布局中添加的脚本或布局中的元素不会添加到$scripts\u for\u布局中
那我该怎么做呢
我想我可以在default.ctp
布局中添加
。但这感觉不太对,因为它会将布局和元素紧密地捆绑在一起
CakePHP的最佳实践方法是什么?addScript()
不加载文件;它将实际代码添加到布局变量的$scripts\u中。其想法是,布局是加载JavaScript文件和代码的好地方。通过这种方式,您可以在一个位置输出所有代码—在头块中或在末尾—无论哪种方式都可以一起输出。因此,如果您的视图中有JavaScript代码,而不是内联输出,则可以将其传递给布局
加载脚本文件的最佳方法是使用HTML助手-echo$this->HTML->script(“脚本或数组('of','scripts')”)考虑到这一点,您可以$this->set('scripts','mega_-drop')在元素中编写>代码,然后使用布局中的$scripts变量调用Html帮助器
问题是:如果从布局中调用nav_default.ctp,它将不起作用。$this->set()在视图(或从视图中调用的元素)内部工作,因为视图是在布局之前渲染的。如果要从布局中调用元素,则在布局中设置ViewVar已为时过晚最好的方法是从控制器设置()脚本变量,并在布局中使用if(isset($scripts)){echo$this->Html->script($scripts);}
。试试看
$this->Html->script('mega_drop', $inline=false);
在你的元素中没有回声
第二个参数表示将其添加到$scripts\u for\u布局变量中
您应该能够在元素中实现这一点,这样javascript只在元素被激活时才被包含 正确有效的1.3.x CakePHP 2.0开发版本来自example.ctp
文件:
$this->addScript($this->Javascript->link('tab_enabler'));
$this->addScript($this->Html->css('jquery.tabs'));
这是一个如何从视图中正确包含CSS和JS文件并添加变量$scripts\u for_layout
的示例,以避免W3C产生验证错误,因为在
中添加指向CSS文件的链接是不正确的