预配置的Magento小部件

是否有用于利用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实例模型.但事实并非如此.相反,它是从小部件/小部件类加载数据,它对应于小部件表.

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公司的工作人员)知道这是否是一个支持的功能,或者它是否已经被放弃的东西的开始,但是为了向后兼容的原因留下了?

最佳答案 这个答案有点偏离主题,但我不确定它是否可能满足您的需求.我发现您可以在admin CMS> Widgets部分中创建窗口小部件实例,然后通过以下代码呈现它们:

$oWidget = Mage::getModel('widget/widget_instance')->load('HomepageTwitter','title');
$oWidgetBlock = Mage::app()->getLayout()->createBlock($oWidget->getType(), $oWidget->getTitle(), $oWidget->getWidgetParameters());
echo $oWidgetBlock->toHtml();

请注意,块按标题(而不是任意ID)加载,并且要传递窗口小部件参数以进行渲染.

点赞