2

フロントエンドルーターコントローラーを介してログインユーザーに従って、製品ビューページからproduct_options_wrapperブロックを削除したい。

プログラムで新しいブロックを追加できることはわかっていますが、削除機能が見つかりませんでした。:-(

sthを試しました。そのように

$this->getLayout()->unsetBlock('product_options_wrapper');

$this->getLayout()->getBlock('product.info')->remove('product_options_wrapper');

しかし、何も機能しません。

4

3 に答える 3

8

親ブロックを使用してブロックを削除するには、以下のコードを使用します

$this->getLayout()->getBlock('product.info')->unsetChild('product_options_wrapper');
于 2013-01-11T10:36:12.620 に答える
7

OPコードは、ブロックエイリアスではなく 、正しいブロック名(product.info.options.wrapper )を使用している場合に機能するはずです。

$this->loadLayout();
//e.g. 
if (Mage::getSingleton('customer/session')->getCustomerGroupId() == [id]){
     $this->getLayout()->unsetBlock('product.info.options.wrapper');
}
$this->renderLayout();
于 2013-01-13T15:44:49.397 に答える
6

これはうまくいくはずです:

    $blockName = 'left'; // Add yours
    $update = Mage::app()->getLayout()->getUpdate();
    $removeInstruction = "<remove name=\"$blockName\"/>";
    $update->addUpdate($removeInstruction);

なんで?Mage_Core_Model_LayoutXML が解析されるメソッド内のファイルを調べてくださいgenerateXml()。ブロックに remove が設定されている場合、属性 ignore がブロックに追加されます。このメソッドgenerateBlocks()では、その属性を持つすべてのブロックは追加されません。

于 2013-01-11T10:20:39.913 に答える