4

我有 Yii 模板的结构是:

  1. 将 CSS 文件包含在
  2. 回显 $content 之后
  3. 在 $content 之后包含 Javascript 文件(如 JQPlot)

我想做的是在包含所有 Javascript 文件之后添加 Javascript/PHP 代码的自定义组合。我知道这可以通过将代码添加到模板中来完成。

但是我有许多带有自定义 JS/PHP 代码的页面,我想只包含该页面的特定代码以避免加载时间过长。

我可以创建像 $content 一样工作的新元素,但它会包括例如来自与“index.php”相同的视图文件夹中的“js.php”?“js.php”将位于我需要自定义代码的每个视图文件夹中,并包含该特定页面的 js/php 代码组合。

谢谢您的帮助!

4

2 回答 2

0

你可以试试:

Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/example.css');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/css/example.js');

您可以从控制器调用它

于 2013-03-29T10:28:01.477 回答
0

剪辑是您最好的选择,正如@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()方法,但您也可以使用过滤器、行为或任何其他最适合您需求的方法。

于 2013-03-29T14:52:41.627 回答