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

2021-12-19 00:00:00 xml configuration php magento

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

I've recently started using Magento for a client's webshop, and still need to get to grips with its systems.

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

The webshop should have several links to and also grab info from another domain, where the corporate website is located. I would prefer not to hardcode the domain name or URL but instead define it at some place and use that value in the phtml templates throughout the webshop. This makes it easy to adjust it when we move the site between dev, staging and production URL's.

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

Can anyone suggest the Magento way of doing this? Preferably we could add a field to the Store's Config GUI in the backend, similar to the way the {{base_url}} is set. Or maybe I'm thinking the wrong way?

推荐答案

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

Magento offers (relatively) easy support for custom configuration values. The best way I've found to accomplish this is to create a single magento module that holds all your custom configuration values.

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

Like anything Magento, there are a lot of steps, and any one being wrong could trip you (or me!) up.

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

First, you'll want to setup a magento module to hold all your custom configuration values. Creating a magento module involves

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

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

Companyname is a unique string that serves as a namespace, and most magento tutorials recommend you use your company name here. For the purposes of this tutorial, I'll use "Stackoverflow". Wherever you see the string Stackoverflow, replace it with your own unique string.

因此,对于第 1 步,在 app/etc/modules 中创建一个名为Stackoverflow_Customconfig.xml"的文件,并将以下内容放入

So, for step 1, create a file at app/etc/modules named "Stackoverflow_Customconfig.xml", and place the following inside

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Customconfig>
            <active>true</active>
            <codePool>local</codePool>
        </Stackoverflow_Customconfig>
    </modules>
</config>

随机 Magento 提示:Magento 系统的某些部分认为空格很重要,因此最好不要在属性值中包含空格(true</active> vs. true <;/活动>

Random Magento Tip: There are parts of the magento system that consider whitespace significant, so it's always best to include no whitespace with your attribute values (<active>true</active> vs. <active> true </active>

接下来,创建以下文件夹

Next, create the following folder

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 缓存并转到

Congratulations, you've just setup a new Magento Module. If you clear your magento cache and go to

System -> Configuration -> Advanced -> Disable Modules Output

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

you should see your module listed.

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

Next, we're going to add a system.xml file. This file is used to add a custom configuration value to magento, which you'll be able to grab anywhere you want during the magento request cycle. Add a file at

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 模块.即,对货币设置"的 grepping 显示在

<design> is the name of the section your config will be displayed in. "General, Web, Design, Currency Setup, etc." By and large, this will be a lower-case version of the title, i.e. "General" becomes "general", "Design" becomes "design". If you're not sure what this outer tag should be, search through the core magento modules. i.e., grepping for "Currency Setup" reveals a mention in

app/code/core/Mage/Directory/etc/system.xml
<currency translate="label" module="directory">
    <label>Currency Setup</label>

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

So you'd use the tag <currency /<, and not the more intuitive <currency_setup />

是您的配​​置变量将在其中显示的组的名称.组是包含配置字段的 Ajax 下拉列表.例如,常规"部分有一个国家选项"组和一个本地选项"组.如果您不确定如何在现有组中放置值,请再次检查现有核心模块.

<my_or_their_group translate="label"> is the name of the group your config variable will show up in. Groups are the Ajax drop downs that contain config fields. For example, the General section has a "Country options" group and a Local options" group. Again, check existing core modules if you're unsure how to place a value in an existing group.

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

You'll also notice a translate attribute here, along with a corresponding label tag. This allows you to use any string you want in the HTML interface as a group title, but internally keep the name a valid XML tag name. Our tag is named

<my_or_their_group />

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

but in the interface, the group will have the title

一组配置值.建立您自己的或我们现有的群组.

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

最后,<my_config translate="label">是 yoru conifg 值的名称.再次注意translate 属性.与上述相同的规则适用.

Finally, <my_config translate="label"> is the name of yoru conifg value. Again, notice the translate attribute. The same rules as above apply.

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

The other xml structure is needed, and is (mostly) used to control what kind of HTML inputs will be used for your config. If you want a particular interface element, find an example in the core module and copy the XML structure.

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

This will allow you to set and lookup config values in the Magento GUI interface. You can retrieve your values using the static getStoreConfig method of the global Mage object and specifying the URI of your config value. The URI is created using the section/group/name of your config.

Mage::getStoreConfig('design/my_or_their_group/my_config');     

相关文章