Директории для хранения CSS и картинок для виджитов

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Директории для хранения CSS и картинок для виджитов

Сообщение TM123 »

Соответственно при подключении многих виджитов, в директорию assets складываются CSS, картинки, javascript и другие ресурсы необходимые для работы виджета на стороне клиента. Вопросы о логике и зачем сделано именно так.

1. Директория assets формируется в каждой директории проекта - это не совсем удобно, почему нельзя писать все ресурсы в отдельно выделенную директорию. Приведу доводы в пользу того, что правильнее писать в одну директорию, а не в каждую

1.1. Это нарушает безопасность, для того, чтобы этот механизм работал, надо наплодить директорий с правами записи в них у веб сервера, иначе это не будет работать - это уже потенциальная угроза как с точки зрения заливки в эти директории, так и с точки зрения банальной ошибки админа и выдачи прав на запись не в ту папку.
1.2. Если у проекта есть несколько разделов и они разнесены по разным директориям, например, админка, витрина и раздел для авторизованных посетителей, логично все хранить в одном месте, а не дублировать все в тройном экземпляре, что кстати еще и увеличивает трафик проекта и снижает скорость загрузки проекта, хотя это конечно мелочи жизни при быстро домашнем инете (мобильный инет на нормальных скоростях, пока что не очень распространен, по крайне мере в Росии). Сложность развертывание такого проекта просто колосальная.

2. Зачем используются хэшированые названия директорий внутри assets - это вообще не логично и я пока не вижу никаких объяснений. Это порождает колосальные неудобства при переносе проекта с машины разработчика на сервер тестирования, с сервера тестирования на боевой сервер и просто с одного боевого сервера на другой или от одного провайдера к другому. Принципиально, хоть и не удобно, можно настроить директории у разработчика, на тесте и на боевом одинаково и иметь одинаковые хэши, но при переносе от провайдера к провайдеру это всегда будет проблемой, такой же проблемой будет необходимость развертывания нескольких экземпляров проекта на одной машине для проведения какого-то эксперимента или для того, чтобы у каждого разработчика был свой экземпляр для разработки и тестирования функционала при работе на одном сервере разработки и тестирования.

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

В общем кто-нибудь может объяснить логику, почему сделано было именно так, потому что со стороны, мне представляется что выбран был самый неразумный способ из всех возможных.

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

Re: Директории для хранения CSS и картинок для виджитов

Сообщение slavcodev »

Не понял твоей проблемы, в папку assets вообще лазить не нужно, а уж переносить ее вообще глупость. Для использования одной папки с ресурсами для нескольких виджетов, используй второй параметр функции CAssetManager::publish("/",true)
Жду Yii 3!
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Директории для хранения CSS и картинок для виджитов

Сообщение TM123 »

Ну допустим что есть админка и витрина и они имеют разное оформление. Для того, чтобы это сделать, надо прописать разные стили и подложить разные картинки. Подменить во фреймворке это все не удастся, вариант развести по разным директориям, а потом в assets каждой директории положить правильные CSS и картинки, но вот незадача, при переносе на другой сервер в assets будут совершенно другие названия. Можно конечно все перелопатить, сложив все в папки как самому захочется, но тогда зачем был использован такой механизм хранения ресурсов становится совсем непонятным. Сейчас как я понял его суть, если нет ресурсов в проекте, то он скопирует их из своего репозитория и это правильно и хорошо, только вот работа данного механизма вызывает много нареканий, т.к. небольшие мелочи приводят к очень большим проблемам.
Ну если вас полностью устраивает штатный интерфейс и от вас заказчик/начальник не требует кастомизации, тогда все нормально.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Директории для хранения CSS и картинок для виджитов

Сообщение BuCeFaL »

Для статических js и css можно создать отдельные директории.
Кастомить стили виджетов, как и сами виджеты, можно довольно сильно, использовав наследование и явное указание своих css файлов(чаще всего это параметр cssFile).
Содержимое assets заносят в git(hg)ignore проблема с переносом отпадает.
Про подмену картинок вообще не понял. Отдельные темы, стили, картинки на каждый их подобных видов.
Ресурсы отличный инструмент позволяющий расширениям (модулям, виджетам и тд) публиковать свои ресурсы или же публиковать файла из защищенной от пользователя зоны.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Директории для хранения CSS и картинок для виджитов

Сообщение rak »

не пойму в чем проблема. Где несколько папок assets? папка, которую использует assetManager одна. Это WebRoot/assets. Остальные просто могут так же называться, но они используются чисто для хранения файлов, которые с помощью assetManager можно публиковать. При переносе проекта папку assets(которая используется менеджером) вообще лучше чистить
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Директории для хранения CSS и картинок для виджитов

Сообщение TM123 »

=>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 функция??? Именно в ней на мой взгляд причина описанных мной проблем.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Директории для хранения CSS и картинок для виджитов

Сообщение rak »

TM123 писал(а): 1. Перенесите проект в другую папку на сервере и откройте его в браузере, потом посмотрите в assets и увидите, что количество папок в нем удвоилось, причем половина папок содержит одно и тоже, если вы в них не меняли ничего, а если меняли, то все ваши изменения отвалятся.
2. Если вы в проекте сделаете несколько папок, например, admin и show то в каждой папке будет создана папка assets, куда будут записаны все ресурсы используемых вами виджетов, если они ничем не отличаются, то фактически будут просто продублированы.
1. После переноса проекта папку assets необходимо почистить. А менять файлы в ней не нужно, т.к. она по сути темповая. Менять файлы нужно до их публикации.
2. Что значит в проекте сделать несколько папок? Несколько приложений что ли?
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Директории для хранения CSS и картинок для виджитов

Сообщение TM123 »

Ну да, обратил я внимание что hash метод объекта и посмотрев на него я понял зачем использовать hash, только на мой взгляд это неверно, надо было сделать настройку, которая позволяла бы определить, класть в строго указанную папку или в сформированную таким образом. Тот кто занимается кастомизацией и написанием серьезных проектов могли бы указывать папку принудительно, все равно кастомные и серьезные проекты с одной версии инструмента на другую по щелчку пальца не переходят и это для них была бы не проблема, если у какого-то виджета какой-то ресурс поменялся со сменой версии, в то же время для всех остальных работал бы штатный механизм перехода между версиями фреймворка.

В общем перекрою метод hash и буду иметь возможные траблы при переходе между версиями фреймворка.
smck87
Сообщения: 133
Зарегистрирован: 2011.01.30, 21:22

Re: Директории для хранения CSS и картинок для виджитов

Сообщение smck87 »

Все же не могу въехать, как правильно пользоваться ресурсами. У меня сейчас в папке с сайтом лежат assets, protected, css, js, images. От последних 3-х папок я хочу избавиться, а все ресурсы хранить в protected/assets. Тоесть будут папки:
protected/assets/css
protected/assets/js
protected/assets/images

Вопрос: как в моем случае опубликовать и вставить, скажем скрипт? У меня только догадки:

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

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('application.assets.js').'/myScript.js'
    )
); 
Вы как вставляете, приведите пару примеров. Делаете обертку в свою функцию, чтоб меньше писать?
Filsh
Сообщения: 77
Зарегистрирован: 2010.10.17, 11:00
Откуда: Днепропетровск
Контактная информация:

Re: Директории для хранения CSS и картинок для виджитов

Сообщение Filsh »

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

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->assetManager->publish(
        Yii::getPathOfAlias('application.assets.js').'/myScript.js'
    )
);  
Так вы повторно публикуете то что уже запубликовано, и естественно появится дубликат, в Yii::app()->assetManager->publish нужно вставлять путь на оригинальный файл, я делаю так в шаблоне layout

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

$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');
 
где assets - моя папка, в которой лежат мои файлы
smck87
Сообщения: 133
Зарегистрирован: 2011.01.30, 21:22

Re: Директории для хранения CSS и картинок для виджитов

Сообщение smck87 »

Filsh, получилось, использую такой код:

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

    $cs=Yii::app()->clientScript;
    $assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('webroot').'/protected/assets');
    $cs->registerScriptFile($assetsUrl.'/js/myscript.js');
 
В таком случае ресурсы копируются из webroot/protected/assets, как я и хотел. Осталось освоить склеивание js и css, а также их оптимизацию перед публикацией. Я так понял, для этих целей подходит extendedclientscript.

Возможность использовать Haml и Sass тоже очень радует, используя другие расширения.
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: Директории для хранения CSS и картинок для виджитов

Сообщение RusAlex »

Последнее обновление hamlandsass год назад, все ли там ок ?
не знал про haml и sass обязательно возьму на вооружение. жаль, нет jade.
Ответить