Страница 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 содержащие свойства

Код: Выделить всё

a {
background-image:url("ассет");
}
т.е. и сам файл стиля чтоб был как ассет но картинки использованные в стилях тоже подсовывать как ресурсы.

Как решить?

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, для собственных стилей.