Страница 1 из 2
Assets aka Ресурсы
Добавлено: 2009.06.10, 23:12
slavcodev
Привет.
Есть ли тут люди кто разобрался с этими ассетами
В документации всего один абзац и тот мимо кассы. Из АПИ понял что ассеты это ресурсы которые могут из компонентов копироваться в спец.папку чтоб отдать пользователю по доступному линку. Вроде бы все просто, но и не совсем.
В папке /assets появляются папки с файлами, но в папках есть одинаковые файлы. Если кто разобрался напишите по русски в двух словах, что такое ассеты, потому как предчувствую, что очень полезная вещь в умелых руках
Спасибо.
Re: Assets aka Ресурсы
Добавлено: 2009.06.11, 11:57
samdark
Основная идея верна. Asset копируется из защищённой папки в публичную. Ещё один плюс — перед выводом с ними можно что-нибудь сделать. Например, объединить CSS в один файл или минифицировать JS.
Вот кусочек кода для подключения ресурсов:
Код: Выделить всё
// @see http://www.yiiframework.com/doc/cookbook/12/
$cs=Yii::app()->clientScript;
$am = Yii::app()->assetManager;
$am->publish('js/jquery.autolineheight.js');
$am->publish('js/jqem-compressed.js');
$am->publish('js/common.js');
$cs->registerCoreScript('jquery');
$cs->registerScriptFile($am->getPublishedUrl('js/jquery.autolineheight.js'), CClientScript::POS_HEAD);
$cs->registerScriptFile($am->getPublishedUrl('js/jqem-compressed.js'), CClientScript::POS_HEAD);
$cs->registerScriptFile($am->getPublishedUrl('js/common.js'), CClientScript::POS_HEAD);
Re: Assets aka Ресурсы
Добавлено: 2009.06.11, 15:45
slavcodev
и в представлении не надо ничего прописывать?
и как быть с тем что в папке ассетов у меня несколько папок типа "tdlho" и в них могут встречаться одинаковые файлы.
Re: Assets aka Ресурсы
Добавлено: 2009.06.11, 16:12
samdark
По идее ничего дополнительно прописывать не надо.
Содержимое папочки с ресурсами лучше не трогать. Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
Re: Assets aka Ресурсы
Добавлено: 2009.06.11, 19:42
slavcodev
Sam Dark писал(а):Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
и как ими управлять или оставлять в надежде что дисковое пространсво никогда не закончится?
Re: Assets aka Ресурсы
Добавлено: 2009.06.12, 00:39
samdark
Можно попробовать вычистить. Должны вроде заново записаться.
Re: Assets aka Ресурсы
Добавлено: 2009.07.02, 21:58
slavcodev
Вернусь к ассетам.
Нужно составить css содержащие свойства
т.е. и сам файл стиля чтоб был как ассет но картинки использованные в стилях тоже подсовывать как ресурсы.
Как решить?
Re: Assets aka Ресурсы
Добавлено: 2009.07.03, 12:33
samdark
М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Re: Assets aka Ресурсы
Добавлено: 2009.07.03, 13:32
Caveman
Sam Dark писал(а):М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Так а других вариантов и нет. Вписать некий уже опубликованный ресурс в "background-image:url("ассет");" можно только динамически, ведь нельзя быть уверенным в пути к ресурсу.
Вот так строится название папки, в которую кидается ресурс:
Код: Выделить всё
return sprintf('%x',crc32($path.Yii::getVersion()));
Где $path - имя файла или папки, в которой он находится (можно указать при публикации).
То есть, должно быть что-то типа этого:
Код: Выделить всё
$bgimage = $assetManager->publish('путь к нужному изображению');
Где-то далее добавление к стилям:
a {
background-image:url($bgimage);
}
Но это как-то не по фен-шую, согласен с SamDark'ом
Re: Assets aka Ресурсы
Добавлено: 2009.07.03, 16:02
slavcodev
Друзья спс, но необходимость отпала
В моем случае достточно всего-лишь ури в css указывать отностительно файла стиля.
Re: Assets aka Ресурсы
Добавлено: 2009.07.03, 16:55
samdark
А ларчик просто открывался… действительно, картинки ведь копируются в то же самое место.
Re: Assets aka Ресурсы
Добавлено: 2009.07.05, 12:24
slavcodev
Как оказалось, при паблике директории, CAssetManager не проверяет файлы на обновление.
Приходится вручную удалять папку из ресурсов чтоб создал ее заново.
Какие предложения по изящному способу обойти этот нюанс.
ЗЫ. В Yii можно как-то перегрузить системные классы?
Re: Assets aka Ресурсы
Добавлено: 2009.07.05, 15:26
Caveman
При публикации каталога копирование возлагается на хелпер CFileHelper, который, действительно, при копировании директории не проверяет обновления файлов. Для изменения поведения надо создавать свои классы, наследующие CAssetManager и CFileHelper, в которых переопределять (там менять-то всего по 1-2 строке) методы publish и copyDirectoryRecursive соответственно...
Хотя, учитывая, что вопрос достаточно насущный будет, лучше было бы внести в список желаемых изменений (ввести параметр, указывающий, перезаписывать все файлы или только обновленные) и к разработчикам ))
Re: Assets aka Ресурсы
Добавлено: 2009.11.25, 16:29
undsoft
Ммм...
Все-таки не очень понятно. Зачем использовать весь этот код, если можно просто создать какую-нибудь директорию /js/ и кидать туда нужные файлы, а потом подключать в html? Директория будет не защищена, лишних движений нет.
Насчет того, что можно потом сжать выходной js, я ничего не смог найти. Ткните кто-нибудь пальцем, плиз.
Re: Assets aka Ресурсы
Добавлено: 2009.11.25, 16:32
samdark
В общем случае это не нужно, но вот при написании модуля или расширения очень и очень полезно: можно поместить js/css/изображения за корнем сервера вместе с кодом и потом удобно копировать модуль в другие приложения.
Re: Assets aka Ресурсы
Добавлено: 2010.02.12, 16:50
Stepan Selyuk
Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать
Re: Assets aka Ресурсы
Добавлено: 2010.02.12, 17:41
slavcodev
Stepan Selyuk писал(а):Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать
Чем же она другая? Виджет это такое расширение
Если готовишь какой-то функционал, который будешь использовать в разных проектах, удобно ресурсы публиковать из папки с расширением.
Re: Assets aka Ресурсы
Добавлено: 2010.02.12, 18:06
Stepan Selyuk
Точно ) я не имел ввиду что формулировки противоречат друг-другу.. они просто разные )
Re: Assets aka Ресурсы
Добавлено: 2010.03.07, 23:21
Tokolist
Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
Re: Assets aka Ресурсы
Добавлено: 2010.03.07, 23:40
slavcodev
Tokolist писал(а):Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
Нет, править его в assets\3b354416, неправильно, тем более что папка при обновлении фреймворка изменится.
У класса CGridView есть свойство cssFile, для собственных стилей.