2011-01-31 13 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、名前パラメータが必要であることを明確にするコードがあります。 {{widget id = "1"}}はCMSページから削除されますが、{{widget name = "foo" id = "1"}}}が表示され、テーブル「widget」からウィジェットをロードしようとします。ウィジェットインスタンスからではありません。 –

+1

これは開発者向けの機能です... CMSページのコンテンツで指定するのではなく、ウィジェットパラメータを取得するためのもう1つのクエリを実行する開発者にとっては:) –

答えて

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>ウィジェットのセクションにウィジェットのインスタンスを作成し、次のコードを経由して、それらをレンダリングできることを発見しましたブロックがレンダリングするためにウィジェットパラメータが渡されることを示します。

関連する問題