Anzeige von Produkteigenschaften in einem statischen Block
-
16-10-2019 - |
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?
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;
}