guide developer php magento methods helper

php - developer - ¿Necesita ayuda? Comprender el método ProductAttribute() para páginas de productos



magento php (1)

Necesito ayuda para familiarizarme con los ayudantes, sus métodos y los atributos del producto. Específicamente: $_helper->productAttribute($product, $attributeHtml, $attributeName)

Aquí están los archivos que estoy usando / revisando:

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

La siguiente línea de código genera el html para la imagen del producto.

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

El código de clase auxiliar describe el método en los siguientes fragmentos de código. ¿Qué se devuelve? ¿Cuáles son los pasos y por qué debería utilizar este método en lugar de simplemente hacer eco del img html descrito en una línea anterior del archivo de plantilla?

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

Cualquier ayuda es apreciada.


Muy buena pregunta!

Así que en realidad un poco sobre el propósito de este ayudante. Por su nombre, ya puede llegar a la conclusión de que se utiliza para el resultado de los datos. El nombre del método también se explica por sí mismo, solo muestra el valor del atributo del producto depende de los controladores. Actualmente hay dos métodos, productAttribute() , que se utilizan para generar los valores de atributos del producto y categoryAttribute() , que se utiliza para los de categoría. Todos los datos en las plantillas principales de la categoría y el producto se entregan a través de este método (excepto el atributo de precio), por lo que recuerdo, se agregó en una versión 1.4.x, pero no estoy seguro. La idea principal era hacer posible el filtrado de los datos del atributo. Por ejemplo, puede usar las construcciones {{widget ... }} en la descripción de la categoría, se realiza a través de métodos especiales.

Ambos métodos en realidad tienen la misma funcionalidad, pero para diferentes entidades. Ambos recibieron 3 argumentos:

  • entidad (categoría o producto, depende del nombre del método)
  • valor de atributo - valor que se filtra
  • código de atributo - código que se utiliza para recuperar el modelo de atributo

Primero dentro de estos métodos, Magento verifica el margen de ganancia HTML en el valor, si no, escapa el texto con el método escapeHtml() . Además, si el atributo tiene un área de texto como entrada en el administrador, todos los caracteres de línea nuevos se reemplazan con la etiqueta <br /> .

Si se permite html, Magento comprueba la posibilidad de construcciones especiales como {{widget ...}} en la configuración (el nombre oficial de estas construcciones es directiva). Si se permiten las directivas, el procesador de directivas especiales se instancia y el valor se procesa.

Después de todo el procesamiento del núcleo está hecho, Magento invoca manejadores.

Estos manejadores son funcionalidades adicionales que no son utilizadas por los módulos centrales, pero puede usar su propia personalización para lograr algunas personalizaciones agradables. Aquí hay un ejemplo: le gustaría poner todo el resultado del nombre del producto en mayúsculas. Luego puede agregar su propio controlador, para este propósito siga estos sencillos pasos:

  1. Definir un observador para 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. Crea tu clase de observador, también lo haré como controlador. El código es muy simple:

    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. Asegúrese de que el nombre de su método en la clase de controlador sea absolutamente el mismo que el nombre del método del procesador de valores, en este ejemplo es productAttribute() .

¡Disfruta aprendiendo Magento!