Отображение свойств продукта в статическом блоке

magento.stackexchange https://magento.stackexchange.com/questions/953

  •  16-10-2019
  •  | 
  •  

Вопрос

Помимо создания моего собственного виджета или класса блока для этого, есть ли способ отобразить имя продукта, SKU, цену или другое свойство в статическом блоке или на странице CMS?

Если нет способа сделать это из коробки, есть ли хорошо исключенный способ достичь этого?

То есть я хотел бы сделать что -то подобное в блоке или странице

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

и есть название продукта, появившиеся в статическом блоке/странице.

Существует ли это в ядре Magento? Где -то в сообществе?

Это было полезно?

Решение

Я не совсем знаю основной Средства для этого (я не смотрел), но следующее не особенно сложно реализовать.

Всего несколько дней назад нам потребовалась вывод от помощника - перешел обратно в другого помощника, отображаемого через блок CMS.

Это не потребует phtml Файлы, которые будут созданы только ради одной функции - и позволят довольно гибко использовать helper или же model методы, которые должны быть выполнены.

Хотя, вероятно, не то, что вы хотите чистое ядро, выходы должны быть тем, что вы хотите.

Вызов вспомогательных методов

В этом нет устойчивости к неисправности (т.е. проверка метода/класса, даже существует и т. Д.); Но если вам это действительно нужно, вы можете изменить его на соответствие.

Я хотел получить возвратную стоимость помощника, который получил минимальную цену продукта пакета; Затем протолкните этот вывод через вспомогательного валюты, чтобы отформатировать его надлежащим образом.

{{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"}

Который был представлен с использованием следующего класса.

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

Вызов модели методов

Так что настраивая приведенный выше код (Я исключил помощник обратного вызова, чтобы сократить количество кода).

Вы могли бы выполнить,

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

Со следующим вспомогательным классом,

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

Этот класс оставался довольно общим, и загрузка целого метода для одного метода было бы тяжелым, но вы можете просто адаптировать его к своим потребностям.

Очевидно, что что -то подобное было бы более легким, но вы можете настроить свои методы в соответствии с вашими потребностями.

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

Общий метод

Ссылочный вспомогательный метод выше, stringToBoolean, было всего лишь следующее:

public function stringToBoolean(&$value, $key)
{
  if ($value == "true")
    $value = true;
  elseif ($value == "false")
    $value = false;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top