Yiiでは、CSSをページに取り込むためのさまざまな方法があります。
問題は、拡張機能、ウィジェット、テーマなどを使い始めると、それらはすべて独自のスタイルシートを持ち(十分に公平)、CSSが処理されてHTMLに挿入される順序は、それらが設定されているかどうかによって異なります。コントローラー、ビュー、レイアウト、またはYiiアセットマネージャーまたはYiiパッケージマネージャーを使用しています。
最近、私たちのYiiプロジェクトはconfig/main.php
、に登録されているパッケージを使用するように変更されました。
'clientScript'=>array(
'packages'=> array(
'theme'=>array(
'basePath'=>'yii.themes.default',
'css'=>array('css/reset.css','css/main.css','css/form.css'),
'js'=>array('js/lib.js'),
'depends'=>array('jquery'),
),
...
これにより、CSSファイルが破損しました。これは、グリッドビュースタイルをオーバーライドするように設計されており、CGridViewスタイルシートの前に含まれていたためです。
解決策は、以下の下部にこれらの行を追加することでしたlayouts/main.php
。
$path = Yii::getPathOfAlias('yii.themes.default').'/css/style.css';
$cssFile = Yii::app()->getAssetManager()->publish($path);
Yii::app()->getClientScript()->registerCssFile($cssFile);
私にとって、これは完璧とは言えない解決策のように感じます。将来、私たちがやったことを忘れたり、別のテーマや別のプロジェクトで同じようなことをしなければならないときに問題が発生する可能性があります。
非常に多くの異なるソースからCSSを提供できる場合、CSSを効果的に管理するためのより良い方法はありますか?
編集:
CClientScriptを拡張して、「オーバーライド」のようなオプションを提供することを検討しています。このオプションでは、登録するファイルの後に含める必要のあるCSSファイルの配列を指定できます。少し不安定な気がしますが...