从Observer更新布局

问题描述 投票:1回答:1

我正在使用滑块Magento,我正在尝试从Observer生成和更新我的布局:

事件: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代码是正确的!我需要帮助 谢谢 !

xml magento layer observers
1个回答
2
投票
$layout->getUpdate()->addUpdate($myXml);

addUpdate()不能与“Actions”一起使用,所以我们只能放置这部分布局:

<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();         
}

希望这会有所帮助:)

如果你有一个想法,我现在正试图选择我将展示的类别和产品。

© www.soinside.com 2019 - 2024. All rights reserved.