草庐IT

php - 在 Magento 中设置全局变量,GUI 方式?

coder 2023-12-31 原文

我最近开始在客户的网上商店中使用 Magento,但仍然需要掌握它的系统。

网上商店应该有几个链接,还可以从公司网站所在的另一个域中获取信息。我不想对域名或 URL 进行硬编码,而是在某个地方定义它并在整个网上商店的 phtml 模板中使用该值。当我们在开发、暂存和生产 URL 之间移动站点时,这使得调整它变得容易。

任何人都可以建议 Magento 这样做的方式吗?最好我们可以在后端的商店配置 GUI 中添加一个字段,类似于设置 {{base_url}} 的方式。或者也许我想错了?

最佳答案

Magento 为自定义配置值提供(相对)简单的支持。我发现实现此目的的最佳方法是创建一个包含所有自定义配置值的 magento 模块。

就像任何 Magento 一样,有很多步骤,任何一个错误都可能绊倒你(或我!)。

创建一个空的 Magento 模块

首先,您需要设置一个 magento 模块来保存所有自定义配置值。创建一个 magento 模块涉及

  • 在 app/etc/modules 中创建一个 xml 文件
  • 在 app/code/local/Companyname 中创建文件夹结构

  • Companyname 是用作命名空间的唯一字符串,大多数 magento 教程建议您在此处使用您的公司名称。出于本教程的目的,我将使用“Stackoverflow”。无论您在何处看到字符串 Stackoverflow,都将其替换为您自己的唯一字符串。

    因此,对于第 1 步,在 app/etc/modules 中创建一个名为“Stackoverflow_Customconfig.xml”的文件,并将以下内容放入其中
    <?xml version="1.0"?>
    <config>
        <modules>
            <Stackoverflow_Customconfig>
                <active>true</active>
                <codePool>local</codePool>
            </Stackoverflow_Customconfig>
        </modules>
    </config>
    

    随机 Magento 提示:magento 系统的某些部分认为空格很重要,因此最好不要在属性值中包含空格(true true

    接下来,创建以下文件夹
    mkdir app/code/local/Stackoverflow/Customconfig
    mkdir app/code/local/Stackoverflow/Customconfig/etc
    

    并在以下位置创建一个文件
    app/code/local/Stackoverflow/Customconfig/etc/config.xml
    

    有以下内容
    <?xml version="1.0"?>
    <config>
        <modules>
            <Stackoverflow_Customconfig>
                <version>0.1.0</version>
            </Stackoverflow_Customconfig>
        </modules>
    </config>
    

    恭喜,您刚刚设置了一个新的 Magento 模块。如果您清除 magento 缓存并转到
    System -> Configuration -> Advanced -> Disable Modules Output
    

    您应该会看到列出的模块。

    将 System.xml 文件添加到您的模块

    接下来,我们将添加一个 system.xml 文件。此文件用于向 magento 添加自定义配置值,您可以在 magento 请求周期中的任何位置获取该值。添加文件在
    app/code/local/Stackoverflow/Customconfig/etc/system.xml
    

    包含以下内容
    <config>
        <sections>
            <design>
                <groups>
                    <my_or_their_group translate="label">
                        <label>A grouping of config values.  Make your own, or us an existing group.</label>
                        <frontend_type>text</frontend_type>
                        <sort_order>50</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>0</show_in_website>
                        <show_in_store>0</show_in_store>
                        <fields>
                            <my_config translate="label">
                                <label>This will be my config's label</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>50</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>0</show_in_website>
                                <show_in_store>0</show_in_store>
                            </my_config>
                        </fields>
                    </my_or_their_group>
                </groups>
            </design>
        </sections>
    </config>   
    

    <设计> 是您的配​​置将显示在其中的部分的名称。“常规、网页、设计、货币设置等。”总的来说,这将是标题的小写版本,即“General”变为“general”,“Design”变为“design”。如果您不确定这个外部标签应该是什么,请搜索核心 magento 模块。即,搜索“货币设置”显示在
    app/code/core/Mage/Directory/etc/system.xml
    <currency translate="label" module="directory">
        <label>Currency Setup</label>
    

    所以你会使用标签 <,而不是更直观的>

    是您的配置变量将显示在其中的组的名称。组是包含配置字段的 Ajax 下拉列表。例如,General 部分有一个“Country options”组和一个 Local options 组。如果您不确定如何在现有组中放置值,请再次检查现有的核心模块。

    您还会注意到这里有一个 translate 属性,以及一个相应的 label 标签。这允许您在 HTML 界面中使用您想要的任何字符串作为组标题,但在内部将该名称保留为有效的 XML 标记名称。我们的标签被命名为
    <my_or_their_group />
    

    但是在界面中,群组会有标题

    A grouping of config values. Make your own, or us an existing group.



    最后, 是 yoru conifg 值的名称。再次注意 translate 属性。与上述相同的规则适用。

    需要另一个 xml 结构,并且(主要)用于控制将用于您的配置的 HTML 输入类型。如果您需要特定的界面元素,请在核心模块中找到示例并复制 XML 结构。

    这将允许您在 Magento GUI 界面中设置和查找配置值。您可以使用全局 Mage 对象的静态 getStoreConfig 方法并指定配置值的 URI 来检索您的值。 URI 是使用配置的部分/组/名称创建的。
    Mage::getStoreConfig('design/my_or_their_group/my_config');     
    

    关于php - 在 Magento 中设置全局变量,GUI 方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949779/

    有关php - 在 Magento 中设置全局变量,GUI 方式?的更多相关文章

    1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

      我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

    2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

      我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

    3. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

      我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

    4. ruby - 通过 ruby​​ 进程共享变量 - 2

      我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

    5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

      我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

    6. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

      question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

    7. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

      我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

    8. ruby - Rack:如何将 URL 存储为变量? - 2

      我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

    9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

      在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

    10. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

      当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

    随机推荐