Pull to refresh

Comments 16

или просто так
class SiteController extends Controller
{
   public $package = array(
     'basePath' => 'application.views.site.assets';
     'css' => array('index.css'),
     'js' => array('index.js'),
     'depends' => array('jquery'),
   );

   public function init()
   {
       $this->package['baseUrl'] = Yii::app()->assetManager->publish($this->package['basePath']);
       Yii::app()->clientScript->addPackage('site')->registerPackage('site');
   }
   public function getAssetUrl()
   {
       return $this->package['baseUrl'];
   }

}


как-то так
Это разные вещи. Вы предлагаете публиковать пакпейдж. Мой вариант предполагает зависимость ресурсов от файла вида.
А что бывают такие задачи, когда для каждого представления нужно публиковать отдельные ресурсы? С группировать их в ресурсы для контроллера нельзя?
А что бывают такие задачи, когда для каждого представления нужно публиковать отдельные ресурсы?

Да, css и js обычно используются для конкретного HTML.
Это понятно. Я просил, есть ли смысл публиковать их по отдельности?
Есть смысл их автоматически загружать через clientScript для конкретного представления. Исходя из этого уже и идёт логика публикации.
Что мешает опубликовать всю пачку и имея $assetUrl, регистрировать через clientScirpt?
Можно хоть весь проект публиковать. Только зачем? в чем преимущество?
Преимущество в том что твой код сводится к 10 строчкам в одном месте.
ИМХО, поддерживать код будет легче, особенно со стороны и через некоторое время.

Следить за каждым файлом, для каждого вида это же застрелится легче. Разве не удобнее держать ресурсы для каждого контроллера в одной папке и публиковать ее сразу.

Дело личных предпочтений конечно, но я думаю ты усложняешь себе и другим кто будет поддерживать твой код жизнь.
Смысл моего метода сводится к тому, что зная только псеводо путь представления можно получить ссылку на любой опубликованный ресурс. Т.е. вполне возможно, что может понадобиться подключить представление стороннего модуля или получить какой нибудь отдельный ресурс.
Например, таким образом
$this->getCssUrl('application.modules.default.views.default.index', 'index.css') 

мы можем получить ссылку на css файл из модуля «default», контроллера «default», вида «index».

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

Учитывая что у контроллера и особенно у модуля есть возможность менять viewPath, то работать с ресурсами по конкретным псевдонимам может привести к неожиданному результату.
В любом случае, спасибо за объективную критику.
А мне нравится идея, подключать нужные css/js в layout'ах и в представлениях. В layout'ах общие, а в представлениях, те которые нужны только этому представлению.
Так это самый стандартный вариант. В этом случае, изменив представление, напр новый дизайн, не нужно лазить в контроллер. Но когда начинаешь искать как бы чуток оптимизировать работу, получаются вот такие идеи.
Sign up to leave a comment.

Articles