1

私はスライダーブロックMagentoで作業しており、オブザーバーからレイアウトを生成して更新しようとしています。

イベント:controller_action_layout_load_before

これは私のオブザーバーメソッドです:

        $myXml="<".$page.">";
    $myXml.='<reference name="'.$posH.'">';
    $myXml.='<block type="sliderboard/slider" name="sliderboard" '.$posV.'="-" template="sliderboard/myview.phtml"/>';
    $myXml.='</reference>';
    $myXml.="</".$page.">";

    $layout = $observer->getEvent()->getLayout();
    //$layout=Mage::getSingleton('core/layout');
    //Zend_Debug::dump($myXml); die();          
    $layout->getUpdate()->addUpdate($myXml);
    $layout->getUpdate()->load();
    $layout->generateXml();
    $layout->generateBlocks();

実際、これは「$myXML」変数から取得したものです。

<cms_page>
<reference name="content">
<block type="sliderboard/slider" name="sliderboard" after="-" template="sliderboard/myview.phtml"/>
</reference>
</cms_page>

そして、それは動作しません!! しかし、このxmlをレイアウトにコピー/貼り付けしようとすると、機能します。Xmlコードは正しいです!助けが必要
ですありがとう!

4

1 に答える 1

2
$layout->getUpdate()->addUpdate($myXml);

addUpdate()は「アクション」では機能しないため、レイアウトのこの部分のみを配置できます。

<reference name="content">
<block type="myblock/block" name="sliderboard" after="-" template="mytemp/tmplate.phtml"/>
</reference>

そして、(cms、カテゴリ、製品)から選択するために使用します:

$action = $observer->getEvent()->getAction();
$fullActionName = $action->getFullActionName();

$ fullActionNameを次のように比較します:cms_index_index / catalog_category_view / catalog_product_view

そして、それが私たちが必要とするものと等しい場合、私たちは次のように調整します:

$page="cms_index_index";    
switch ($slider->getSldPage()){

    case 'product':  $page="catalog_product_view";  
        break;
    case 'category': $page="catalog_category_view";         
        break;
}

$myXml.='<reference name="'.$posH.'">';
$myXml.='<block type="sliderboard/slider" name="sliderboard" '.$posV.'="-" template="sliderboard/myview.phtml"/>';
$myXml.='</reference>';

$action = $observer->getEvent()->getAction();
$fullActionName = $action->getFullActionName();
$layout = $observer->getEvent()->getLayout();

if ($fullActionName==$page)
{
    $layout->getUpdate()->addUpdate($myXml);
    $layout->generateXml();         
}

これがお役に立てば幸いです:)

今、私はあなたがアイデアを持っているなら、私がどのカテゴリーとどの製品を表示するかを選択しようとしています。

于 2012-12-27T08:36:56.360 に答える