Assets aka Ресурсы
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Assets aka Ресурсы
Привет.
Есть ли тут люди кто разобрался с этими ассетами В документации всего один абзац и тот мимо кассы. Из АПИ понял что ассеты это ресурсы которые могут из компонентов копироваться в спец.папку чтоб отдать пользователю по доступному линку. Вроде бы все просто, но и не совсем.
В папке /assets появляются папки с файлами, но в папках есть одинаковые файлы. Если кто разобрался напишите по русски в двух словах, что такое ассеты, потому как предчувствую, что очень полезная вещь в умелых руках
Спасибо.
Есть ли тут люди кто разобрался с этими ассетами В документации всего один абзац и тот мимо кассы. Из АПИ понял что ассеты это ресурсы которые могут из компонентов копироваться в спец.папку чтоб отдать пользователю по доступному линку. Вроде бы все просто, но и не совсем.
В папке /assets появляются папки с файлами, но в папках есть одинаковые файлы. Если кто разобрался напишите по русски в двух словах, что такое ассеты, потому как предчувствую, что очень полезная вещь в умелых руках
Спасибо.
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
Основная идея верна. 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);
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
и в представлении не надо ничего прописывать?
и как быть с тем что в папке ассетов у меня несколько папок типа "tdlho" и в них могут встречаться одинаковые файлы.
и как быть с тем что в папке ассетов у меня несколько папок типа "tdlho" и в них могут встречаться одинаковые файлы.
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
По идее ничего дополнительно прописывать не надо.
Содержимое папочки с ресурсами лучше не трогать. Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
Содержимое папочки с ресурсами лучше не трогать. Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
и как ими управлять или оставлять в надежде что дисковое пространсво никогда не закончится?Sam Dark писал(а):Разные папки там — ревизии. т.е. берутся файлы последней ревизии. При изменении они копируются заново.
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
Можно попробовать вычистить. Должны вроде заново записаться.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
Вернусь к ассетам.
Нужно составить css содержащие свойства
т.е. и сам файл стиля чтоб был как ассет но картинки использованные в стилях тоже подсовывать как ресурсы.
Как решить?
Нужно составить css содержащие свойства
Код: Выделить всё
a {
background-image:url("ассет");
}
Как решить?
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Нравится Yii? Давайте сделаем его лучше!.
Re: Assets aka Ресурсы
Так а других вариантов и нет. Вписать некий уже опубликованный ресурс в "background-image:url("ассет");" можно только динамически, ведь нельзя быть уверенным в пути к ресурсу.Sam Dark писал(а):М… например, писать CSS динамически. Но вообще мне такая идея не очень нравится.
Вот так строится название папки, в которую кидается ресурс:
Код: Выделить всё
return sprintf('%x',crc32($path.Yii::getVersion()));
То есть, должно быть что-то типа этого:
Код: Выделить всё
$bgimage = $assetManager->publish('путь к нужному изображению');
Где-то далее добавление к стилям:
a {
background-image:url($bgimage);
}
[Редкие] Записки пещерного человека
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
Друзья спс, но необходимость отпала
В моем случае достточно всего-лишь ури в css указывать отностительно файла стиля.
В моем случае достточно всего-лишь ури в css указывать отностительно файла стиля.
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
А ларчик просто открывался… действительно, картинки ведь копируются в то же самое место.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
Как оказалось, при паблике директории, CAssetManager не проверяет файлы на обновление.
Приходится вручную удалять папку из ресурсов чтоб создал ее заново.
Какие предложения по изящному способу обойти этот нюанс.
ЗЫ. В Yii можно как-то перегрузить системные классы?
Приходится вручную удалять папку из ресурсов чтоб создал ее заново.
Какие предложения по изящному способу обойти этот нюанс.
ЗЫ. В Yii можно как-то перегрузить системные классы?
Жду Yii 3!
Re: Assets aka Ресурсы
При публикации каталога копирование возлагается на хелпер CFileHelper, который, действительно, при копировании директории не проверяет обновления файлов. Для изменения поведения надо создавать свои классы, наследующие CAssetManager и CFileHelper, в которых переопределять (там менять-то всего по 1-2 строке) методы publish и copyDirectoryRecursive соответственно...
Хотя, учитывая, что вопрос достаточно насущный будет, лучше было бы внести в список желаемых изменений (ввести параметр, указывающий, перезаписывать все файлы или только обновленные) и к разработчикам ))
Хотя, учитывая, что вопрос достаточно насущный будет, лучше было бы внести в список желаемых изменений (ввести параметр, указывающий, перезаписывать все файлы или только обновленные) и к разработчикам ))
[Редкие] Записки пещерного человека
Re: Assets aka Ресурсы
Ммм...
Все-таки не очень понятно. Зачем использовать весь этот код, если можно просто создать какую-нибудь директорию /js/ и кидать туда нужные файлы, а потом подключать в html? Директория будет не защищена, лишних движений нет.
Насчет того, что можно потом сжать выходной js, я ничего не смог найти. Ткните кто-нибудь пальцем, плиз.
Все-таки не очень понятно. Зачем использовать весь этот код, если можно просто создать какую-нибудь директорию /js/ и кидать туда нужные файлы, а потом подключать в html? Директория будет не защищена, лишних движений нет.
Насчет того, что можно потом сжать выходной js, я ничего не смог найти. Ткните кто-нибудь пальцем, плиз.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Assets aka Ресурсы
В общем случае это не нужно, но вот при написании модуля или расширения очень и очень полезно: можно поместить js/css/изображения за корнем сервера вместе с кодом и потом удобно копировать модуль в другие приложения.
Нравится Yii? Давайте сделаем его лучше!.
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Assets aka Ресурсы
Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать
Сначала невидимое, затем видимое. И так у всех программистов :)
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
Чем же она другая? Виджет это такое расширение Если готовишь какой-то функционал, который будешь использовать в разных проектах, удобно ресурсы публиковать из папки с расширением.Stepan Selyuk писал(а):Я где-то другую формулировку прочитал:
Используется например для виджетов у которых эти файлы лежат рядом (для удобства распространения), но доступ к ним запрещен естественно. Вот их нужно опубликовать
Жду Yii 3!
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Assets aka Ресурсы
Точно ) я не имел ввиду что формулировки противоречат друг-другу.. они просто разные )
Сначала невидимое, затем видимое. И так у всех программистов :)
Re: Assets aka Ресурсы
Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Assets aka Ресурсы
Нет, править его в assets\3b354416, неправильно, тем более что папка при обновлении фреймворка изменится.Tokolist писал(а):Вопрос по ассетам. Хочу поправить файл стилей CGridView.
Как это правильно сделать? Его можно безболезненно править в assets\3b354416\gridview\ ?
У класса CGridView есть свойство cssFile, для собственных стилей.
Жду Yii 3!