了解产品页面的商品属性() 方法

2022-08-31 00:39:08

我需要帮助熟悉助手,他们的方法和产品属性。具体说来:$_helper->productAttribute($product, $attributeHtml, $attributeName)

以下是我正在使用/查看的文件:

app\code\core\Mage\catalog\helper\output.php  
app\design\frontend\[theme name]\template\catalog\product\view\media.phtml

以下代码行为产品图像生成 html。

echo $_helper->productAttribute($_product, $_img, 'image');

帮助程序类代码在以下代码段中描述该方法。返回的内容是什么,步骤是什么,为什么我要使用此方法而不是简单地回显模板文件上一行中描述的img html?

public function getHandlers($method)
{
    $method = strtolower($method);
    return isset($this->_handlers[$method]) ? $this->_handlers[$method] : array();
}

public function process($method, $result, $params)
{
    foreach ($this->getHandlers($method) as $handler) {
        if (method_exists($handler, $method)) {
            $result = $handler->$method($this, $result, $params);
        }
    }
    return $result;
}

public function productAttribute($product, $attributeHtml, $attributeName)
{
    /* Code that is not relevant to this example */

    $attributeHtml = $this->process('productAttribute', $attributeHtml, array(
        'product'   => $product,
        'attribute' => $attributeName
    ));

    return $attributeHtml;
}

答案 1

非常好的问题!

所以实际上有点关于这个助手的目的。从它的名字,你已经可以得出结论,它用于数据的输出。方法名称也是不言自明的,它只是输出产品属性值取决于处理程序。目前有两种方法,用于输出产品属性值,和 用于类别属性值。来自类别和产品的核心模板中的所有数据都是通过此方法输出的(价格属性除外),据我所知,它是在1.4.x版本中添加的,但不确定。主要思想是使过滤属性数据成为可能。例如,您可以在类别描述中使用构造,这是通过特殊方法实现的。productAttribute()categoryAttribute(){{widget ... }}

这两种方法实际上执行相同的功能,但适用于不同的实体。他们都收到3个参数:

  • 实体(类别或产品,取决于方法名称)
  • 属性值 - 筛选的值
  • 属性代码 - 用于检索属性模型的代码

首先在此方法内部,Magento检查值中html标记的余量,如果没有,则使用方法转义文本。此外,如果属性在管理中具有文本区域作为输入,则所有新行字符都将替换为标记。escapeHtml()<br />

如果允许html,Magento会检查特殊结构的允许性,例如在配置中(此结构的正式名称是指令)。如果允许指令,则实例化特殊指令处理器并处理值。{{widget ...}}

完成所有核心处理后,Magento 将调用处理程序。

此处理程序是核心模块不使用的附加功能,但您可以使用自己的自定义来实现一些不错的自定义。下面是一个示例:您希望使产品名称的所有输出都大写。然后,您可以添加自己的处理程序,为此,请按照以下简单步骤操作:

  1. 定义观察点catalog_helper_output_construct

    <config>
       <frontend>
           <events>
               <catalog_helper_output_construct>
                   <observers>
                        <your_module>
                            <class>your_module/observer</class>
                            <method>handleHelperOutputInitialization</method>
                        </your_module>
                   </observers>
               </catalog_helper_output_construct>
           </events>
       </frontend>
    </config>
    
  2. 创建您的观察者类,我也将它作为处理程序。代码非常简单:

    class Your_Module_Model_Observer 
    {
        public function handleHelperOutputInitialization($observer) 
        {
            $helper = $observer->getEvent()->getHelper();
            $helper->addHandler('productAttribute', $this);
        }
    
       public function productAttribute($helper, $value, $parameters) 
       {
            $attribute = $parameters['attribute'];
            if ($attribute->getAttributeCode() == 'name') {
               return strtoupper($value);
            }
            return $value;
       }
    }
    
  3. 确保处理程序类中的方法名称与值处理器的方法名称绝对相同,在此示例中为 。productAttribute()

享受学习马真托!


答案 2

推荐