我最近开始将Magento用于客户的网上商店,但仍然需要掌握其系统。
网上商店应该有几个链接,并且还可以从公司网站所在的另一个域获取信息。我宁愿不对域名或URL进行硬编码,而是在某个地方定义它,并在整个网店的phtml模板中使用该值。这样,当我们在dev,staging和production URL之间移动网站时,可以轻松调整它。
有人能建议采用Magento的方式吗?我们最好在后端添加一个字段到Store的Config GUI,类似于{{base_url}}的设置方式。或者我想错了路?
答案 0 :(得分:36)
Magento为自定义配置值提供(相对)轻松支持。我发现完成此任务的最佳方法是创建一个包含所有自定义配置值的magento模块。
像任何Magento一样,有很多步骤,任何一个错误的人都可以绊倒你(或我!)。首先,您需要设置magento模块来保存所有自定义配置值。创建magento模块涉及
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>
随机Magento提示:magento系统的某些部分会考虑空白显着,因此最好不要在属性值中包含空格(&lt; active&gt; true&lt; / active&gt; vs.&lt; active&gt; true&lt; /活性&GT;
接下来,创建以下文件夹
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文件。此文件用于向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>
&lt; design&gt; 是您的配置将显示在的部分的名称。“常规,网络,设计,货币设置等”总的来说,这将是标题的小写版本,即“General”变为“general”,“Design”变为“design”。如果您不确定该外部标记应该是什么,请搜索核心magento模块。即,“货币设置”的点击显示在
中提及app/code/core/Mage/Directory/etc/system.xml
<currency translate="label" module="directory">
<label>Currency Setup</label>
所以你要使用标签&lt; currency /&lt;,而不是更直观的&lt; currency_setup /&gt;
&lt; my_or_their_group translate =“label”&gt;是您的配置变量将显示的组的名称。组是包含配置字段的Ajax下拉列表。例如,“常规”部分具有“国家/地区选项”组和“本地选项”组。如果您不确定如何在现有组中放置值,请再次检查现有核心模块。
您还会在此处注意到翻译属性以及相应的标签标记。这允许您在HTML界面中使用任何您想要的字符串作为组标题,但在内部保留该名称是有效的XML标记名称。我们的标签名为
<my_or_their_group />
但在界面中,该组将具有标题
一组配置值。制作自己的,或我们现有的团体。
最后,&lt; my_config translate =“label”&gt;是yoru conifg值的名称。再次注意 translate属性。适用上述规则。
需要另一个xml结构,并且(主要)用于控制将用于配置的HTML输入类型。如果需要特定的接口元素,请在核心模块中查找示例并复制XML结构。
这将允许您在Magento GUI界面中设置和查找配置值。您可以使用全局Mage对象的静态getStoreConfig方法检索值,并指定配置值的URI。使用配置的/ group / name部分创建URI。
Mage::getStoreConfig('design/my_or_their_group/my_config');
答案 1 :(得分:17)
Magento从版本1.4开始提供自定义变量。
登录管理员端,系统 - &gt;自定义变量 - &gt;使用代码“my_variable”创建一个新的自定义变量。
输入此变量的HTML内容和纯文本
您可以通过放置此{{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');
答案 2 :(得分:1)
最简单的方法是将节点添加到magento的核心配置xml文件中。但不推荐这样做,因为它会导致升级问题。要在不编辑核心的情况下设置自定义值....请查看此链接
答案 3 :(得分:1)
我太新了,无法为Alan的回答添加评论,但这里有来自Magento的更多信息:
-Ed。
答案 4 :(得分:0)
我从上面的代码开始,看到添加的“菜单”不在“常规”中,而是在“General-General”,或General-Web,General-Design等中。我希望我的东西显示一般来说,但我不想像其他人一样做,并为我的扩展添加一个完整的菜单组。
如果读者来自谷歌只是想在管理员中轻松选择我的选项,那么请继续阅读(这就是为什么我要添加另一个答案)。 首先:做艾伦上面所说的话。让您的菜单显示在General-&gt; General-&gt;您的菜单中。注意:您需要清除缓存并注销,因为会话中存储了一些信息。
为了让你自己的菜单显示在“常规”下,你必须做同样的事情,就好像你正在获得自己的组,甚至是顶部菜单栏中的Tab,你必须给自己config.xml
中的ACL权限:
<!-- file: config.xml -->
<config>
<adminhtml>
<acl>
<resources>
<admin>
<children>
<system>
<children>
<config>
<children>
<ytf translate="title">
<title>Youtube Feed</title>
</ytf>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</adminhtml>
</config>
这是我的system.xml
,与配置相对应。请注意,ytf
是父菜单。我模仿了TniyBrick的“True Order Edit”模块。另外一个问题:ytf
和ytfeed
与其条目有细微差别。 ytf
条目是您转到管理员时显示的内容 - &gt;配置并查看“常规”组中的左侧。当您点击“常规 - &gt; Youtube Feed”时,ytfeed
是在页面中心打开的“栏”
<!-- file: system.xml -->
<config>
<sections>
<ytf translate="label" module="ytfeed">
<label>Youtube Feed</label>
<tab>general</tab>
<frontend_type>text</frontend_type>
<sort_order>700</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<ytfeed translate="label" module="ytfeed">
<label>Youtube Feed</label>
<sort_order>50</sort_order>
<expanded>1</expanded>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<username translate="label">
<!-- Mage::getStoreConfig('ytf/ytfeed/username'); -->
<label>YouTube Username:</label>
<comment>(or YouTube channel name)</comment>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</username>
</fields>
</ytfeed>
</groups>
</ytf>
</sections>
</config>
另一个对我有帮助的链接:
http://www.scorgit.com/blog/custom-options-in-a-magento-back-end-dropdown-menu/
更新:我制作了an extension out of this answer。