【问题标题】:What are the possible tags inside the "global" tag in Magento "config.xml" file?Magento“config.xml”文件中的“全局”标签内可能有哪些标签?
【发布时间】:2010-05-13 09:19:05
【问题描述】:

有专业经验丰富的 Magento 开发者能告诉我如何在 Magento 中完成以下任务吗?

我想知道在每个模块的etc文件夹的“config.xml”页面的“全局”标签中,有哪些可能的标签?

我曾尝试在互联网上的许多地方搜索此答案,但徒劳无功。

请提供 Magento 版本 >= 1.4.0.0 的完整详细信息,因为我希望至少访问该网站的用户觉得它足够有用,而不是摸不着头脑。 p>

我真的想要一个详细的解释,因为每个像我这样的新手都会在这一点上完全糊涂。据我所知,在此页面中,您可以设置路由器、重写、cron 作业、管理 html、前端 html 等等。但是如果没有任何强有力的概念,没有人可以继续相信他的代码是 100% 正确的 w.r.t。 Magento MVC 架构。

所以,我想要这个强大的基本概念,在此处加下划线,并对其进行详细解释,这样就不会再有人陷入这个陷阱了。

我能理解一件事——对于许多人来说,完整引用 Magento 的有效全局标签似乎是用词不当,但我想澄清一下,必须有一组有效的有限数量的标签全局标签。

例如,我不能只写一个“堆栈”或“溢出”或“约瑟夫”标签,我很确定 Magento 不会将其视为有效标签。这是因为有效标签(如“模型”、“资源”、“资源”等)是在 Magento 配置中的某个地方定义的,它们才起作用。

这实际上是我的观点,我想强调这一点。

非常感谢那些只有在清楚了解整个概念后才能回答的人。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    快速的答案是没有这些标签的完整列表。 Magento 不对 XML 文件使用严格的语法,因为它们可以毫无困难地扩展。查看 1.4 代码库,我从终端执行了以下命令:

    cd /path/to/magento
    grep -r global/ . 2>/dev/null | grep -v pearlib | grep php | sort
    

    并返回了大约 75 行,其中专门调用了全局配置路径。其中一些很简单:

    global/page/layouts
    global/pdf/totals
    global/template/email
    global/payment/cc/types
    

    而其他的则更加晦涩:

    global/catalog/product/type/configurable/allow_product_types
    global/helpers/core/encryption_model
    global/widget/related_cache_types
    

    除此之外,还有几个是动态调用的,例如您提到的路由器、重写等:

    global/models/'.$model.'/resourceMode
    global/'.$groupType.'s
    

    事实上,我什至在我自己的扩展代码中发现了 4 个添加到全局空间的引用。知道这一切后,对有效全局标签的完整引用将是用词不当,即使在小更新期间也可能会发生变化。最后一点,您不能完全保证您将遵守 Magento 的配置模型。尽量使用库提供的对象,尽可能使用应用程序其余部分的示例,在没有帮助的情况下勇往直前。 :)

    希望有帮助!

    谢谢, 乔

    【讨论】:

    • 首先,感谢乔,感谢您对我的帖子的精彩回答。我在我的服务器终端中尝试了你的上述命令,但它什么也没返回;相反,它再次显示了我的命令提示符。您能否告诉我如何以及在何处运行上述命令,以便我自己可以看到一些“全局”标签行?
    • 已编辑以包含您可能拥有的命令,但您需要在 Linux 上才能执行它们。如果没有,请使用您熟悉的任何 IDE 并搜索字符串“global/”。
    • 真的很佩服您在使用 Linux 查找东西方面的​​知识。我尝试了您的命令,发现有 75 行使用了“全局”标签。如果存在更多自定义模块,它们将被添加到此列表中,从而产生更多行。
    【解决方案2】:

    事实上,在为 Magento 开发时要记住的重要一点是,所有 config.xml 文件都连接以提供 的输出一个唯一的 XML 文件,其中包含 所有节点,取自 所有模块的所有 config.xml 文件。

    事实是,正如约瑟夫所说,Magento 没有使用任何严格的语法。 我们可以说语法是开发者自己创建的

    例如,如果在您的模块中,您的 config.xml 定义:

    <config>
       <mynode>
         <myconfigvar>Foo</myconfigvar>
       <mynode>
    </config>
    

    定义相同节点 (&lt;mynode&gt;&lt;/mynode&gt;) 的任何其他模块都可以将子节点和添加到此节点,并且您的模块也将能够访问此新节点。

    更好地理解节点的用途是阅读核心代码。 开始了解 magento 解析 config.xml 方式的一个好方法是阅读 app/code/Core/Mage/Core/Config.php

    了解函数Mage::getStoreConfig() 的工作方式也是一个好方法。

    雨果。

    【讨论】:

    • 重点突出,谢谢。但是为什么Magento会解释“mynode”标签?必须有某种解析器来确定 Magento 核心代码将正确解释哪些标签集。
    • magento 不解释“mynode”标签。它只是存在。你可以使用这个函数来访问它:Mage::getConfig()->getNode('mynode/myconfigvar');如果你想从你的模块访问节点:111 prefix> 在 Customer 模块的 config.xml 中定义,只需键入:Mage::getConfig()->getNode('global/fieldsets/customer_account');
    • 哎呀.. 抱歉,我是 StackOverflow 的新手,不知道 cmets 不尊重段落。
    【解决方案3】:

    您可以转储现有标签的列表,而不是寻找明确指定各个位置的字符串。正如其他人指出的那样,这是一个不断变化的列表,所以这只是给你一个想法。我在探索时经常使用这样的脚本...

    <pre><?php
    
    require 'app/Mage.php';
    Mage::app();
    
    $global = Mage::getConfig()->getNode('global');
    
    foreach ($global->children() as $node) {
        echo $node->getName(), PHP_EOL;
    }
    
    ?></pre>
    

    【讨论】:

      【解决方案4】:

      正如约瑟夫所说,没有明确的可能性清单。我对您的建议是开始浏览 Magento 的 config.xml 文件。只需打开 /app/code/core/Mage/ 然后里面的每个文件夹都有一个核心模块。所以,以销售为例。打开 Sales/etc/config.xml 看看他们做了什么。

      只需查看 Magento 已经构建的内容,您就可以学到很多东西。当我不再试图向每个人提问,而是开始检查和学习已经存在的代码时,我才真正开始理解一切是如何工作的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 1970-01-01
        相关资源
        最近更新 更多