1

セットデータ:

<block type="obishomeaddon/customcategory" name="customcategory" template="homeaddon/customcategory.phtml">
        <action method="setData"> <name>column_count</name> <value>4</value> </action>
        <action method="setData"> <name>category_id</name> <value>116</value> </action>
      </block>

データを取得する:

class Block extends Mage_Core_Block_Template {
   public getColumnCount() { 
     return $this->getData('column_count');
   }

   public getCategoryId() { 
     return $this->getData('category_id');
   }
}

しかし、Magentoは次のようなことができると思います:

<block type="obishomeaddon/customcategory" column_count="4" category_id="116" name="customcategory" template="homeaddon/customcategory.phtml"/>

このような設定データから属性値を設定するにはどうすればよいですか?

4

1 に答える 1

2

(ブロックの生成を担当するクラス)を見るMage_Core_Model_Layout->_generateBlock()と、これを行うことができないことがわかります。ただし、追加するのは非常に簡単です。Mage_Core_Model_Layout->_generateBlock()次のようにオーバーライドできます。

ファイルconfig.xml内:

<models>
    <core>
        <rewrite>
            <layout>Namespace_Module_Model_Core_Layout</layout>
        </rewrite>
    </core>
</models>

次に、ファイル内で:

<?php

class Namespace_Module_Model_Core_Layout extends Mage_Core_Model_Layout
{
    protected function _generateBlock($node, $parent)
    {
        parent::_generateBlock($node, $parent);
        //   Since we don't want to rewrite the entire code block for 
        //   future upgradeability, we will find the block ourselves.

        $blockName = $node['name'];

        $block = $this->getBlock($blockName);
        if ($block instanceof Mage_Core_Model_Block_Abstract) {

            // We could just do $block->addData($node), but the following is a bit safer
            foreach ($node as $attributeName => $attributeValue) {
                if (!$block->getData($attributeName)) {
                    // just to make sure that we aren't doing any damage here.                    
                    $block->addData($attributeName, $attributeValue);
                }
            }
        }
    }
}

XMLを短縮するために、書き直さずに実行できるもう1つのことは、次のとおりです。

<block type="obishomeaddon/customcategory" name="customcategory" template="homeaddon/customcategory.phtml">
    <action method="addData"><data><column_count>4</column_count> <category_id>116</category_id></data></action>
</block>
于 2012-11-23T15:04:25.183 に答える