Загружать таблицу стилей только на страницы виджетов - PullRequest
2 голосов
/ 07 марта 2011

Как я могу динамически загружать таблицы стилей в раздел "head" в Magento только на страницах, которые содержат собственный виджет?

Для моих скриптов я делаю это:

if($this->getLayout()->getBlock('namespace_module_scripts')==false) {
    $block = $this->getLayout()
        ->createBlock('core/template', 'namespace_module_scripts')
        ->setTemplate('namespace/module/scripts.phtml');
    $this->getLayout()->getBlock('before_body_end')->insert($block);
}

Это текущее содержимое _prepareLayout() в моем классе блоков Widget.Я попытался использовать тот же метод для стилей, поменяв before_body_end на head, и это отлично сработало для размещения инстансов виджетов или размещения блока в моем XML-макете вручную, однако при вставке встроенного виджета в содержимое страницы появляется заголовокдолжны быть отрисованы до виджета, и поэтому мой шаблон стилей не может быть вставлен в головной блок.

Мое (надеюсь) временное решение - загрузить стили на каждой странице моего макета XML.Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 07 марта 2011

Похоже, что вы SOL с виджетами, которые вы вставляете в страницы CMS через

{{widget...}}}

бирка. В отличие от экземпляров или добавления их напрямую через XML-файл обновления компоновки пакетов, Magento отображает эти блоки на лету. То есть, пока не будет вызван toHtml для блока контента CMS, который Magento создает для блока {{widget...}}. К тому времени головной блок уже рендерится, и манипулирование им программно больше не имеет никакого эффекта.

Вот такой подход я бы выбрал. Кажется, добавление javascript все еще работает (что имеет смысл, поскольку блок содержимого CMS будет отображаться до блока before_body_end.) Изучите методы загрузки файлов CSS с помощью Javascript (старая ссылка, если вы воспользуетесь Google, хочу что то веб 2иш). Таким образом, вы можете добавить блок JavaScript, который может добавить файл CSS. Таким образом, весь ваш код все еще ограничен виджетом, и вы все равно получаете проверку вывода html. Это довольно распространенная техника.

Другие подходы включают

  1. Только что добавили ваши стили в документ. Плохие практики HTML и все такое (стиль не в голове), но вы не будете первым, кто сделает это.

  2. Наличие блока, который всегда добавляется в заголовок и содержит логику условного рендеринга. Непосредственно перед рендерингом сделайте так, чтобы он проверял объект макета для вашего виджета (через тип) ИЛИ он проверял, относится ли этот запрос к странице CMS, и проверяет ли содержимое страницы CMS директиву ({{widget...}}) для рендеринга твой виджет Если любой из них верен, сделайте ссылку CSS отображенной. Если это не так, ссылка не отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...