2011-01-31 4 views
4

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.의 지원을 받는지 알지 못합니다. 지원되는 기능인지 또는 버려진 것이지만 이전 버전과의 호환성을 위해 남아있는 항목의 시작일 경우 알 수 있습니까?

+0

메뉴에는 "CMS> 위젯"이 있지만 메뉴에 대한 경험이 없거나 사용자가 제안하는 구문과 함께 CMS 페이지에서 작동하는 것처럼 보입니다. 나는 {{widget id = "$ num"}}'을 시도했다. 제공 한 코드 샘플에서 'name' 매개 변수가 필요하다는 점은 분명하지 않습니다. – Nick

+0

@Nick, 위의 몇 가지 코드는 이름 매개 변수가 분명해 지도록합니다. CMS 페이지에서는 {{widget id = "1"}}이 (가) 제거되지만 {{widget name = "foo"id = "1"}}} 테이블에 위젯이로드됩니다. 위젯 인스턴스가 아닙니다. –

+1

개발자를위한 기능입니다 ... CMS 페이지 콘텐츠에서 위젯 매개 변수를 지정하는 대신 위젯 매개 변수를 검색하기 위해 하나 이상의 쿼리를 실행하려는 개발자의 경우 :) –

답변

0

여러 개의 댓글 및 비공개 이메일을 통해 Magento 핵심 팀의 비공개 기능인 것으로 보이며 인스턴스 위젯과는 관련이 없습니다.

2

이 답변은 다소 주제와 관련이 없지만 어쨌든 귀하의 필요를 충족시킬 수 있는지 확실하지 않습니다. 블록이 (오히려 임의의 ID 제외) 제목로드

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

하는 것으로, 그리고 : 나는 당신이 관리자 CMS> 위젯 섹션에서 위젯 인스턴스를 생성 한 후 다음 코드를 통해 그들을 렌더링 할 수 있음을 발견했습니다 블록이 렌더링하기 위해 위젯 매개 변수가 전달됩니다.