2011-01-31 3 views
4

Есть ли пользовательский интерфейс или программная система для использования функции «Предпочитаемый виджет», которая является частью рендеринга страницы CMS Magento?Предварительно сконфигурированные виджеты Magento

При добавлении виджета на страницу CMS код, отображающий этот виджет, находится в классе обработки директивы шаблона. Этот код

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

При загрузке Счетчики виджета, есть следующий фрагмент кода

// 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 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 |    | 
+------------+------------------+------+-----+---------+----------------+ 

Есть ли пользовательский интерфейс или система для добавления данных в эту таблицу? Кто-нибудь (кто работает в Magento Inc. или нет) знает, является ли это поддерживаемой функцией, или если это начало чего-то, что было заброшено, но оставлено для соображений обратной совместимости?

+0

В меню, конечно, есть «CMS> Widgets», но у меня нет опыта с ними, и они не работают на странице CMS с предложенным вами синтаксисом. Я попробовал '{{widget id =" $ num "}}'. Из примера кода, который вы указали, не очевидно, что вам даже нужен параметр 'name'. – Nick

+0

@Nick, есть код выше, который позволяет очистить параметр имени. {{widget id = "1"}} будет удалена с страницы CMS, но {{widget name = "foo" id = "1"}} появится и попытается загрузить виджет из таблицы "widget" , НЕ из экземпляров виджета. –

+1

Кажется, что это функциональность для разработчиков ... Для разработчиков, которые хотят выполнить еще один запрос для извлечения параметров виджета вместо указания их в содержимом страницы CMS :) –

ответ

0

В нескольких комментариях и частных сообщениях, похоже, это приватная функция для основной команды Magento и не имеет ничего общего с виджетами Instance.

2

Этот ответ несколько не по теме, но я не уверен, что он может удовлетворить вашу потребность в любом случае. Я обнаружил, что вы можете создать виджет экземпляры в админ 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), и что параметры виджета передаются для отображения блока.

Смежные вопросы