使用magento layout xml中的条件

Jon*_*Day 5 php xml layout conditional magento

想知道是否有人在magento的布局XML中使用或语句用于自定义模块?我意识到我可以检查模块控制器中的值或块本身,但它似乎是逻辑生存的逻辑位置.

Mage_Core使用它们catalog.xml来测试javascript.<!--<params/><if/><condition>can_load_calendar_js</condition>-->

谢谢,JD

Ala*_*orm 8

我不愿意使用它们.您会注意到它们已在默认的分布式社区版中注释掉,这可能意味着核心团队正在逐渐停止使用它们.

如果你有兴趣在他们做什么,他们是严格意义上的一部分PARAMATERS 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;
}
Run Code Online (Sandbox Code Playgroud)

add item方法存储这些条件,然后在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;
        }
Run Code Online (Sandbox Code Playgroud)

我的猜测是,他们早期尝试将元编程添加到模板系统,最终超越了预期用户的头脑.

  • 感谢Alan,一如既往的全面和信息回答.我想我会坚持使用Block作为条件逻辑.JD (2认同)