是否有用于利用Magento CMS页面呈现的“预配置小部件”功能的UI或程序系统?
将小部件添加到CMS页面时,呈现该小部件的代码位于模板指令处理类中。这段代码
File: app/code/core/Mage/Widget/Model/Template/Filter.php
class Mage_Adminhtml_Cms_PageController extends Mage_Adminhtml_Controller_Action
{
...
}
加载Widget的参数时,会出现以下代码
// 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 '';
}
此代码似乎解析了一个id值
的widget指令标记{{widget name="foobazbar" id=""}}
然后从小部件模型加载配置
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
类加载数据,该类对应于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.的工作人员)知道这是否是一个受支持的功能,或者它是否已经被放弃,但是为了向后兼容的原因而留下了?
答案 0 :(得分:2)
这个答案有些偏离主题,但我不确定它是否可能满足您的需求。我发现您可以在管理CMS>窗口小部件中创建窗口小部件实例,然后通过以下代码呈现它们:
$oWidget = Mage::getModel('widget/widget_instance')->load('HomepageTwitter','title');
$oWidgetBlock = Mage::app()->getLayout()->createBlock($oWidget->getType(), $oWidget->getTitle(), $oWidget->getWidgetParameters());
echo $oWidgetBlock->toHtml();
请注意,块按标题(而不是任意ID)加载,并且要传递窗口小部件参数以进行渲染。
答案 1 :(得分:0)
根据几条评论和私人电子邮件,它似乎是Magento核心团队的私有功能,与Instance Widgets无关。