Affichage des propriétés du produit dans un bloc statique
-
16-10-2019 - |
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é?
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;
}