4

我是 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 模块管理部分的自定义页面?

任何帮助,将不胜感激。

谢谢

4

7 回答 7

2

您应该尽量不要将所有大写字母用于命名约定,在某些情况下,大写字母用于区分不同的类等,重命名为:

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>
于 2013-03-07T14:15:57.123 回答
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>
于 2013-03-05T14:23:46.177 回答
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>
于 2013-03-06T15:29:53.427 回答
0

并将您的模块重命名为

<Gwb_Magecrmsync>
于 2013-03-05T21:38:47.820 回答
0

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

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

于 2013-03-06T01:52:02.277 回答
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();
    }
}

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

于 2013-03-14T11:18:25.873 回答
-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 *确保它扩展了正确的类

现在在这个控制器中,您将调用 loadlayout() -> 这家伙只需加载所有 layout.xml 文件并将其保存在内存中,然后 renderlayout() -> 这家伙会实际打印这些东西。

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

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

现在,我们的新 layoutitoutdarling 文件将引用这个文件,或者我们可以说指向我们旅程所需的类。这个布局文件将保存您需要的秘密。是的,它会有什么????它将具有 ... .. 句柄 :-S 句柄匹配您的 URL(或您的模块/控制器/方法的路径)并调用它们之间包含的内容。例如,在这个随机示例中是一个句柄,当您转到该 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 文件(Employee/Block/Adminhtml/Employee/Grid.php)。Grid Container 和 Grid 是有区别的。

magento 中的表单分为两个 4 个基本部分 1. FORM Container 2. FORM tag 3. FORM Tabs 4. Actual Form Fields

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

然后对于 Tabs 假设您在 Grid Container 部分中放置了Add New Sexy Girl按钮。当然它会指向一个(控制器)/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 杯。

休息一下,我亲爱的朋友,检查那个网站,你也会像我一样……成为未来的 magento 专家。

于 2013-03-13T08:20:52.477 回答