0

我有一个扩展程序,它应该让用户(在 magento 后端以管理员身份登录)能够更改前端区域中的一些配置。我想在前端有一个链接,它通过 ajax 加载配置区域,并让用户可以在加载的 div 中编辑和保存这个配置。我想为此使用 magento 后端表单,因此我不必自己编写表单。

我目前的方法在页面上有链接,并通过ajax 加载正确的后端页面(例如系统> 配置> 设计)。对于这种方法,我创建了一个扩展 Mage_Adminhtml_Controller_Action 的控制器。此控制器从 ajax 请求中获取参数并使用一个操作(如 Mage_Adminhtml_System_ConfigController 类的 editAction)在后端获取正确的配置页面。

我的问题是: - 只显示正确的区域(我只希望用户只编辑系统>配置>设计下的“主题”部分)其他所有内容都应该不可用......所以如何删除这个配置周围的所有信息部分?

  • 表单需要 JS 变量 Form_Key。如何获取当前的 Form_Key(在前端)?

  • ajax 加载内容后,表单未正确初始化。因此,如果我尝试提交表单,我的萤火虫会说“JS-Error: configForm is not defined”。如何解决这个表单初始化?有任何想法吗?

我真的希望这里的任何人都可以给我一个提示,如何解决这个问题,让后端配置在前端工作。

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 回答