MagentoのCMSページレンダリングの一部である「事前設定ウィジェット」機能を利用するためのUIまたはプログラムシステムがありますか?Magentoウィジェットを事前設定済み
CMSページにウィジェットを追加すると、そのウィジェットをレンダリングするコードがテンプレートディレクティブ処理クラスに配置されます。このコード
File: app/code/core/Mage/Widget/Model/Template/Filter.php
class Mage_Adminhtml_Cms_PageController extends Mage_Adminhtml_Controller_Action
{
...
}
ウィジェットのPARAMATERSをロードする場合、そこに次のコードビット
このコードは{{widget name="foobazbar" id=""}}
、次にID値のためのウィジェットディレクティブタグを解析するように見える
// validate required parameter type or id
if (!empty($params['type'])) {
$type = $params['type'];
} elseif (!empty($params['id'])) {
$preconfigured = Mage::getResourceSingleton('widget/widget')
->loadPreconfiguredWidget($params['id']);
$type = $preconfigured['type'];
$params = $preconfigured['parameters'];
} else {
return '';
}
ウィジェットモデルから設定をロードする
public function loadPreconfiguredWidget($widgetId)
{
$read = $this->_getReadAdapter();
$select = $read->select();
$select->from($this->getMainTable())
->where($this->getIdFieldName() . ' = ?', $widgetId);
var_dump((string)$select);
$widget = $read->fetchRow($select);
if (is_array($widget)) {
if ($widget['parameters']) {
$widget['parameters'] = unserialize($widget['parameters']);
}
return $widget;
}
return false;
}
このコードに初めて遭遇したとき、私はそれがウィジェットインスタンスモデルをロードしていると仮定しました。しかし、そうではありません。代わりに、widget/widget
クラスのデータをロードしています。これはwidget
テーブルに対応しています。
mysql> describe widget;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| widget_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| code | varchar(255) | NO | MUL | NULL | |
| type | varchar(255) | NO | | NULL | |
| parameters | text | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
このテーブルにデータを追加するためのUIまたはシステムはありますか?これがサポートされている機能であるかどうか、またはそれが放棄されたものの開始点であるが、下位互換性の理由から残っている場合は誰でも(Magento Inc.またはそれ以降で動作する人)は知っていますか?
もちろん、メニューには「CMS>ウィジェット」がありますが、私はそれらの経験はありませんし、あなたが提案する構文でCMSページで動作するようにも見えません。私は '{{widget id =" $ num "}}'を試しました。あなたが提供したコードサンプルからは、 'name'パラメータも必要であることは明白ではありません。 – Nick
@Nick、名前パラメータが必要であることを明確にするコードがあります。 {{widget id = "1"}}はCMSページから削除されますが、{{widget name = "foo" id = "1"}}}が表示され、テーブル「widget」からウィジェットをロードしようとします。ウィジェットインスタンスからではありません。 –
これは開発者向けの機能です... CMSページのコンテンツで指定するのではなく、ウィジェットパラメータを取得するためのもう1つのクエリを実行する開発者にとっては:) –