我有Yii模板,结构是:
我想要做的是在包含所有Javascript文件后添加Javascript / PHP代码的自定义组合。我知道只需将代码添加到模板即可。
但我有很多页面都有自定义JS / PHP代码,我想只包含该页面的特定代码,以避免长时间加载。
我可以创建与$ content类似的新元素,但它会包含例如“js.php”来自与“index.php”相同的View文件夹吗? “js.php”将出现在我需要自定义代码的每个视图文件夹中,并包含该特定页面的js / php混合代码。
感谢您的帮助!
答案 0 :(得分:0)
您可以尝试:
的的Yii ::应用程序() - > clientScript-> registerCssFile(Yii的::应用程序() - >的baseUrl '/ CSS / example.css'); 强>
的的Yii ::应用程序() - > clientScript-> registerScriptFile(Yii的::应用程序() - >的baseUrl '/ CSS / example.js'); 强>
您可以从控制器
中调用它答案 1 :(得分:0)
剪辑是你最好的选择,正如@jfrej建议你指出讨论剪辑的论坛话题。
在传统情况下,每个控制器都关联了一个文件夹,其中放置了所有视图,并且您希望包含在布局的末尾(这是它们的引用方式) ,而不是 templates )一些PHP + Javascript内容,这些内容对于控制器中的所有操作都是通用的。
我会覆盖CController::afterRender()
方法来捕获剪辑的内容;我们可以调用你的剪辑controller_content
:
afterRender(string $view, string &$output)
$this->beginClip('controller_content');
// output here any content you want to capture into your clip
// e.g. renderPartial, echo, etc.
...
$this->endClip();
parent::afterRender($view, $output);
}
然后,在您的布局中,您将在所有始终存在的内容之后渲染剪辑,例如:
// register your CSSs
// output $content variable
// register Javascript
...
<?= $this->clips['controller_content'] ?>
当然,您可以通过多种方式生成剪辑内容。在这里,我覆盖了CController::afterRender()
方法,但您也可以使用过滤器,行为或任何其他最适合您需求的方法。