4

ユーザースクリプトをグローバルに登録して、サイト全体で利用できるようにしたいと思います。これで、コントローラーのすべてのアクションに挿入します。

Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');

しかし、本当に私はそれが良い方法ではないことを理解しています...

4

4 に答える 4

6

プロジェクトでテーマを使用することを楽しみにしている場合は、いくつかのcssとスクリプトをレイアウトファイル(views / layouts / my-layout-file.php)に配置します。テーマを変更する場合は、別のcssを使用し、場合によっては別のスクリプトを使用するため、一緒に使用したくないためです。

しかし、テーマ間で変更されなかったいくつかのメインのcssとsciptsは、メインのコントローラー(protected / components / Controller.php)に入れ、他のすべてのコントローラー(/ protected / controllers /)はこのクラスのコントローラーを拡張します

class PageController extends Controller {

したがって、すべてのコントローラーが親クラスで使用している場合は、親クラスだけを編集して、次のようなものを追加できます。

public function beforeRender( $view ) {
    ...
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
    ...
    return true;
}

そして、すべてのアクションが同じスクリプトを使用するようになります。

編集:@realtebo(コメント内)は、'beforeRender'ではなく' beforeRender 'を使用することを指摘しました。

詳細:ビューのレンダリングフローを理解する

于 2012-04-05T10:17:41.653 に答える
2

この方法でこれを行うことができます: パス protected/components/controller.php を持つ基本コントローラー クラスで init 関数を開始します。

public function init()
{
  Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js'); 
  parent::init();
}
于 2012-04-05T09:53:48.613 に答える
2

グローバルな js および css ファイルを登録する最良の方法は、一部の BaseController の beforeRender() メソッド (beforeAction() ではなく - json または xml をレンダリングすると構造が破壊される可能性があるため) に登録することだと思います。

于 2012-12-06T15:57:07.593 に答える
0

Uは次のように実行できます。1。プライベート属性$_assetsUrlを作成します。2.次に、モジュールまたはコントローラーで

public function getAssetsUrl()
{
    if ($this->_assetsUrl===null)
    {
        $assetsPath = $this->basePath.DIRECTORY_SEPARATOR.'assets';
        $this->_assetsUrl = Yii::app()->assetManager->publish($assetsPath,false,-1,YII_DEBUG);
        if (Yii::app()->theme!==null && is_dir($assetsPath.DIRECTORY_SEPARATOR.Yii::app()->theme->name))
            $this->_assetsUrl .= DIRECTORY_SEPARATOR.Yii::app()->theme->name;
    }
    return $this->_assetsUrl;
}

これがお役に立てば幸いです。このリンクも参照してくださいhttp://www.yiiframework.com/wiki/148/understanding-assets/

于 2012-04-05T09:24:24.300 に答える