0

ユーザー (magento バックエンドで管理者としてログイン) に、フロントエンド領域でいくつかの構成を変更する機能を提供する拡張機能があります。フロントエンドに、ajax を介して構成領域をロードし、ロードされた div でこの構成を編集して保存できるようにするリンクが必要です。これには magento バックエンド フォームを使用したいので、自分でフォームをコーディングする必要はありません。

私の現在のアプローチでは、ページにリンクがあり、ajax を介して正しいバックエンド ページをロードします (例: System > Configuration > Design)。このアプローチのために、Mage_Adminhtml_Controller_Action を拡張するコントローラーを作成しました。このコントローラーは、ajax 要求からパラメーターを取得し、アクション (クラス Mage_Adminhtml_System_ConfigController の editAction など) を使用して、バックエンドで適切な構成ページを取得します。

私の問題は次のとおりです。-正しいエリアのみを表示します(システム>構成>デザインの下のセクション「テーマ」のみをユーザーに編集してもらいたいだけです)他のすべては利用できないはずです...したがって、この構成に関するすべての情報を削除する方法セクション?

  • フォームには JS 変数 Form_Key が必要です。(フロントエンドで) 現在の Form_Key を取得するには?

  • ajax がコンテンツをロードした後、フォームが正しく初期化されません。したがって、フォームを送信しようとすると、firebug に「JS エラー: configForm が定義されていません」と表示されます。このフォームの初期化を解決するにはどうすればよいですか? 何か案は?

ここにいる誰かが、この問題を解決してフロントエンドでバックエンド構成を機能させる方法のヒントを教えてくれることを本当に願っています。

4

1 に答える 1

0

これはテストされていませんが、正しい軌道に乗るには十分なはずです。

特定のブロックだけを出力する

フロントエンドでは、ほとんどのブロックがレイアウト 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')
);

これで始められることを願っています。

于 2012-03-05T11:01:18.230 に答える