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

时间:2012-03-05 09:32:36

标签: magento configuration frontend backend adminhtml

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

我当前的方法在页面上有链接,并通过ajax加载正确的后端页面(例如,系统>配置>设计)。对于这种方法,我创建了一个扩展Mage_Adminhtml_Controller_Action的Controller。这个Controller从ajax请求中获取params并使用一个动作(比如类Mage_Adminhtml_System_ConfigController的editAction)来获得后端的正确配置页面。

我的问题是: - 仅显示正确的区域(我只希望用户仅编辑系统>配置>设计下的“主题”部分)其他一切都不可用...那么如何删除此配置部分的所有信息?

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

  • 在ajax加载内容后,表单无法正确初始化。因此,如果我正在尝试提交表单,我的firebug说“JS-Error:configForm未定义”。如何解决这种形式的初始化?有什么想法吗?

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

1 个答案:

答案 0 :(得分: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()

它必须以回发到服务器的形式出现。您可以使用以下代码使用formkey创建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变量是包含配置字段的DOM元素的JS varienForm对象 它使用以下实例化:

// 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')
);

我希望能让你开始。