Frage

Wenn Sie nicht mein eigenes Widget oder meine Blockklasse erstellen, können Sie den Namen, SKU, Preis oder eine andere Eigenschaft eines Produkts auf einer statischen Block- oder CMS -Seite angezeigt?

Wenn es keinen Weg gibt, dies aus der Box zu tun, gibt es dann einen guten Weg, um dies zu erreichen?

Das heißt, ich würde gerne so etwas in einem Block oder einer Seite tun können

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

und lassen Sie den Namen des Produkts in der statischen Block/Seite erscheinen.

Gibt es das in Magentos Kern? Irgendwo in der Gemeinde?

War es hilfreich?

Lösung

Ich bin mir einer nicht voll bewusst Ader bedeutet, dies zu tun (ich habe nicht gesucht), aber das Folgende ist nicht besonders schwer zu implementieren.

Noch vor ein paar Tagen brauchten wir die Ausgabe von einem Helfer - übergeben in einen weiteren Helfer, der über einen CMS -Block gerendert wurde.

Dies wird nicht erfordern phtml Dateien, die nur für eine einzelne Funktion erstellt werden sollen - und ermöglicht eine ziemlich flexible Verwendung von helper oder model Methoden, die ausgeführt werden müssen.

Obwohl es wahrscheinlich nicht die gewünschte Clean Core -Lösung ist, sollte die Ausgabe das sein, nach dem Sie suchen.

Helfermethoden aufrufen

Es gibt keine Fehlertoleranz in diesem (dh Überprüfung einer Methode/Klasse existiert sogar usw.). Aber wenn Sie es wirklich brauchen, können Sie es anpassen.

Was ich wollte, war, den Rückgabwert eines Helfers zu erzielen, der den Mindestpreis eines Bündelprodukts erhielt; Dann drücken Sie diese Ausgabe durch den Währungshelfer, um sie angemessen zu formatieren.

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

Das wurde unter Verwendung der folgenden Klasse gerendert.

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

Modellmethoden aufrufen

So optimieren Sie den obigen Code immer so leicht (Ich habe den Helfer -Rückruf ausgezogen, um die Menge an Code zu verkürzen).

Sie könnten ausführen,

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

Mit der folgenden unterstützenden Klasse,

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

Diese Klasse wurde ziemlich allgemein gehalten und das Laden einer ganzen Methode für eine Methode wäre schwer - aber Sie können sie einfach auf Ihre Bedürfnisse anpassen.

Offensichtlich wäre so etwas leichter, aber Sie können Ihre Methoden an Ihren Bedürfnissen anpassen.

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

Gängige Methode

Die referenzierte Helfermethode oben, stringToBoolean, war genau das folgende:

public function stringToBoolean(&$value, $key)
{
  if ($value == "true")
    $value = true;
  elseif ($value == "false")
    $value = false;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top