Yii向模板添加另一个$ content

时间:2013-03-28 13:34:29

标签: php javascript yii

我有Yii模板,结构是:

  1. 中包含CSS文件
  2. 之后立即回复$ content
  3. 在$ content
  4. 之后加入Javascript文件(如JQPlot)

    我想要做的是在包含所有Javascript文件后添加Javascript / PHP代码的自定义组合。我知道只需将代码添加到模板即可。

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

    我可以创建与$ content类似的新元素,但它会包含例如“js.php”来自与“index.php”相同的View文件夹吗? “js.php”将出现在我需要自定义代码的每个视图文件夹中,并包含该特定页面的js / php混合代码。

    感谢您的帮助!

2 个答案:

答案 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()方法,但您也可以使用过滤器,行为或任何其他最适合您需求的方法。