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

Mar*_*els 9 php xml configuration magento

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

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

任何人都可以建议采用Magento的方式吗?我们最好在后端添加一个字段到Store的Config GUI,类似于{{base_url}}的设置方式.或者也许我在想错误的方法?

Ala*_*orm 36

Magento为自定义配置值提供(相对)轻松支持.我发现完成此任务的最佳方法是创建一个包含所有自定义配置值的magento模块.

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

创建一个空的Magento模块

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

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

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

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

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Customconfig>
            <active>true</active>
            <codePool>local</codePool>
        </Stackoverflow_Customconfig>
    </modules>
</config>
Run Code Online (Sandbox Code Playgroud)

随机Magento提示:magento系统的某些部分会考虑空白显着,因此最好不要在属性值中包含空格(<active> true </ active> vs. <active> true </ active>

接下来,创建以下文件夹

mkdir app/code/local/Stackoverflow/Customconfig
mkdir app/code/local/Stackoverflow/Customconfig/etc
Run Code Online (Sandbox Code Playgroud)

并创建一个文件

app/code/local/Stackoverflow/Customconfig/etc/config.xml
Run Code Online (Sandbox Code Playgroud)

具有以下内容

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Customconfig>
            <version>0.1.0</version>
        </Stackoverflow_Customconfig>
    </modules>
</config>
Run Code Online (Sandbox Code Playgroud)

恭喜,您刚刚设置了一个新的Magento模块.如果清除magento缓存并转到

System -> Configuration -> Advanced -> Disable Modules Output
Run Code Online (Sandbox Code Playgroud)

你应该看到列出你的模块.

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

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

app/code/local/Stackoverflow/Customconfig/etc/system.xml
Run Code Online (Sandbox Code Playgroud)

这包含以下内容

<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>   
Run Code Online (Sandbox Code Playgroud)

<design>是您的配​​置将显示在的部分的名称."常规,Web,设计,货币设置等" 总的来说,这将是标题的小写版本,即"General"变为"general","Design"变为"design".如果您不确定该外部标记应该是什么,请搜索核心magento模块.也就是说,为"货币设置"提供的报价显示了一个提及

app/code/core/Mage/Directory/etc/system.xml
<currency translate="label" module="directory">
    <label>Currency Setup</label>
Run Code Online (Sandbox Code Playgroud)

因此,您使用标记<currency/<,而不是更直观的<currency_setup />

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

您还会在此处注意到translate属性以及相应的标签标记.这允许您将HTML界面中所需的任何字符串用作组标题,但在内部将名称保留为有效的XML标记名称.我们的标签已命名

<my_or_their_group />
Run Code Online (Sandbox Code Playgroud)

但在界面中,该组将拥有该标题

一组配置值.创建自己的,或我们现有的组.

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

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

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

Mage::getStoreConfig('design/my_or_their_group/my_config');     
Run Code Online (Sandbox Code Playgroud)


小智 17

Magento从版本1.4开始提供自定义变量.

登录管理员端,系统 - >自定义变量 - >使用代码"my_variable"创建一个新的自定义变量.

输入此变量的HTML内容和纯文本

您可以通过放置此选项在CMS页面中显示自定义变量 {{customVar code=my_variable}}

或者在.phtml页面中:

$variableHtml = Mage::getModel('core/variable')->loadByCode('my_variable')->getValue('html');
$variablePlain = Mage::getModel('core/variable')->loadByCode('my_variable')->getValue('plain');
Run Code Online (Sandbox Code Playgroud)