4

私は構造が次のYiiテンプレートを持っています:

  1. CSS ファイルを含める
  2. 直後に $content をエコー
  3. $content の後に Javascript ファイル (JQPlot など) を含める

私がやりたいのは、すべての Javascript ファイルを含めた後に、Javascript/PHP コードのカスタム ミックスを追加することです。これは、テンプレートにコードを追加するだけで実行できることを知っています。

しかし、カスタム JS/PHP コードを含む多くのページがあり、長い読み込み時間を避けるために、そのページの特定のコードのみを含めたいと考えています。

$content のように機能する新しい要素を作成できますが、たとえば「index.php」と同じ View フォルダーから「js.php」が含まれますか? 「js.php」は、カスタムコードが必要なすべてのビューフォルダーにあり、その特定のページのコードの js/php ミックスが含まれています。

助けてくれてありがとう!

4

2 に答える 2

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 に答える
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 に答える