2010-07-26 59 views
5

想知道是否有人将magento的布局XML中的or语句用于自定义模块?我意识到我可以检查模块控制器中的值或阻止自己,但它似乎是生存逻辑的合理位置。在magento布局中使用条件xml

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

感谢, JD

回答

8

我会回避使用这些了。您会注意到它们在默认的分布式社区版中已被注释掉,这可能意味着核心团队正在摆脱使用它们。

如果您对他们的工作感兴趣,那么他们就是参数page/headaddItem方法的一部分。

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; 
     } 

我的猜测是,他们的早期尝试元编程添加到模板系统,它最终会超过其目标用户的头上。

+2

非常感谢艾伦,全面和信息答案一如既往。 我想我会坚持使用块的条件逻辑。 JD – 2010-07-26 06:55:05

+0

我已经深入了解了这一点,现在认为如果/ cond参数是通过条件注释添加Internet Explorer特定样式表。 – 2011-01-18 02:58:49