除了创建自己的小部件或块类以做到这一点之外,是否有一种方法可以在静态块或CMS页面中显示产品的名称,SKU,价格或其他属性?

如果没有办法开箱即用的方法,是否有其他方法可以实现这一目标?

也就是说,我希望能够在街区或页面上做这样的事情

{{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归因
scroll top