2011-01-31 47 views
4

是否有一个用户界面或程序系统利用Magento的CMS页面呈现的一部分“预配置的小工具”的功能?预配置Magento小部件

向CMS页面添加小部件时,呈现该小部件的代码位于模板指令处理类中。此代码

File: app/code/core/Mage/Widget/Model/Template/Filter.php 
class Mage_Adminhtml_Cms_PageController extends Mage_Adminhtml_Controller_Action 
{ 
    ... 
} 

当装载Widget的PARAMATERS,有下面的代码位

// 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 ''; 
} 

此代码出现解析一个widget指示标记为一个id值

{{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公司工作)谁知道这是一个支持的功能,或者如果这是一个被放弃的东西的开始,但出于向后兼容的原因?

+0

当然,菜单中有“CMS>小工具”,但我对它们没有经验,也没有使用您建议的语法在CMS页面中工作。我试过`{{widget id =“$ num”}}`。从你提供的代码示例中不明显你甚至需要`name`参数。 – Nick 2011-01-31 20:56:43

回答

0

通过几条评论和私人邮件,看起来这是Magento核心团队的一项秘密功能,并且与实例窗口小部件无关。

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)加载,小部件参数被传递给Block进行渲染。