【问题标题】:Magento > Backend > New Menu Item needs specific action -> How do I do it?Magento > Backend > New Menu Item need specific action -> 我该怎么做?
【发布时间】:2011-04-26 04:26:57
【问题描述】:

我在后端创建了一个新菜单,并添加了一些子菜单。其中一个名为“Manage Pages”的子项必须检索与以“CMS_”开头的属性集相对应的所有产品,并且不应包含价格列。

到目前为止我已经这样做了:

app/code/community/Mycompany/Content/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Mycompany_Content>
            <version>0.1.0</version>
        </Mycompany_Content>
    </modules>
    <adminhtml>
        <menu>
            <newmenu translate="title">
                <title>Content</title>
                <sort_order>31</sort_order>
                <action>adminhtml/newmenu/</action>
                <children>
                    <newchildmenu translate="title">
                        <title>Manage Pages</title>
                        <action>adminhtml/newmenu/</action>
                    </newchildmenu>
                    <newchildmenu1 translate="title">
                        <title>Manage Attributes</title>
                        <action>adminhtml/catalog_product_attribute</action>
                    </newchildmenu1>
                    <newchildmenu2 translate="title">
                        <title>Manage Categories</title>
                        <action>adminhtml/catalog_category/</action>
                    </newchildmenu2>                                        
                </children>
             </newmenu>
        </menu>
    </adminhtml>
</config> 

app/etc/modules/Mycompany_Content.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Mycompany_Content>
            <active>true</active>
            <codePool>community</codePool>
        </Mycompany_Content>
    </modules>
</config> 

再一次,这就是我想要的: - 当我按下“管理页面”时,我想被发送到一个“管理产品”页面,该页面根据一组特定的属性进行过滤 - 名称以“CMS_”开头且没有价格列的属性集。

我该怎么做?

提前致谢! 高温


好的,也许我可以尝试剖析问题。

如何在后端创建一个根据特定属性集过滤的“管理产品”页面的副本?

【问题讨论】:

  • 您已经在这里问了十几个问题。如果您遇到特定问题,Stack Overflow 可以为您提供帮助。它无法为您构建解决方案。

标签: php xml layout magento admin


【解决方案1】:

正如 Alan 正确指出的那样,这个网站不是为他们做任何人的工作,但如果你愿意帮助自己,那么社区可以提供线索。为此,这里有一个学习如何做的通用方法。

  • 首先查看现有的管理产品,URL 显示路径以“/admin/catalog_product/index/”开头。 URL 使用route/controller/action 格式,因此我们可以推断出负责的类是Mage_Adminhtml_Catalog_ProductController,方法是indexAction
    (“admin”路由到“Adminhtml”,“catalog_product”成为“Catalog”文件夹和“ProductController”文件)

  • 方法indexAction 包含对loadLayout()renderLayout() 的调用,这肯定表明正在使用布局文件。我们的下一个线索在“app/design/adminhtml/default/layout/catalog.xml”中。

  • catalog.xml 的第一部分是&lt;adminhtml_catalog_product_index&gt;,幸运的是它与之前的路径匹配。在它的“内容”中,它创建了一个类型为“adminhtml/catalog_product”的块,解析为Mage_Adminhtml_Block_Catalog_Product

  • 检查时它有一个_prepareLayout() 方法,与所有块一样,它在页面输出之前被调用。此方法添加一个“添加产品”按钮和一个来自“adminhtml/catalog_product_grid”的块。

  • 从页面中可以看出,该网格与 admin 中的所有其他网格具有相同的形式。 Mage_Adminhtml_Block_Catalog_Product_Grid 类扩展了 Mage_Adminhtml_Block_Widget_Grid,它完成了所有艰苦的工作来制作网格。只需进行一些小的更改即可使其正常工作。

  • 这里的重要方法是_prepareCollection()_prepareColumns()。还有_prepareMassaction(),它定义了显示在网格右上角的操作下拉框。

几乎所有管理页面的工作方式都与此相同。要自己制作,您需要;

  1. 为您的模块注册一个控制器。这是overloading controllers 的指南。
  2. 为您的控制器提供一个操作来呈现布局。
  3. 在“app/design/adminhtml/default/layout”目录中创建一个布局文件,并将其注册到您的“config.xml”中,以便得到尊重。它必须有一个与您的路由、控制器和操作相匹配的部分。
  4. 添加块以显示网格小部件。该示例以编程方式创建它,但也可以在布局文件中完成。
  5. 扩展 Mage_Adminhtml_Block_Widget_Grid 以创建您自己的块。
  6. 添加一个_prepareColumns() 和一个_prepareCollection() 方法,您将在其中进行数据库访问并根据您的要求过滤结果。

另一个相关指南可以找到here。事实上,查看 Magento wikiknowledgebase 了解更多信息。以上不是一套完整的说明,后面还有很多需要学习的地方。

【讨论】:

  • 非常感谢!我会试一试,我会让你知道我已经做到了。
  • 我也会在代码开始工作后立即显示它!再次感谢!
  • 有人能指出我,这段代码有什么问题吗? magentocommerce.com/boards/viewthread/208244
  • +1 详细介绍了一个复杂的主题。 @HTaina,我建议您查看 ModuleCreator 扩展,它将为您创建大量 Adminhtml 样板
  • re 你的论坛代码,我会怀疑区分大小写的问题。另外,看看 TBT 增强网格扩展,它完全符合您的要求,而且是 FOSS。
猜你喜欢
  • 2018-01-16
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多