Pregunta

A falta de creación de mi propio widget o una clase de bloque de hacerlo, ¿hay una forma de mostrar el nombre de un producto, SKU, precio, u otra propiedad en una página de bloqueo estático o CMS?

Si no hay una manera de hacer esto fuera de la caja, hay una manera bien exceptuado para lograr esto?

Es decir, me gustaría ser capaz de hacer algo como esto en un bloque o página

{{block type="some/block" sku="PRODUCT_SKU" variable_to_display="name"}}

y tiene el nombre del producto aparece en la estática de bloque / página.

¿Este existen en el núcleo de Magento? En alguna parte de la comunidad?

¿Fue útil?

Solución

No soy plenamente consciente de un core los medios de hacer esto (yo no he mirado), pero el siguiente no es particularmente difícil de implementar.

Hace sólo unos días, que necesita la salida de un ayudante -. Aprobada de nuevo en otro ayudante, prestados a través de un bloque de CMS

Esto no requerirá archivos phtml que ser creado por el simple hecho de una sola función -. Y permitirá un uso bastante flexible de métodos helper o model para ser ejecutado

Mientras que probablemente no es la solución central limpia desea, la salida debe ser lo que está después.

Llamando Métodos útiles

No hay tolerancia a fallos en este (es decir, la comprobación de un método / clase aún existe etc..); pero si realmente lo necesita, puede modificarlo para adaptarlo.

Lo que quería era a buscar el valor de retorno de un ayudante que consiguió el precio mínimo de un paquete de productos; a continuación, empuje que la salida a través de la ayudante de moneda para formatear adecuadamente.

{{block type="sonassi.core/helper" helper="sonassi.core/catalog" function="getMinMaxPrice" arg1="5" arg2="" arg3="min" callback_helper="core" callback_function="currency" callback_arg1="function_response" callback_arg2="true" callback_arg3="false"}

que se haya dictado utilizando la siguiente clase.

<?php
/*
* @category    Module
* @package     Sonassi_Core
* @copyright   Copyright (c) 2012 Sonassi
*/
class Sonassi_Core_Block_Helper extends Mage_Core_Block_Abstract
{
  protected function _toHtml()
  {
    try {
      $args = $this->getData();
      $_helper = Mage::helper($args['helper']);
      $html = false;
      $argStr = implode("###", array_keys($args));
      if (preg_match_all('/arg[0-9]+/', $argStr, $matches)) {
        $data = array_intersect_key($args,array_flip($matches[0]));
        array_walk($data, array(Mage::helper('sonassi.core'),'stringToBoolean'));
        $html = call_user_func_array(array($_helper, $args['function']), $data);
      }
      if (isset($args['callback_helper'])) {
        $_callbackHelper = Mage::helper($args['callback_helper']);
        if (preg_match_all('/callback\_arg[0-9]+/', $argStr, $matches)) {
          $data = array_intersect_key($args,array_flip($matches[0]));
          $testCase = array_flip($data);
          if (isset($testCase['function_response'])) {
            $position = $testCase['function_response'];
            $data[$position] = $html;
          }
          array_walk($data, array(Mage::helper('sonassi.core'),'stringToBoolean'));
          $html = call_user_func_array(array($_callbackHelper, $args['callback_function']), $data);
        }
      }
      return $html;
    } catch(Exception $e) {}
    return;
  }
}

Llamar a los métodos del modelo

Así que ajustar el código anterior siempre tan levemente (he despojado a cabo la devolución de llamada de ayuda sólo para acortar la cantidad de código) .

Se puede ejecutar,

{{block type="sonassi.core/model" model="catalog/product" load_attribute="sku" load_value="product-sku" function="getName"}}

Con la clase siguiente soporte,

<?php
/*
* @category    Module
* @package     Sonassi_Core
* @copyright   Copyright (c) 2012 Sonassi
*/
class Sonassi_Core_Block_Model extends Mage_Core_Block_Abstract
{
  protected function _toHtml()
  {
    try {
      $args = $this->getData();
      $_model = Mage::getModel($args['model'])
      if (isset($args['load_id']))
        $_model->load($args['load_id']);
      elseif (isset($args['load_attribute']) && isset($args['load_value']))
        $_model->loadByAttribute($args['load_attribute'], $args['load_value']);
      $html = false;
      $argStr = implode("###", array_keys($args));
      if (preg_match_all('/arg[0-9]+/', $argStr, $matches)) {
        $data = array_intersect_key($args,array_flip($matches[0]));
        array_walk($data, array(Mage::getModel('sonassi.core'),'stringToBoolean'));
        $html = call_user_func_array(array($_model, $args['function']), $data);
      }
      return $html;
    } catch(Exception $e) {}
    return;
  }
}

Esta clase se mantuvo bastante genérico y cargando todo un método para un método sería pesada - pero puedes adaptarlo a sus necesidades.

Es evidente que algo como esto sería más ligero, pero se puede ajustar sus métodos para adaptarse a sus necesidades.

Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

Común Método

El método de ayuda referencia anteriormente, stringToBoolean, fue sólo el siguiente:

public function stringToBoolean(&$value, $key)
{
  if ($value == "true")
    $value = true;
  elseif ($value == "false")
    $value = false;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top