0

我正在尝试创建我的第一个 Magento 模块,该模块将允许产品页面上的属性(是/否)改变产品视图页面上分组产品选项的样式。

我可能在这里开始有点太深了,但这是我对如何做到这一点的理解:

  • 创建一个属性并分配给默认属性集(Alternative Group View alt_group_view)。

  • 在 /template/catalog/product/view/type 中创建一个替代的 grouped.phtml 文件 - groupedAlt.phtml

  • 创建一个初始化我的模块的基本模块结构。我真的应该让模块创建属性,但我还没有任何线索!!!

然后这就是我卡住的地方。本质上,我需要纠正模块文件中查找产品属性的逻辑——如果它的集合,我需要编写代码来告诉布局块大概扩展了这个:

<PRODUCT_TYPE_grouped translate="label" module="catalog">
<reference name="product.info">
<block type="catalog/product_view_type_grouped" name="product.info.grouped" as="product_type_data" template="catalog/product/view/type/grouped.phtml">
</reference>
</PRODUCT_TYPE_grouped translate="label" module="catalog">

希望这对某人有意义吗?

尽管我对 Magento 的前端和管理领域有很多了解,但我不确定我是否能真正实现这一点,因为我刚刚开始进行模块开发。

任何建议将不胜感激。

问候,史蒂夫

4

1 回答 1

0

你应该通过观​​察者来处理这个问题。要观察的事件是:controller_action_layout_generate_blocks_after

1°)在您的模块中,在 etc/config.xml 中,添加您的事件处理程序:

<frontend>
    <events>
        <controller_action_layout_generate_blocks_after>
            <observers>
                <yourmodule_generate_blocks_after>
                    <type>singleton</type>
                    <class>mymodule/observer</class> 
                    <method>generateBlocksAfter</method>
                </yourmodule_generate_blocks_after>                    
            </observers>                
        </controller_action_layout_generate_blocks_after>
    </events>
</frontend>

然后在您的模型目录(MyCompany/MyModule/Model/Observer.php)中创建一个名为 Observer.php 的模型

在此模型中,添加您的 generateBlocksAfter() 方法,如下所示:

public function generateBlocksAfter($event)
{                      
$controller   = $event->getAction();
    //limit to the product view page 
    if($controller->getFullActionName() != 'catalog_product_view')
    {
        return;
    }
    $layout       = $controller->getLayout();
    $myblock = $layout->getBlock('product.info.grouped');

    $_product = Mage::registry('current_product');

    if ($_product->getAltGroupView()) {
        $myblock->setTemplate('catalog/product/view/type/groupedalt.phtml');
    }
}

你在这里。

于 2013-02-04T14:44:14.193 回答