如何从Magento中的扩展程序创建的自定义菜单中调用控制器?

时间:2013-03-05 13:36:51

标签: php magento magento-1.7

我是Magento的新手,起初我完成了创建Magento Extension的任务。所以我正在从互联网上阅读并创建扩展。我的Magento版本是1.7.0.2。

我能够创建扩展的基本结构,并将config.xml和其他文件保存在适当的位置,这使得我的扩展在Magento中正确安装,但现在我想从我在主导航中添加的菜单调用我的控制器管理部分。这是我的config.xml文件,请告诉我这里我做错了什么,不让我从我的菜单中调用我的控制器。

<?xml version="1.0"?>
<config>
<!-- turn on our module, required for install support -->
<modules>
<Gwb_Magecrmsync>
    <version>0.1.0</version>
</Gwb_Magecrmsync>
</modules>
<global>
<helpers>
    <magecrmsync>
        <class>Gwb_Magecrmsync_Helper</class>
    </magecrmsync>
</helpers>
<!-- turn on models -->
<models>
    <magecrmsync>
        <class>Gwb_Magecrmsync_Model</class>
        <resourceModel>Magecrmsync_mysql4</resourceModel>
    </magecrmsync>
</models>
<!-- turn on models -->

<!-- turn on database connections -->
<resources>
<!-- setup is needed for automatic installation -->
    <magecrmsync_setup>
        <use>default_setup</use>
    </magecrmsync_setup>
    <magecrmsync_write>
        <use>default_write</use>
    </magecrmsync_write>
    <magecrmsync_read>
        <use>default_read</use>
    </magecrmsync_read>
</resources>
<blocks>
    <magecrmsync>
        <class>Gwb_Magecrmsync_Block</class>
    </magecrmsync>
</blocks>
<layout>
    <magecrmsync>
        <file>Magecrmsync.xml</file>
    </magecrmsync>
</layout>
</global>
<admin>
<routers>
    <magecrmsync>
        <use>admin</use>
        <args>
            <module>Gwb_Magecrmsync</module>
            <frontName>magecrmsync</frontName>
        </args>
    </magecrmsync>
</routers>
</admin>
<adminhtml>
<menu>
    <menu1 translate="title" module="magecrmsync">
        <title>Synchronize</title>
        <sort_order>999</sort_order>
        <children>
            <menuitem1 module="magecrmsync">
                <title>Synchronize</title>
                <action>magecrmsync/adminhtml_magecrmsync</action>
            </menuitem1>
        </children>
    </menu1>
</menu>
<acl>
    <resources>
        <admin>
            <children>
                <menu1 translate="title" module="magecrmsync">
                    <title>Synchronize</title>
                    <sort_order>999</sort_order>
                    <children>
                        <menuitem1>
                            <title>Synchronize</title>
                        </menuitem1>
                    </children>
                </menu1>
            </children>
        </admin>
    </resources>
</acl>
</adminhtml>
</config>

请在此处查看我的更新代码:

How to add custom tab in left sidebar to my custom page in admin section in magento module?

任何帮助都将不胜感激。

由于

7 个答案:

答案 0 :(得分:2)

你应该尽量不要使用所有大写字母进行namin会议,在某些情况下,使用Captial字母来区分不同的类别等,重命名为:

Gwb_Magecrmsync

您的操作不正确,请尝试以下操作:

<action>magecrmsync/adminhtml_synchronize</action>

您还需要管理员的路由器定义

<admin>
    <routers>
        <magecrmsync>
            <use>admin</use>
            <args>
                <module>GWB_MAGECRMSYNC</module>
                <frontName>magecrmsync</frontName>
            </args>
        </magecrmsync>
    </routers>
</admin>

答案 1 :(得分:1)

我建议您将模块名称从MAGECRMSYNC更改为MageCrmSync

尝试

.....
<admin>
    <routers>
        <magecrmsync>
            <use>admin</use>
            <args>
                <module>GWB_MAGECRMSYNC</module>
                <frontName>magecrmsync</frontName>
            </args>
        </magecrmsync>
    </routers>
</admin>
<adminhtml>
<menu>
    <magecrmsync translate="title" module="magecrmsync">
        <title>Synchronize</title>
        <sort_order>60</sort_order>
        <children>
            <menuitem module="magecrmsync">
                <title>Menu item 1</title>
                <action>magecrmsync/adminhtml_synchronize</action>
            </menuitem>
        </children>
    </magecrmsync>
</menu>
<acl>
    <resources>
       <all>
            <title>Allow Everything</title>
        </all>
        <admin>
            <children>
                <magecrmsync translate="title" module="magecrmsync">
                    <title>Sychronize</title>
                    <sort_order>60</sort_order>
                    <children>
                        <menuitem>
                            <title>Menu item 1</title>
                        </menuitem>
                    </children>
               </magecrmsync>
           </children>
       </admin>
   </resources>
</acl>
<adminhtml>
</config>

答案 2 :(得分:1)

看看我的配置可能会对你有所帮助。

<?xml version="1.0"?>
<config>
    <modules>
        <Tibdev_Paypal>
            <version>1.1.0</version>
        </Tibdev_Paypal>
    </modules>

    <global>
        <models>
           ...
        </models>

        <helpers>
            ...
        </helpers>

        <resources>
            ...
        </resources>

    </global>

    <admin>
        <routers>
            ...
        </routers>
    </admin>


    <adminhtml>
        <menu>
            <menu1 translate="title" module="Paypal">
                <title>Tigerbytes GmbH</title>
                <sort_order>999</sort_order>
                <children>
                    <menuitem1 module="Paypal">
                        <title>Paypal 10413 Fix</title>
                        <action>tibdevpaypal/adminhtml_form</action>
                    </menuitem1>
                </children>
            </menu1>
        </menu>
        <acl>
            <resources>
                <admin>
                    <children>
                        <menu1 translate="title" module="Paypal">
                            <title>Tigerbytes GmbH</title>
                            <sort_order>999</sort_order>
                            <children>
                                <menuitem1>
                                    <title>Paypal 10413 Fix</title>
                                </menuitem1>
                            </children>
                        </menu1>
                    </children>
                </admin>
            </resources>
        </acl>


        <layout>
            <updates>
                ...
            </updates>
        </layout>

        <translate>
            <modules>
                ...
            </modules>
        </translate>

    </adminhtml>

</config>

答案 3 :(得分:0)

并将您的模块重命名为

<Gwb_Magecrmsync>

答案 4 :(得分:0)

检查Alan Storm回答的这些问题,以获得一些指导:
Magento Custom Module How to store variable in config.xml
Setting a global variable in Magento, the GUI way?

第二个问题有更全面的答案,其中一个帮助我使用Admin菜单中的第一个模块。我添加了第二个问题的答案,试图进一步解释我在做什么,并包括我创建的与我的答案相关的包。

答案 5 :(得分:0)

这就是config.xml应该是这样的:

<?xml version="1.0"?>
<config>
<!-- turn on our module, required for install support -->
<modules>
<Gwb_Magecrmsync>
    <version>0.1.0</version>
</Gwb_Magecrmsync>
</modules>
<global>
<helpers>
<magecrmsync>
    <class>Gwb_Magecrmsync_Helper</class>
</magecrmsync>
</helpers>
<!-- turn on models -->
<models>
<magecrmsync>
    <class>Gwb_Magecrmsync_Model</class>
    <resourceModel>Magecrmsync_mysql4</resourceModel>
</magecrmsync>
</models>
<!-- turn on models -->

<!-- turn on database connections -->
<resources>
<!-- setup is needed for automatic installation -->
<magecrmsync_setup>
    <use>default_setup</use>
</magecrmsync_setup>
<magecrmsync_write>
    <use>default_write</use>
</magecrmsync_write>
<magecrmsync_read>
    <use>default_read</use>
</magecrmsync_read>
</resources>
<blocks>
<magecrmsync>
    <class>Gwb_Magecrmsync_Block</class>
</magecrmsync>
</blocks>
<layout>
<magecrmsync>
    <file>Magecrmsync.xml</file>
</magecrmsync>
</layout>
</global>
<admin>
<routers>
<magecrmsync>
    <use>admin</use>
    <args>
        <module>Gwb_Magecrmsync</module>
        <frontName>magecrmsync</frontName>
    </args>
</magecrmsync>
</routers>
</admin>
<adminhtml>
<menu>
<menu1 translate="title" module="magecrmsync">
    <title>Synchronize</title>
    <sort_order>999</sort_order>
    <children>
        <menuitem1 module="magecrmsync">
            <title>Synchronize</title>
            <action>magecrmsync/adminhtml_synchronize</action>
        </menuitem1>
    </children>
</menu1>
</menu>
<acl>
<resources>
    <admin>
        <children>
            <menu1 translate="title" module="magecrmsync">
                <title>Synchronize</title>
                <sort_order>999</sort_order>
                <children>
                    <menuitem1>
                        <title>Synchronize</title>
                    </menuitem1>
                </children>
            </menu1>
        </children>
    </admin>
</resources>
</acl>
</adminhtml>
</config>

然后在Gwb / Magecrmcync / controllers / Adminhtml中创建一个SynchronizeController.php:

class Gwb_Magecrmsync_Adminhtml_SynchronizeController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

它会以你想要的方式工作。

答案 6 :(得分:-3)

老兄让我告诉你我未来Magento专家的方式。 所以专家说:

在您的配置中

<menu1 translate="title" module="magecrmsync">
        <title>Synchronize</title>
        <sort_order>999</sort_order>
        <children>
            <menuitem1 module="magecrmsync">
                <title>Synchronize</title>
                <action>magecrmsync/adminhtml_magecrmsync</action>
            </menuitem1>
        </children>
    </menu1>
  1. 操作节点代表您的控制器 所以这里你的目录必须在Magecrmsync / controllers / Adminhtml / MagecrmsyncController中 *确保它正在扩展正确的课程
  2. 现在在此控制器中,您将调用loadlayout() - &gt;这家伙只需加载所有layout.xml文件并将其保存在内存和renderlayout() - &gt;这家伙做的实际打印。

    1. 但等一下。上面的loadlayout()不知道我们的自定义扩展的layout.xml。没问题,让我们创建一个。 所以,只需转到design-&gt; adminhtml-&gt; package-&gt; theme-&gt;布局并放置你的layout.xml,在你的情况下....是.....哦你没有那个你的config.xml(因为admin的layout.xml必须在adminhtml节点,你有一个,但似乎是前端,但仍然不正确,因为你没有前端节点。)无论如何让我们假设你可能已经有了这个,并为您的管理员获得了一个新的布局xml文件,并将其放在adminhtml节点。例如

      <adminhtml>
      <layout>
          <updates>
              <services>
                  <file>layitoutdarling.xml</file>
              </services>
          </updates>
      </layout> </adminhtml>
      
    2. 现在我们的新layoutitoutdarling文件将引用或我们可以说我们的旅程所需的类。此布局文件将保留您需要的秘密。是的它会有什么?????它会...... ......手柄:-S 句柄匹配您的URL(或您的mod /控制器/方法的路径)并调用它们之间的内容。例如,在这个随机的例子中是一个句柄,当你去那个url块类时,将调用其路径为Employee / Block / Adminhtml / Employee.php

      <?xml version="1.0"?>
      <layout version="0.1.0">
          <employee_adminhtml_employee_index>
              <reference name="content">
                  <block type="employee/adminhtml_employee" name="employee" />
              </reference>
          </employee_adminhtml_employee_index>
      </layout>
      

      现在实际上这个文件(Employee / Block / Adminhtml / Employee.php)是你的Grid容器。然后Grid容器将指向Grid文件(Employee / Block / Adminhtml / Employee / Grid.php)。网格容器和网格之间存在差异。

      magento中的表单分为两个4个基本部分 1. FORM容器 2. FORM标签 3. FORM选项卡 4.实际表格字段

      More info on whatever I have said is here

      然后选项卡 假设您已在网格容器部分中放置添加新性感女孩按钮。当然它会指向(控制器)/ sexyController / newAction

      所以现在你的newAction会指出你在左侧添加标签。

      public function newAction(){
      $this->loadLayout();
      $this->_addContent($this->getLayout()->createBlock('form/adminhtml_form_edit'))
      (_addLeft() here we are adding tabs)
                      ->_addLeft($this->getLayout()->createBlock('form/adminhtml_form_edit_tabs'));
      $this->renderLayout();
      }
      

      Detailed information on how to add tabs and more click here

      是的,我只喝了4瓶啤酒,还剩2瓶啤酒。

      请亲爱的朋友检查一下这个网站,你也会变得像我一样..未来的magento专家。