Директории для хранения CSS и картинок для виджитов
Директории для хранения CSS и картинок для виджитов
Соответственно при подключении многих виджитов, в директорию assets складываются CSS, картинки, javascript и другие ресурсы необходимые для работы виджета на стороне клиента. Вопросы о логике и зачем сделано именно так.
1. Директория assets формируется в каждой директории проекта - это не совсем удобно, почему нельзя писать все ресурсы в отдельно выделенную директорию. Приведу доводы в пользу того, что правильнее писать в одну директорию, а не в каждую
1.1. Это нарушает безопасность, для того, чтобы этот механизм работал, надо наплодить директорий с правами записи в них у веб сервера, иначе это не будет работать - это уже потенциальная угроза как с точки зрения заливки в эти директории, так и с точки зрения банальной ошибки админа и выдачи прав на запись не в ту папку.
1.2. Если у проекта есть несколько разделов и они разнесены по разным директориям, например, админка, витрина и раздел для авторизованных посетителей, логично все хранить в одном месте, а не дублировать все в тройном экземпляре, что кстати еще и увеличивает трафик проекта и снижает скорость загрузки проекта, хотя это конечно мелочи жизни при быстро домашнем инете (мобильный инет на нормальных скоростях, пока что не очень распространен, по крайне мере в Росии). Сложность развертывание такого проекта просто колосальная.
2. Зачем используются хэшированые названия директорий внутри assets - это вообще не логично и я пока не вижу никаких объяснений. Это порождает колосальные неудобства при переносе проекта с машины разработчика на сервер тестирования, с сервера тестирования на боевой сервер и просто с одного боевого сервера на другой или от одного провайдера к другому. Принципиально, хоть и не удобно, можно настроить директории у разработчика, на тесте и на боевом одинаково и иметь одинаковые хэши, но при переносе от провайдера к провайдеру это всегда будет проблемой, такой же проблемой будет необходимость развертывания нескольких экземпляров проекта на одной машине для проведения какого-то эксперимента или для того, чтобы у каждого разработчика был свой экземпляр для разработки и тестирования функционала при работе на одном сервере разработки и тестирования.
При этом если первая проблема имеет оборотную сторону медали, т.е. она позволяет использовать разные ресурсы для разных разделов проекта, что тоже является плюсом, то вторая проблема только все осложняет,так же например, такое формирование имен директорий не позволяет по нормальному реализовать механизм шкурок.
В общем кто-нибудь может объяснить логику, почему сделано было именно так, потому что со стороны, мне представляется что выбран был самый неразумный способ из всех возможных.
По первой проблеме я бы сделал в виджите настройку, где хранить свои ресурсы, а по второй отказался бы от использования хэша.
1. Директория assets формируется в каждой директории проекта - это не совсем удобно, почему нельзя писать все ресурсы в отдельно выделенную директорию. Приведу доводы в пользу того, что правильнее писать в одну директорию, а не в каждую
1.1. Это нарушает безопасность, для того, чтобы этот механизм работал, надо наплодить директорий с правами записи в них у веб сервера, иначе это не будет работать - это уже потенциальная угроза как с точки зрения заливки в эти директории, так и с точки зрения банальной ошибки админа и выдачи прав на запись не в ту папку.
1.2. Если у проекта есть несколько разделов и они разнесены по разным директориям, например, админка, витрина и раздел для авторизованных посетителей, логично все хранить в одном месте, а не дублировать все в тройном экземпляре, что кстати еще и увеличивает трафик проекта и снижает скорость загрузки проекта, хотя это конечно мелочи жизни при быстро домашнем инете (мобильный инет на нормальных скоростях, пока что не очень распространен, по крайне мере в Росии). Сложность развертывание такого проекта просто колосальная.
2. Зачем используются хэшированые названия директорий внутри assets - это вообще не логично и я пока не вижу никаких объяснений. Это порождает колосальные неудобства при переносе проекта с машины разработчика на сервер тестирования, с сервера тестирования на боевой сервер и просто с одного боевого сервера на другой или от одного провайдера к другому. Принципиально, хоть и не удобно, можно настроить директории у разработчика, на тесте и на боевом одинаково и иметь одинаковые хэши, но при переносе от провайдера к провайдеру это всегда будет проблемой, такой же проблемой будет необходимость развертывания нескольких экземпляров проекта на одной машине для проведения какого-то эксперимента или для того, чтобы у каждого разработчика был свой экземпляр для разработки и тестирования функционала при работе на одном сервере разработки и тестирования.
При этом если первая проблема имеет оборотную сторону медали, т.е. она позволяет использовать разные ресурсы для разных разделов проекта, что тоже является плюсом, то вторая проблема только все осложняет,так же например, такое формирование имен директорий не позволяет по нормальному реализовать механизм шкурок.
В общем кто-нибудь может объяснить логику, почему сделано было именно так, потому что со стороны, мне представляется что выбран был самый неразумный способ из всех возможных.
По первой проблеме я бы сделал в виджите настройку, где хранить свои ресурсы, а по второй отказался бы от использования хэша.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Директории для хранения CSS и картинок для виджитов
Не понял твоей проблемы, в папку assets вообще лазить не нужно, а уж переносить ее вообще глупость. Для использования одной папки с ресурсами для нескольких виджетов, используй второй параметр функции CAssetManager::publish("/",true)
Жду Yii 3!
Re: Директории для хранения CSS и картинок для виджитов
Ну допустим что есть админка и витрина и они имеют разное оформление. Для того, чтобы это сделать, надо прописать разные стили и подложить разные картинки. Подменить во фреймворке это все не удастся, вариант развести по разным директориям, а потом в assets каждой директории положить правильные CSS и картинки, но вот незадача, при переносе на другой сервер в assets будут совершенно другие названия. Можно конечно все перелопатить, сложив все в папки как самому захочется, но тогда зачем был использован такой механизм хранения ресурсов становится совсем непонятным. Сейчас как я понял его суть, если нет ресурсов в проекте, то он скопирует их из своего репозитория и это правильно и хорошо, только вот работа данного механизма вызывает много нареканий, т.к. небольшие мелочи приводят к очень большим проблемам.
Ну если вас полностью устраивает штатный интерфейс и от вас заказчик/начальник не требует кастомизации, тогда все нормально.
Ну если вас полностью устраивает штатный интерфейс и от вас заказчик/начальник не требует кастомизации, тогда все нормально.
Re: Директории для хранения CSS и картинок для виджитов
Для статических js и css можно создать отдельные директории.
Кастомить стили виджетов, как и сами виджеты, можно довольно сильно, использовав наследование и явное указание своих css файлов(чаще всего это параметр cssFile).
Содержимое assets заносят в git(hg)ignore проблема с переносом отпадает.
Про подмену картинок вообще не понял. Отдельные темы, стили, картинки на каждый их подобных видов.
Ресурсы отличный инструмент позволяющий расширениям (модулям, виджетам и тд) публиковать свои ресурсы или же публиковать файла из защищенной от пользователя зоны.
Кастомить стили виджетов, как и сами виджеты, можно довольно сильно, использовав наследование и явное указание своих css файлов(чаще всего это параметр cssFile).
Содержимое assets заносят в git(hg)ignore проблема с переносом отпадает.
Про подмену картинок вообще не понял. Отдельные темы, стили, картинки на каждый их подобных видов.
Ресурсы отличный инструмент позволяющий расширениям (модулям, виджетам и тд) публиковать свои ресурсы или же публиковать файла из защищенной от пользователя зоны.
Re: Директории для хранения CSS и картинок для виджитов
не пойму в чем проблема. Где несколько папок assets? папка, которую использует assetManager одна. Это WebRoot/assets. Остальные просто могут так же называться, но они используются чисто для хранения файлов, которые с помощью assetManager можно публиковать. При переносе проекта папку assets(которая используется менеджером) вообще лучше чистить
Re: Директории для хранения CSS и картинок для виджитов
=>BuCeFaL
1. Содержимое assets заносят в git(hg)ignore проблема с переносом отпадает --- Не понял, можно по подробнее
2. Ресурсы отличный инструмент позволяющий расширениям (модулям, виджетам и тд) публиковать свои ресурсы или же публиковать файла из защищенной от пользователя зоны. --- согласен, только использование хэша в имени папки убивает всю идею
=>rak
1. Перенесите проект в другую папку на сервере и откройте его в браузере, потом посмотрите в assets и увидите, что количество папок в нем удвоилось, причем половина папок содержит одно и тоже, если вы в них не меняли ничего, а если меняли, то все ваши изменения отвалятся.
2. Если вы в проекте сделаете несколько папок, например, admin и show то в каждой папке будет создана папка assets, куда будут записаны все ресурсы используемых вами виджетов, если они ничем не отличаются, то фактически будут просто продублированы.
Я не понимаю что дает в CAssetManager->publish строка кода $dir=$this->hash($hashByName ? basename($src) : dirname($src)); зачем используется hash функция??? Именно в ней на мой взгляд причина описанных мной проблем.
1. Содержимое assets заносят в git(hg)ignore проблема с переносом отпадает --- Не понял, можно по подробнее
2. Ресурсы отличный инструмент позволяющий расширениям (модулям, виджетам и тд) публиковать свои ресурсы или же публиковать файла из защищенной от пользователя зоны. --- согласен, только использование хэша в имени папки убивает всю идею
=>rak
1. Перенесите проект в другую папку на сервере и откройте его в браузере, потом посмотрите в assets и увидите, что количество папок в нем удвоилось, причем половина папок содержит одно и тоже, если вы в них не меняли ничего, а если меняли, то все ваши изменения отвалятся.
2. Если вы в проекте сделаете несколько папок, например, admin и show то в каждой папке будет создана папка assets, куда будут записаны все ресурсы используемых вами виджетов, если они ничем не отличаются, то фактически будут просто продублированы.
Я не понимаю что дает в CAssetManager->publish строка кода $dir=$this->hash($hashByName ? basename($src) : dirname($src)); зачем используется hash функция??? Именно в ней на мой взгляд причина описанных мной проблем.
Re: Директории для хранения CSS и картинок для виджитов
1. После переноса проекта папку assets необходимо почистить. А менять файлы в ней не нужно, т.к. она по сути темповая. Менять файлы нужно до их публикации.TM123 писал(а): 1. Перенесите проект в другую папку на сервере и откройте его в браузере, потом посмотрите в assets и увидите, что количество папок в нем удвоилось, причем половина папок содержит одно и тоже, если вы в них не меняли ничего, а если меняли, то все ваши изменения отвалятся.
2. Если вы в проекте сделаете несколько папок, например, admin и show то в каждой папке будет создана папка assets, куда будут записаны все ресурсы используемых вами виджетов, если они ничем не отличаются, то фактически будут просто продублированы.
2. Что значит в проекте сделать несколько папок? Несколько приложений что ли?
Re: Директории для хранения CSS и картинок для виджитов
Ну да, обратил я внимание что hash метод объекта и посмотрев на него я понял зачем использовать hash, только на мой взгляд это неверно, надо было сделать настройку, которая позволяла бы определить, класть в строго указанную папку или в сформированную таким образом. Тот кто занимается кастомизацией и написанием серьезных проектов могли бы указывать папку принудительно, все равно кастомные и серьезные проекты с одной версии инструмента на другую по щелчку пальца не переходят и это для них была бы не проблема, если у какого-то виджета какой-то ресурс поменялся со сменой версии, в то же время для всех остальных работал бы штатный механизм перехода между версиями фреймворка.
В общем перекрою метод hash и буду иметь возможные траблы при переходе между версиями фреймворка.
В общем перекрою метод hash и буду иметь возможные траблы при переходе между версиями фреймворка.
Re: Директории для хранения CSS и картинок для виджитов
Все же не могу въехать, как правильно пользоваться ресурсами. У меня сейчас в папке с сайтом лежат assets, protected, css, js, images. От последних 3-х папок я хочу избавиться, а все ресурсы хранить в protected/assets. Тоесть будут папки:
protected/assets/css
protected/assets/js
protected/assets/images
Вопрос: как в моем случае опубликовать и вставить, скажем скрипт? У меня только догадки:
Вы как вставляете, приведите пару примеров. Делаете обертку в свою функцию, чтоб меньше писать?
protected/assets/css
protected/assets/js
protected/assets/images
Вопрос: как в моем случае опубликовать и вставить, скажем скрипт? У меня только догадки:
Код: Выделить всё
Yii::app()->clientScript->registerScriptFile(
Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.assets.js').'/myScript.js'
)
);
-
- Сообщения: 77
- Зарегистрирован: 2010.10.17, 11:00
- Откуда: Днепропетровск
- Контактная информация:
Re: Директории для хранения CSS и картинок для виджитов
Код: Выделить всё
Yii::app()->clientScript->registerScriptFile(
Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.assets.js').'/myScript.js'
)
);
Код: Выделить всё
$cs=Yii::app()->clientScript;
$assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('webroot').'/static');
echo $cs->registerCssFile($assetsUrl.'/css/main.css');
echo $cs->registerScriptFile($assetsUrl.'/js/main.js');
Код: Выделить всё
$this->assets = dirname(__FILE__).'/assets';
$baseUrl = Yii::app()->assetManager->publish($this->assets);
Yii::app()->clientScript->registerCssFile($baseUrl.'/css/comment.css');
Мой блог http://blog.rapository.com
Re: Директории для хранения CSS и картинок для виджитов
Filsh, получилось, использую такой код:
В таком случае ресурсы копируются из webroot/protected/assets, как я и хотел. Осталось освоить склеивание js и css, а также их оптимизацию перед публикацией. Я так понял, для этих целей подходит extendedclientscript.
Возможность использовать Haml и Sass тоже очень радует, используя другие расширения.
Код: Выделить всё
$cs=Yii::app()->clientScript;
$assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('webroot').'/protected/assets');
$cs->registerScriptFile($assetsUrl.'/js/myscript.js');
Возможность использовать Haml и Sass тоже очень радует, используя другие расширения.
Re: Директории для хранения CSS и картинок для виджитов
Последнее обновление hamlandsass год назад, все ли там ок ?
не знал про haml и sass обязательно возьму на вооружение. жаль, нет jade.
не знал про haml и sass обязательно возьму на вооружение. жаль, нет jade.