Question

Court de créer mon propre widget ou classe de bloc pour le faire, est-il un moyen d'afficher le nom, sku, le prix d'un produit, ou d'autres biens dans une page bloc statique ou CMS?

S'il n'y a pas moyen de le faire hors de la boîte, est-il un moyen bien exceptés pour y parvenir?

C'est, je voudrais pouvoir faire quelque chose comme ça dans un bloc ou d'une page

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

et ont apparaître le nom du produit dans le bloc statique / page.

Est-ce exist dans le noyau de Magento? Quelque part dans la communauté?

Était-ce utile?

La solution

Je ne suis pas pleinement conscient d'un noyau des moyens d'aller à ce (que je ne l'ai pas regardé), mais ce qui suit est pas particulièrement difficile à mettre en œuvre.

Il y a quelques jours, nous avons besoin de la sortie d'une aide -. Repassé dans une autre aide, rendu par un bloc CMS

Cela ne nécessite pas de fichiers phtml être créés juste pour le plaisir d'une seule fonction -. Et permettra une utilisation assez souple des méthodes de helper ou model à exécuter

Alors que probablement pas la solution de base propre que vous voulez, la sortie devrait être ce que vous recherchez.

Appel Méthodes Helper

Il n'y a pas de tolérance aux pannes dans ce (par exemple le contrôle existe même une méthode etc. / classe.); mais si vous avez vraiment besoin, vous pouvez le modifier en fonction.

Ce que je voulais était de récupérer la valeur de retour d'une aide qui a obtenu le prix minimum d'un produit ensemble; puis poussez cette sortie à travers l'aide monétaire pour formater correctement.

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

Ce qui a été rendu à l'aide de la classe suivante.

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

Appel du modèle Méthodes

peaufinage Ainsi, le code ci-dessus toujours aussi légèrement (je l'ai dépouillé le rappel d'aide juste pour raccourcir la quantité de code) .

Vous pouvez exécuter,

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

Avec la classe suivante soutien,

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

Cette classe a été maintenu assez générique et de charger toute une méthode pour une méthode serait lourde - mais vous pouvez simplement l'adapter à vos besoins.

Il est évident que quelque chose comme cela serait plus léger, mais vous pouvez modifier vos méthodes pour répondre à vos besoins.

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

Méthode commune

La méthode d'assistance mentionné ci-dessus, stringToBoolean, était le suivant:

public function stringToBoolean(&$value, $key)
{
  if ($value == "true")
    $value = true;
  elseif ($value == "false")
    $value = false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top