如何调用控制器从自定义菜单创建的扩展在Magento


How to call controller from custom menu created by extension in Magento?

我是Magento的新手,起初我得到了创建Magento扩展的任务。所以我从互联网上阅读和创建扩展。我的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>

请在这里查看我更新的代码:

如何在左侧栏添加自定义选项卡到我的自定义页面管理部分在magento模块?

如有任何帮助,不胜感激。

谢谢

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

Gwb_Magecrmsync

你的操作不正确,试试这个:

<action>magecrmsync/adminhtml_synchronize</action>

你还需要一个Router定义的admin

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

看看我的配置,也许会对你有帮助。

<?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>

我建议您将模块名称从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>

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/magecrmsync/controllers/Adminhtml:

中创建synchronizeconcontroller .php
class Gwb_Magecrmsync_Adminhtml_SynchronizeController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

它会按照你想要的方式工作

并将模块重命名为

<Gwb_Magecrmsync>

看看Alan Storm回答的这些问题,也可以获得一些指导:
如何在config.xml中存储变量
和设置一个全局变量在Magento, GUI的方式?

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

伙计,让我告诉你我是未来的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*确保它扩展了正确的类

现在在这个控制器中,你将调用loadlayout() ->这个家伙加载所有的layout。xml文件并将其保存在内存中而renderlayout() ->这个家伙执行实际的打印操作

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

    <adminhtml>
    <layout>
        <updates>
            <services>
                <file>layitoutdarling.xml</file>
            </services>
        </updates>
    </layout> </adminhtml>
    

现在这个我们新的layoutoutdarling文件将引用或者我们可以说指向我们旅程中需要的类。这个布局文件将包含您所需要的秘密。是的,它会有?????它会有…. .处理:- 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)是你的网格容器。然后网格容器将指向网格文件(Employee/Block/Adminhtml/Employee/Grid.php)。网格容器和网格是有区别的。

紫红色的形式分为两个4个基本部分1. 表单容器2. 表单标签3.表单标签4. 实际表单字段

关于我所说的更多信息在这里

Then for Tabs假设您已经在Grid Container部分放置了Add New Sexy Girl按钮。当然它会指向(controller)/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();
}

关于如何添加选项卡和更多内容的详细信息请点击这里

我刚喝了4瓶啤酒,还剩2瓶。

休息吧,我亲爱的朋友,看看那个网站,你也会像我一样…未来的品红专家。