我有一个Yii模板,结构是:
- 包含 中的CSS文件
- 在 后面echo $content
- 在$content 后面包含Javascript文件(如JQPlot)
我想做的是添加自定义混合的Javascript/PHP代码后,包括所有Javascript文件。我知道只需将代码添加到模板中即可完成。
但是我有许多自定义JS/PHP代码的页面,我想只包括该页面的特定代码,以避免长时间加载
我可以创建新的元素,像$content工作,但它将包括例如"js.php"从相同的视图文件夹"index.php"?"js.php"将在每个视图文件夹中,我需要自定义代码,并包含特定页面的js/php混合代码。
谢谢你的帮助!
剪辑是你最好的选择,@jfrej建议你指向一个讨论剪辑的论坛主题。
在常规情况下,每个控制器都关联了一个文件夹,其中放置了所有视图,并且在这种情况下,您希望在布局(这是它们的引用方式,而不是模板)的末尾包含一些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()
方法,但您也可以使用过滤器,行为或任何其他最适合您需求的方法。
您可以尝试:
Yii::应用()-> clientScript -> registerCssFile (Yii:应用程序()-> baseUrl。/css/example.css);
Yii::应用()-> clientScript -> registerScriptFile (Yii:应用程序()-> baseUrl。/css/example.js);
可以从控制器