1

Magento Webshop のバックエンドで、System->Config のブロックのテンプレートを設定したいと考えています。そのため、 のレイアウト ハンドルを使用するMage_Adminhtml_System_ConfigControlleradminhtml_system_config_index思います。問題は、何も起こらないことです。ブロックを削除したい場合でも、何も起こりません:

<adminhtml_system_config_index>
    <reference name="left">
        <action method="setTemplate">
            <template>myModule/template.phtml</template>
        </action>   
    </reference>
</adminhtml_system_config_index>

またはブロックの削除:

<adminhtml_system_config_index>
    <remove name="left" />
</adminhtml_system_config_index>

私は何を間違っていますか?system_config_indexレイアウトハンドルとしても試しました。

4

1 に答える 1

3

あなたはここで3つの間違ったことをしています。

最初のヒント: 正しい XML ファイルを編集していますか?

多くの一般的なレイアウトの問題は、編集中の XML ファイルが、システムによって読み込まれた XML ファイルではないことに起因しています。サイトで開発者モードをオンにし、 に設定display_errorsしてから1、意図的に整形式でないエラーを XML ファイルに導入し、ページの読み込みを試みます。

<!-- note the trailing greater than sign at the end -->
<adminhtml_system_config_index>
    ...
</adminhtml_system_config_index> >

ページがエラーなしで読み込まれる場合、あなたが思っている XML ファイルを読み込んでいません。

2 番目のヒント: 正しいレイアウト ハンドルを使用していますか?

あなたがそうであるかどうかはわかりません。デフォルトのシステム構成ページがアクションを使用しているにもかかわらずindex、このアクションは実際にはページをアクションに転送しますedit

#File: app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php
public function indexAction()
{
    $this->_forward('edit');
}

転送とは、内部再ディスパッチがあることを意味しますが、http リダイレクトはありません。つまり、実際のハンドルは

`adminhtml_system_config_edit`

これが、私が (免責事項: 構築し、販売する) Commerce Bugを使用する理由です。[レイアウト] タブには常に現在のハンドルが表示されるので、間違った道に進むような思い込みを避けることができます。

コマース バグ ハンドルを示すレイアウト テーブルの画像

3 番目のヒント: ブロック名leftと左側の列を混同していませんか?

一般に、Magento のコンテナー ブロック ( leftcontentrightなど) はテンプレート ブロックではありません。text/list代わりに、複数のテンプレート ブロックを保持するコンテナー ブロック (正確にはブロック) です。

これは、私が Commerce Bug を使用する別の場所です。具体的には、新しい Graphviz 機能です。これにより、特定のページのブロック構造が表示されます。工場出荷時のデフォルト システムでは、[システム構成] ページに次のようなものが表示されます。

ここに画像の説明を入力

ご覧のとおり、左側のブロックにはテンプレートがないため、テンプレートを変更しても効果はありません。おそらく必要なブロックはleft.child1.

4 番目のヒント: 変更しようとしているブロックは、レイアウト XML によって追加されています。

レイアウトのレンダリングに深く入り込むことなく (これにはbook が必要です)、レイアウトがすべてのブロックを生成したに追加されるブロックがいくつかあります。この場合、ブロックはレイアウト XML ファイルで使用できません。

メソッドを見ると、 が呼び出された後editActionにタブ ブロックが追加されていることがわかります( を探します)。これは、レイアウト xml ファイルでは使用できないことを意味します。 loadLayoutadminhtml/system_config_tabs

public function editAction()
{
    //...    

    //the `loadLayout` method call creates blocks based on layout XML files
    $this->loadLayout();

    $this->_setActiveMenu('system/config');
    $this->getLayout()->getBlock('menu')->setAdditionalCacheKeyInfo(array($current));

    $this->_addBreadcrumb(Mage::helper('adminhtml')->__('System'), Mage::helper('adminhtml')->__('System'),
        $this->getUrl('*/system'));

    //this line add the `child1` block to the layout. (child one is the 
    //name chosen since the block has no explicit name
    $this->getLayout()->getBlock('left')
        ->append($this->getLayout()->createBlock('adminhtml/system_config_tabs')->initTabs());

    //...

つまり、レイアウト XML ファイルからこのブロックのテンプレートを変更することはできません。適切なイベントをリッスンし、PHP を介して変更を行うカスタム モジュールを使用する必要があります。イベントcontroller_action_layout_render_beforeまたはcontroller_action_layout_render_before_adminhtml_system_config_edit次のようなPHPコードを試してみます

$block = Mage::getSingleton('core/layout')->getBlock('child1');
if($block)
{
    $block->setTemplate('foo.phtml');
}
于 2013-03-13T19:29:39.947 に答える