В 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, если его можно получить из стольких разных источников?
Изменить:
Я рассматриваю возможность расширения CClientScript для предоставления опции типа «переопределения», в которой вы можете указать массив файлов CSS, после которых должен быть включен регистрируемый файл. Хотя кажется, что это может быть немного шелушащимся...