Magento:如何在前端使用管理配置表单?

Magento:如何在前端使用管理配置表单?,magento,configuration,frontend,backend,adminhtml,Magento,Configuration,Frontend,Backend,Adminhtml,我有一个扩展,它应该让作为管理员登录到magento后端的用户能够更改前端区域的一些配置。我想在前端有一个链接,它通过ajax加载配置区域,并允许用户在加载的div中编辑和保存此配置。我想使用magento后端表单,这样我就不必自己编写表单 我目前的方法在页面上有链接,并通过ajax加载正确的后端页面,例如系统>配置>设计。对于这种方法,我创建了一个控制器,它扩展了Mage_Adminhtml_Controller_操作。此控制器从ajax请求中获取参数,并使用类似于类Mage_Adminhtm

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

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

我的问题是: -仅显示正确的区域我只希望用户仅编辑“系统>配置>设计”下的部分主题其他所有内容都不可用。。。那么如何删除这个配置部分的所有信息呢

表单需要JS变量form_键。如何在前端获取当前表单密钥

ajax加载内容后,表单无法正确初始化。因此,如果我试图提交表单,firebug会说JS错误:未定义configForm。如何解决此表单初始化问题?有什么想法吗


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

这是未经测试的,但应该足以让您走上正确的轨道:

仅输出特定的块 在前端,大多数块通过布局XML实例化。在adminhtml区域中,这是不同的,因此您需要更多地使用PHP实例化

在AJAX操作中,我假设您当前正在调用loadLayout和renderLayout。 要仅输出特定节,请改用此选项:

表单键 表单密钥可以通过

它必须以回传到服务器的形式存在。您可以使用以下代码使用formkey创建HTML隐藏字段:

添加configformjavascript configForm变量是包含配置字段的DOM元素的JS VarieForm对象。 它通过以下方式实例化:

VarieForm声明位于文件js/varien/form.js中。 系统配置还使用了一些额外的javascript。Magento始终在这些块中添加以设置system config JS环境:

我希望这能让你开始

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()
// 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();
// config_edit_form is the CSS id
configForm = new varienForm('config_edit_form');
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')
);