これはテストされていませんが、正しい軌道に乗るには十分なはずです。
特定のブロックだけを出力する
フロントエンドでは、ほとんどのブロックがレイアウト XML によってインスタンス化されます。このadminhtml
領域ではこれが異なるため、PHP のインスタンス化をさらに処理する必要があります。
あなたのAJAXアクションでは、現在 と を呼び出していると思いloadLayout()
ますrenderLayout()
.
特定のセクションのみを出力するには、代わりにこれを使用します。
public function yourAjaxAction()
{
// assuming the required config section is set in the AJAX request
$sectionCode = $this->getRequest()->getParam('section');
$sections = Mage::getSingleton('adminhtml/config')->getSections();
$blockName = (string)$sections->frontend_model;
if (empty($blockName)) {
$blockName = Mage_Adminhtml_Block_System_Config_Edit::DEFAULT_SECTION_BLOCK;
}
$block = $this->getLayout()->createBlock($blockName)->initForm();
// Set the AJAX response content
$this->getResponse()->setBody($block->toHtml());
}
フォームキー
フォームキーは次の方法で取得できます
Mage::getSingleton('core/session')->getFormKey()
サーバーに送り返される形式で存在する必要があります。次のコードを使用して、フォームキーで HTML 隠しフィールドを作成できます。
// If loadLayout() was called:
$formkeyHtml = Mage::app()->getLayout()->getBlock('formkey')->toHtml();
// If working without layout XML:
$formkeyHtml = Mage::app()->getLayout()->createBlock('core/template', 'formkey')
->setTemplate('formkey.phtml') // adminhtml theme formkey
//->setTemplate('core/formkey.phtml') // frontend theme formkey
->toHtml();
configForm JavaScript を追加
configForm
変数は、varienForm
構成フィールドを含む DOM 要素の JS オブジェクトです。
以下を使用してインスタンス化されます。
// config_edit_form is the CSS id
configForm = new varienForm('config_edit_form');
varienForm
宣言はファイルjs /varien/form.jsにあります。
システム構成で使用される追加の JavaScript もあります。Magento は常にこれらのブロックを追加して、システム構成 JS 環境をセットアップします。
Mage::app()->getLayout()->getBlock('js')->append(
$this->getLayout()->createBlock('adminhtml/template')
->setTemplate('system/shipping/ups.phtml')
);
Mage::app()->getLayout()->getBlock('js')->append(
$this->getLayout()->createBlock('adminhtml/template')
->setTemplate('system/config/js.phtml')
);
Mage::app()->getLayout()->getBlock('js')->append(
$this->getLayout()->createBlock('adminhtml/template')
->setTemplate('system/config/applicable_country.phtml')
);
これで始められることを願っています。