静的ブロックに製品プロパティを表示します
-
16-10-2019 - |
質問
そうするために自分のウィジェットまたはブロッククラスを作成する以外に、静的ブロックまたは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;
}
}
このクラスはかなり一般的に保持され、1つの方法の方法全体をロードするのは重いでしょうが、ニーズに合わせて調整することができます。
明らかにこのようなものはより軽量になりますが、あなたのニーズに合わせて方法を微調整することができます。
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;
}