Как правильно работать с активами в Yii?

Я заметил, что Yii создает странный набор каталогов (например, 8523d23 или 10s89b92) в каталоге ресурсов, и это происходит даже во время выполнения. Например, в одной из моих таблиц появилось более 10 записей, сработала разбивка на страницы, и я получил новые файлы в подкаталоге ресурсов с именем pager.css.

Когда я переведу свой сайт из тестирования в производство, должен ли я скопировать все это или просто создать пустой каталог «активы», и он будет заполнен во время выполнения?

Если я хочу добавить, например, новый плагин jQuery, как мне поступить?

Например, я хочу добавить jquery.charcounter.js, копировать ли его в активы или в yii/framework/web/js/source? Если я сделаю последнее, как мне включить этот файл .js в вывод HTML-страницы?


person Milan Babuškov    schedule 05.11.2009    source источник
comment
Что еще я должен добавить к моему ответу, чтобы он был принят, пожалуйста?   -  person pestaa    schedule 07.11.2009
comment
Пожалуйста, ознакомьтесь с изменениями.   -  person pestaa    schedule 08.11.2009
comment
suriyanphp.blogspot.com/2012/06/   -  person Yasen    schedule 27.01.2014


Ответы (2)


assets должен быть доступным для записи каталогом. Yii заботится об активах.

При вызове Yii::app()->assetManager->publish() некоторые таблицы стилей, изображения, сценарии или даже целые каталоги могут быть помещены в папку, видимую в Интернете.

pager.css и другие незнакомые файлы создаются виджетами (например, CLinkPager) и другими компонентами (например, CClientScript публикует jQuery всякий раз, когда вам это нужно).

Во время развертывания эта папка должна быть пустой, но это не имеет большого значения.

Добавление плагинов никогда не должно выполняться через папки фреймворка. Вы можете поместить их либо в каталог components и опубликовать его во время выполнения, если это необходимо, либо в любой другой удобный видимый каталог (например, как images или css).

Обновлять

Чтобы встроить jquery.charcounter.js, поместите его в каталог components, затем вызовите

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('application.components').'/jquery.charcounter.js'
    ),
    CClientScript::POS_END
);

Что касается странных имен папок, я твердо верю, что они являются уникальными хэшами (или их частью), поэтому их можно отличить, если приложение использует несколько расширений.

person pestaa    schedule 05.11.2009
comment
То есть нет четких правил на этот счет? Что точно вы бы сделали, чтобы включить jquery.charcounter.js, если бы это было требованием вашего проекта? - person Milan Babuškov; 08.11.2009
comment
Кроме того, не забудьте объяснить, почему такие забавные имена каталогов, как 734a23c4? - person Milan Babuškov; 08.11.2009
comment
Он создает хэш пути (который может быть /very/deep/linking/path) и публикует в этом новом каталоге. Это означает, что структура каталогов не отображается (и, что более важно, вы можете публиковать ресурсы, которые обычно недоступны в Интернете). Вы также можете расширить assetsManager для автоматического сжатия файлов CSS/JS (см. кулинарную книгу). - person Blair McMillan; 24.11.2009
comment
привет, где должен быть сделан вызов Yii: app ()? В контроллере? - person Paul Preibisch; 25.11.2013
comment
@PaulPreibisch Вы можете вызывать его где угодно, но предпочтительно в службе, которая отвечает за генерацию ответов, которая действительно чаще всего является контроллером. - person pestaa; 26.11.2013

Это разрешит запрос, поскольку это дает подробное объяснение папки ресурсов:

http://www.yiiframework.com/wiki/148/understanding-assets/

person Kshitij    schedule 20.02.2011
comment
См. также yiiframework.com/wiki /311/ для использования Yii Assets для всего вашего веб-приложения (вместо модуля) - person Ivo Renkema; 04.01.2013