использование условий в xml-формате макета magento


Интересно, использовал ли кто-нибудь операторы or в XML-формате макета magento для пользовательского модуля? Я понимаю, что мог бы проверить значения в контроллере модуля или сам блок, но это кажется логичным местом для логики.

Mage_Core использует их в catalog.xml для тестирования javascript. <!--<params/><if/><condition>can_load_calendar_js</condition>-->

Спасибо, Джей Ди

Author: Alan Storm, 2010-07-26

1 answers

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

Если вас интересует, что они делают, это параметры, которые строго являются частью метода page/head блока addItem.

File: code/core/Mage/Page/Block/Html/Head.php
public function addItem($type, $name, $params=null, $if=null, $cond=null)
{
    if ($type==='skin_css' && empty($params)) {
        $params = 'media="all"';
    }
    $this->_data['items'][$type.'/'.$name] = array(
        'type'   => $type,
        'name'   => $name,
        'params' => $params,
        'if'     => $if,
        'cond'   => $cond,
   );
    return $this;
}

Метод добавления элемента сохраняет эти условия, а затем они используются позже в методе getCssJsHtml, чтобы пропустить добавление элемента.

public function getCssJsHtml()
{
    // separate items by types
    $lines  = array();
    foreach ($this->_data['items'] as $item) {
        if (!is_null($item['cond']) && !$this->getData($item['cond']) || !isset($item['name'])) {
            continue;
        }

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

 8
Author: Alan Storm, 2010-07-26 01:50:20