【问题标题】:Magento: How to use admin configforms in frontend?Magento:如何在前端使用管理配置表单?
【发布时间】:2012-03-22 18:56:33
【问题描述】:

我有一个扩展程序,它应该让用户(在 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”。如何解决这个表单初始化?有什么想法吗?

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

【问题讨论】:

    标签: magento configuration frontend backend adminhtml


    【解决方案1】:

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

    只输出一个特定的块

    在前端,大多数块都是通过布局 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 变量是包含配置字段的 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')
    );
    

    我希望这能让你开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2018-10-05
      • 2019-06-03
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多