あなたはここで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 のコンテナー ブロック ( left
、content
、right
など) はテンプレート ブロックではありません。text/list
代わりに、複数のテンプレート ブロックを保持するコンテナー ブロック (正確にはブロック) です。
これは、私が Commerce Bug を使用する別の場所です。具体的には、新しい Graphviz 機能です。これにより、特定のページのブロック構造が表示されます。工場出荷時のデフォルト システムでは、[システム構成] ページに次のようなものが表示されます。
ご覧のとおり、左側のブロックにはテンプレートがないため、テンプレートを変更しても効果はありません。おそらく必要なブロックはleft.child1
.
4 番目のヒント: 変更しようとしているブロックは、レイアウト XML によって追加されています。
レイアウトのレンダリングに深く入り込むことなく (これにはbook が必要です)、レイアウトがすべてのブロックを生成した後に追加されるブロックがいくつかあります。この場合、ブロックはレイアウト XML ファイルで使用できません。
メソッドを見ると、 が呼び出された後editAction
にタブ ブロックが追加されていることがわかります( を探します)。これは、レイアウト xml ファイルでは使用できないことを意味します。 loadLayout
adminhtml/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');
}