Ресурсы (asset)

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

Ресурсы (asset)

Сообщение samdark »

Полное описание работы с ресурсами.

http://yiiframework.ru/doc/cookbook/ru/core.assets

Tpona
Сообщения: 220
Зарегистрирован: 2011.06.05, 19:00

Re: Ресурсы (asset)

Сообщение Tpona »

Создал расширение, как опубликовать ресурсы, находятся они у меня в ext.myextension.assets
Нужны сразу все, там 3 папки img, js, css

Неужели нужно каждый файл публиковать по отдельности?

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Ресурсы (asset)

Сообщение zelenin »

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

$bootstrap_assets_url = Yii::app()->assetManager->publish( Yii::app()->basePath . '/packages/bootstrap/' );
Yii::app()->clientScript->packages['bootstrap'] = array(
    'baseUrl' => $bootstrap_assets_url,
    'js' => array( YII_DEBUG ? 'js/bootstrap.js' : 'js/bootstrap.min.js' ),
    'css' => array( YII_DEBUG ? 'css/bootstrap.css' : 'css/bootstrap.min.css' ),
    'depends' => array( 'jquery' )
);
Yii::app()->clientScript->registerPackage( 'bootstrap' ); 

andrew68
Сообщения: 20
Зарегистрирован: 2013.08.31, 15:01

Re: Ресурсы (asset)

Сообщение andrew68 »

Ни как не могу разобраться с этими ассетами.

Допустим имеем простое приложение(сайт) без модулей, а просто контроллеры, модели и представления. Нужно прикрутить к сайту ресурсы.
1. Первое моё действие - создаю в папке site/protected/extensions папки js, css и загружаю свои скрипты и стили, так?
2. Что я должен делать дальше, чтобы эти ресурсы были опубликованы в папку assets? При первом вызове в коде или где то в админке я должен себе сделать такую кнопочку "Обновить ресурсы"?
3. Так ли я должен использовать ресурсы из папки assets?

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

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('ext.js')
    ).'/main.js',
    CClientScript::POS_END
);

Yii::app()->clientScript->registerCssFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('ext.css')
    ).'/main.css',
    CClientScript::POS_END
);
 
4. Правильно ли я понял, что, если я изменяю что то в скриптах и стилях (site/extensions папки js, css), то автоматически не обновляется, а я должен залезть на сервер и руками удалить папку того ассета( site/assets/a876a9d/js и css) куда положены мои js, css?

Пока все вопросы.
Последний раз редактировалось andrew68 2013.08.31, 16:10, всего редактировалось 2 раза.

andrew68
Сообщения: 20
Зарегистрирован: 2013.08.31, 15:01

Re: Ресурсы (asset)

Сообщение andrew68 »

Удивительное дело. Стоит раз прописать вопросы на "бумагу" и сразу многое в голове укладывается по полочкам. Все вопросы решены. А особенное помогло в понимании эта статья на хабре http://habrahabr.ru/post/139166/

Для тех кто будет натыкаться на мои вопросы, то сам немнго отвечу.
1. Можно так, а можно в site/protected/assets/.
2. При первом вызове.
3. Если положить ресурсы в site/protected/assets/, то обращаться к ним надо будет так "application.assets" (Yii::app()->assetManager->publish(Yii::getPathOfAlias('application.assets')).'/js/main.js')
4. Всё так.

andrew68
Сообщения: 20
Зарегистрирован: 2013.08.31, 15:01

Re: Ресурсы (asset)

Сообщение andrew68 »

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

resource
Сообщения: 2
Зарегистрирован: 2013.01.09, 01:12

Re: Ресурсы (asset)

Сообщение resource »

возможно ли получить абсолютный URL с доменным именем для опубликованного ресурса?
т.е. http://mysite.local/subdirectory/assets/0sad34/main.css

при условии, что приложение размещено по адресу http://mysite.local/subdirectory ?

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

Re: Ресурсы (asset)

Сообщение samdark »

Да.

lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Ресурсы (asset)

Сообщение lancedevnull »

Sam Dark писал(а):Да.
=)

lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Ресурсы (asset)

Сообщение lancedevnull »

читайте про абсолютный урл

mstdmstd
Сообщения: 72
Зарегистрирован: 2014.03.07, 13:54

Re: Ресурсы (asset)

Сообщение mstdmstd »

Подскажите, а если есть каталог с продуктами, картинки которого загружаются в админке, то выкладывать картинки на фронтенде можно точно также из ресурса с указанием подкаталога ?

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

$url = Yii::app()->assetManager->publish(
    Yii::getPathOfAlias('ext.myExtension.assets').'/producst/image.png'
);
echo CHtml::image($url);
И если на странице продукта в админке отображать загруженные картинки - то лучше их отображать наверно их нужно из 'myExtension/assets' - картинку ведь можно удалить ?
Как лучше сделать и есть ли нюансы?

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

Re: Ресурсы (asset)

Сообщение samdark »

Да, можно и так же.

mstdmstd
Сообщения: 72
Зарегистрирован: 2014.03.07, 13:54

Re: Ресурсы (asset)

Сообщение mstdmstd »

И еще подскажите, если я правильно понял, то каталог app/assets можно и нужно периодически чистить удалив все подкаталоги ?

mstdmstd
Сообщения: 72
Зарегистрирован: 2014.03.07, 13:54

Re: Ресурсы (asset)

Сообщение mstdmstd »

Просмотрел несколько описаний по ассетам и не нашел решения как лучше сделать если подключаемый .css файл имеет картинки с относительными путями.
В лоб решение это рядом с публикованием этого .css файл публиковать и все картинки этого .css файла. Или есть лучшее решение?

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

Re: Ресурсы (asset)

Сообщение samdark »

Можно чистить, всё перегенрится. А вот нужно ли — это вам решать. С Yii, если не чистить, ничего не случится.

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

Re: Ресурсы (asset)

Сообщение samdark »

Я бы в случае относительных путей публиковал бы сразу директорию целиком.

mstdmstd
Сообщения: 72
Зарегистрирован: 2014.03.07, 13:54

Re: Ресурсы (asset)

Сообщение mstdmstd »

А еще подскажите когда публикуются картинки в каталоге "app/assets/" можно ли сохранять структуру подкаталогов?

При вызове метода getPathOfAlias я передаю алиас 'webroot.uploads.tours' а сами картинки как /-tour-52/329174dd820a.jpg
То есть путь каталога с загруженными в админке картинками имее путь 'uploads/tours/-tour-52/329174dd820a.jpg'
Публикуемая картинка имеет вид 'app/assets/1dba04e8/329174dd820a.jpg'.

Мне бы хотелось сохранить публикуемые подкаталоги как было у меня 'app/assets/1dba04e8/uploads/tours/-tour-52/', 'app/assets/1dba04e8/uploads/tours/-tour-51/'...
В доке что читал я таких возможностей не нашел, хотя я и не знаю а нужно ли ? Наверно привычней было бы сохранить публикуемые подкаталоги...

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

Re: Ресурсы (asset)

Сообщение samdark »

При публикации директории структура сохраняется. А вообще я бы загружал картинки сразу в /uploads/tours/, если, конечно, нет необходимости контролировать к ним доступ.

mstdmstd
Сообщения: 72
Зарегистрирован: 2014.03.07, 13:54

Re: Ресурсы (asset)

Сообщение mstdmstd »

Какого либо контроля доступа к ним нет
Но как это повлияет на производительность ?
Если в /uploads/tours/ несколько сот подкаталогов и в каждом из них до десятка картинок, то если при обращении к каждому Tour публиковать весь /uploads/tours/,
это займет больше времени. Что происходит при публикации каталога? Насколько я понимаю, сверяются файлы в исходных и опубликованных каталогах и новые или измененные файлы
копируются в опубликованные каталоги ?

И опять таки если подключаемый .css файл имеет картинки с относительными путями в подкаталогах, то как это лучше организовать ?
Получается что все нужно держать в одном каталоге и публиковать полностью каталог ?

И для каждого .css файла с картинками в подкаталогах создавать каталог который целиком и публиковать ?

Сорри, а нет статей в нете где такие вещи описаны ? То что я нашел там публикация файлов по отдельности, и приходится изобретать велосипед...

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

Re: Ресурсы (asset)

Сообщение samdark »

Картинки + CSS = однозначно публиковать всю директорию. У вас, я так понял, большинство изображений из CSS всё-таки не используются и контроль доступа не нужен. Я бы сразу загружал их в вебрут и не использовал asset-ы.

Ответить