我将添加另一个$content到模板中


Yii add another $content to template

我有一个Yii模板,结构是:

  1. 包含
  2. 中的CSS文件
  3. 后面echo $content
  4. 在$content
  5. 后面包含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);

可以从控制器

调用