Assets aka Ресурсы

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Assets aka Ресурсы

Сообщение slavcodev »

Привет.

Есть ли тут люди кто разобрался с этими ассетами :( В документации всего один абзац и тот мимо кассы. Из АПИ понял что ассеты это ресурсы которые могут из компонентов копироваться в спец.папку чтоб отдать пользователю по доступному линку. Вроде бы все просто, но и не совсем.
В папке /assets появляются папки с файлами, но в папках есть одинаковые файлы. Если кто разобрался напишите по русски в двух словах, что такое ассеты, потому как предчувствую, что очень полезная вещь в умелых руках :)

Спасибо.
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение 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);
 
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

и в представлении не надо ничего прописывать?
и как быть с тем что в папке ассетов у меня несколько папок типа "tdlho" и в них могут встречаться одинаковые файлы.
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение samdark »

По идее ничего дополнительно прописывать не надо.

Содержимое папочки с ресурсами лучше не трогать. Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Sam Dark писал(а):Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
и как ими управлять или оставлять в надежде что дисковое пространсво никогда не закончится?
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение samdark »

Можно попробовать вычистить. Должны вроде заново записаться.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Вернусь к ассетам.

Нужно составить css содержащие свойства

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

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

Как решить?
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение samdark »

М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Assets aka Ресурсы

Сообщение Caveman »

Sam Dark писал(а):М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Так а других вариантов и нет. Вписать некий уже опубликованный ресурс в "background-image:url("ассет");" можно только динамически, ведь нельзя быть уверенным в пути к ресурсу.
Вот так строится название папки, в которую кидается ресурс:

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

return sprintf('%x',crc32($path.Yii::getVersion())); 
Где $path - имя файла или папки, в которой он находится (можно указать при публикации).

То есть, должно быть что-то типа этого:

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

$bgimage = $assetManager->publish('путь к нужному изображению');

Где-то далее добавление к стилям:
a {
 background-image:url($bgimage);
} 
Но это как-то не по фен-шую, согласен с SamDark'ом
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Друзья спс, но необходимость отпала :)
В моем случае достточно всего-лишь ури в css указывать отностительно файла стиля.
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение samdark »

А ларчик просто открывался… действительно, картинки ведь копируются в то же самое место.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Как оказалось, при паблике директории, CAssetManager не проверяет файлы на обновление.
Приходится вручную удалять папку из ресурсов чтоб создал ее заново.
Какие предложения по изящному способу обойти этот нюанс.

ЗЫ. В Yii можно как-то перегрузить системные классы?
Жду Yii 3!
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Assets aka Ресурсы

Сообщение Caveman »

При публикации каталога копирование возлагается на хелпер CFileHelper, который, действительно, при копировании директории не проверяет обновления файлов. Для изменения поведения надо создавать свои классы, наследующие CAssetManager и CFileHelper, в которых переопределять (там менять-то всего по 1-2 строке) методы publish и copyDirectoryRecursive соответственно...

Хотя, учитывая, что вопрос достаточно насущный будет, лучше было бы внести в список желаемых изменений (ввести параметр, указывающий, перезаписывать все файлы или только обновленные) и к разработчикам ))
Аватара пользователя
undsoft
Сообщения: 20
Зарегистрирован: 2009.09.16, 14:16

Re: Assets aka Ресурсы

Сообщение undsoft »

Ммм...
Все-таки не очень понятно. Зачем использовать весь этот код, если можно просто создать какую-нибудь директорию /js/ и кидать туда нужные файлы, а потом подключать в html? Директория будет не защищена, лишних движений нет.

Насчет того, что можно потом сжать выходной js, я ничего не смог найти. Ткните кто-нибудь пальцем, плиз.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Assets aka Ресурсы

Сообщение samdark »

В общем случае это не нужно, но вот при написании модуля или расширения очень и очень полезно: можно поместить js/css/изображения за корнем сервера вместе с кодом и потом удобно копировать модуль в другие приложения.
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Assets aka Ресурсы

Сообщение Stepan Selyuk »

Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать :)
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Stepan Selyuk писал(а):Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать :)
Чем же она другая? Виджет это такое расширение :) Если готовишь какой-то функционал, который будешь использовать в разных проектах, удобно ресурсы публиковать из папки с расширением.
Жду Yii 3!
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Assets aka Ресурсы

Сообщение Stepan Selyuk »

Точно ) я не имел ввиду что формулировки противоречат друг-другу.. они просто разные )
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: Assets aka Ресурсы

Сообщение Tokolist »

Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Assets aka Ресурсы

Сообщение slavcodev »

Tokolist писал(а):Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
Нет, править его в assets\3b354416, неправильно, тем более что папка при обновлении фреймворка изменится.
У класса CGridView есть свойство cssFile, для собственных стилей.
Жду Yii 3!
Ответить