- 浏览: 596541 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (332)
- PHP (92)
- JS/Css (38)
- Mysql (12)
- apache (7)
- magento (22)
- 杂淡 (1)
- snoopy (2)
- 安全 (1)
- YII (33)
- 网络编程 (3)
- HTML (4)
- editplus (1)
- phpcms (1)
- 软件 (1)
- kindeditor (2)
- android (35)
- java (1)
- Zend (21)
- Git (4)
- smarty (1)
- shell (0)
- svn (7)
- linux (1)
- 支付宝 (1)
- jquery (5)
- 微信 (3)
- thinkPHP (9)
- sqlyog (1)
- TCP/IP学习 (1)
- 服务器 (1)
- phpExcel (2)
- sql server (1)
- 我的工作 (0)
- 销售 (1)
- HTML5 (1)
- 接口开发 (0)
- memcache (2)
- jquery-weui (1)
- laravel (4)
最新评论
-
天使建站:
http://www.aijquery.cn/Html/bia ...
jquery searchableselect用法 -
天使建站:
http://www.aijquery.cn/Html/bia ...
jquery searchableselect用法 -
hudeyong926:
这技术太老了
PHP生成桌面快捷方式 -
hnlixf:
参考 http://www.jb51.net/article/ ...
ThinkPHP 3.3.2使用PHPExcel实现Excel数据导入导出完整实例 -
hudeyong926:
magento,清空购物车中所有的产品和session
Magento拥有十分强大的后台管理系统。作为一名开发人员,这套后台管理系统可以让你的用户简单直接的配置Magento系统或者你创建的模 块。和Magento的其他功能一样,你第一次使用这套管理系统的时候可能觉得很麻烦,但是一旦你上手了,你会发现它强大的功能是那么吸引人。那么让我们 开始吧。我们这一章的例子依然是基于Helloworld模块。
添加系统配置文件
首先我们要为模块添加一个系统配置文件。这个文件和“config.xml”是不搭界的
app/code/local/Zhlmmc/Helloworld/etc/system.xml
和全局配置(global config)相似,系统配置也是单独存储的。我们可以通过下面这段代码来获取系统配置文件
//header('Content-Type: text/xml');
header('Content-Type: text/plain');
echo $config = Mage::getConfig()
->loadModulesConfiguration('system.xml')
->getNode()
->asXML();
exit;
你可以把这段代码放到任何执行函数(Action Method)中。“loadModulesConfiguration”方法会搜索所有配置好的模块的“etc”文件夹,寻找以传入的参数为名字的文 件,在这个例子中是“system.xml”。Magento有很多不同的配置文件,比如api.xml, wsdl.xml, wsdl2.xml, convert.xml, compilation.xml, install.xml。你可以为你创建的模块创建这些配置文件。
添加一个标签页
我们首先在后台系统管理页面添加一个标签页(Tab)。标签页就是后台“System->Configuration”页面左侧的导航栏。默 认的标签页有General,Catalog,Customers,Sales,Services等等。我们来创建一个新的标签页叫做“Hello Config”。创建如下文件
Location: app/code/local/Zhlmmc/Helloworld/etc/system.xml
<config>
<tabs>
<helloconfig translate="label" module="helloworld">
<label>Hello Config</label>
<sort_order>99999</sort_order>
</helloconfig>
</tabs>
</config>
我们来解释一下各个节点(Tag)的意思。【译者注:由于Tab和Tag中文翻译都是标签,所以这里我把Tag翻译成节点,以免混淆】 “<helloconfig>”就是我们要添加的标签页的定义节点,“helloconfig”是节点的ID。你可以任意命名这个ID,但是 必须全局唯一,也就是不能和别人用同样的ID。这个ID是用来唯一标示你的标签页的。“module=helloworld”,意思是这个标签页属于哪个 模块。“<label>”节点的内容是标签的名字,也就是要显示在界面上的名字。“<sort_order>”指明了这个标签页 显示的位置。
打开后台“System->Configuration”,你会看到如下错误
Fatal error: Class 'Mage_Helloworld_Helper_Data' not found in….
Magento Helper简介
正如许多其他的PHP MVC系统一样,Magento也有帮助类(Helper Classes)。这些类用来提供一些不适合放在模型,视图或者控制器中的功能。Magento的帮助类也是采用分组类名的机制。也就是说我们可以覆盖默 认的帮助类,同时我们需要在config.xml中指定帮助类的基类名。
Magento系统默认模块有一个默认的帮助类。正如我们上面的异常显示,我们的Helloworld模块并没有指定一个默认的帮助类。下面让我们来添加一个。修改config.xml
File: app/code/local/Zhlmmc/Helloworld/etc/config.xml
<!– … –>
<global>
<!– … –>
<helpers>
<helloworld>
<class>Zhlmmc_Helloworld_Helper</class>
</helloworld>
</helpers>
<!– … –>
</global>
<!– … –>
你现在应该对这类配置相当熟悉了。“<helloworld>”节点就是模块的名字,“<class>”就是帮助类的基类名,命名方式如下
Packagename_Modulename_Helper
帮助类是通过全局对象Mage的静态方法“helper”来装载的。
Mage::helper('helloworld/foo')
根据我们的配置,上面这行代码将会装载以下类
app/code/local/Zhlmmc/Helper/Foo.php
class Zhlmmc_Helloworld_Helper_Foo
我们上面说过Magento默认每个模块有一个帮助类“data”
Mage::helper('helloworld');
Mage::helper('helloworld/data');
上面这两行代码是等价的,都会装载以下类
app/code/local/Zhlmmc/Helper/Data.php
class Zhlmmc_Helloworld_Helper_Data
下面我们来创建我们的帮助类
File: app/code/local/Zhlmmc/Helper/Data.php
class Zhlmmc_Helloworld_Helper_Data extends Mage_Core_Helper_Abstract
{
}
清空Magento缓存,重新装载页面,你会发现错误不见了,但是我们的标签页还是没有出来。如果你好奇帮助类究竟能干什么,建议你去看看“Mage_Core_Helper_Abstract”类。
添加新的段
好了,帮助类的介绍到此结束。下面我们来看看为什么我们的标签页不显示出来。在Magento中,每一个标签页都包含很多段(section)。举 个例子,“Advanced”标签页默认包含“Admin, System, Advanced, Developer”四个段。如果一个标签页不包含任何段,那么这个标签页不会被显示出来。下面我们在system.xml中添加 “<section>”节点
Location: app/code/local/Zhlmmc/Helloworld/etc/system.xml
<config>
<tabs>
<helloconfig translate="label" module="helloworld">
<label>Hello Config</label>
<sort_order>99999</sort_order>
</helloconfig>
</tabs>
<sections>
<helloworld_options translate="label" module="helloworld">
<label>Hello World Config Options</label>
<tab>helloconfig</tab>
<frontend_type>text</frontend_type>
<sort_order>1000</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</helloworld_options>
</sections>
</config>
这里有些节点你应该很熟悉,就不多解释了,来讲讲以前没见过的。
什么是<helloworld_options />?
和前面的<hellowconfig>相似,这个节点是用来唯一标示你的段,“helloworld_options”就是段的ID,可以随意取名,只要不重复就好。
什么是<frontend_type />?
这个节点有点搞。“<frontend_type />”在配置文件的其他部分有用(稍后会讲),放在这里其实没什么作用。但是核心模块在此处的配置文件都包含这个节点,所以我们也把它添加进去。
什么是<show_in_default />,< show_in_website />,<show_in_store />?
这些节点的值是布尔类型的,0或者1。这些标签是用来控制在不同的环境下,当前段是否应该显示。
好了,我们已经配置好段了,清空缓存,再一次刷新页面,你应该看到“HELLO CONFIG”标签页显示出来了。
访问控制
如果你刚才点了我们创建的标签页下面的“Hello World Config Options”,你大概会很失望。什么都没有显示出来,连左边的导航栏都没有了。这是因为“Adminhtml”在权限控制列表(Access Control List, ACL)中找不到我们创建的段的权限信息。【译者注:Adminhtml就是Magento的后台管理系统,属于Magento的一个核心模块】
ACL是一个很复杂的话题,但是我会介绍一些最基本的概念,以便于理解Magento的权限控制。这部分内容和上下文关系不大,如果你不感兴趣,可以直接跳到本节结尾,复制一段XML到你的config.xml就行了。
在Magento中,对于有些资源的访问时有限制的。用户必须先经过认证才能访问相关资源。在这里,资源(Resource)是一个广义的概念,它可能是 指一个页面,也可能是一个功能。Magento的系统配置功能(System Config)就是需要认证才能访问的资源。
任何一个资源都是通过一个URI来标识。比如说“web”配置段(属于后台管理General标签页)的URI是
admin/system/config/web
我们“helloworld_options”段的URI是
admin/system/config/helloworld_options
当一个用户访问一个受保护的资源的时候,后台管理系统(Adminhtml)的执行控制器会执行以下步骤
1. 为用户正在访问的资源生成一个URI
2. 根据ACL系统检查该用户是否有权限访问指定的资源
3. 如果用户拥有访问权限,那么进行用户指定的操作。否则,跳转到相应的错误页面(也可能是停止操作或者显示空白页面)。
如果你去“System -> Permissions -> Roles”页面,点击“Add New Role”按钮,你会看到所有系统的资源都以树形结构显示在页面上。
添加ACL权限
刚才说ACL中没有我们配置段的信息,那么我们来创建一个。请注意,如果你是创建一个新的段,那么你需要创建一个新的权限,如果你在已有的段上添加内容,你不需要创建权限。
在config.xml中,添加以下内容
File: app/code/local/Zhlmmc/Helloworld/etc/config.xml
<config>
<!– … –>
<adminhtml>
<acl>
<resources>
<admin>
<children>
<system>
<children>
<config>
<children>
<helloworld_options>
<title>Store Hello World Module Section</title>
</helloworld_options>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</adminhtml>
<!– … –>
</config>
让我们来分析一下这段代码。所有的资源定义都包含在如下代码中
<adminhtml>
<acl>
<resources>
</resource>
</acl>
</adminhtml>
在<resources>节点下面,每一个子节点都是URI的一部分,比如
<admin>
<children>
<system>
<children>
代表URI
admin/system
最后一个节点
<helloworld_options>
<title>Store Hello World Module Section</title>
</helloworld_options>
这里<title>的内容将会在后台权限管理的时候显示出来,也就是我们定义的权限的名字。
清空Magento缓存,刷新页面,你应该能看到我们创建的配置段了,标准的后台管理页面,但是主体内容是空的,只有一个“Save Config”按钮。你可能需要重新登录后台管理才能看到正确的页面。那是因为后台管理有一些额外的缓存。【译者注:我们添加了权限以后,管理员是默认拥 有该权限的,所以我们用管理员登录后台管理系统就能访问我们创建的段】
请注意,不懂事出于什么原因,Magento把<adminhtml />部分从全局配置中删掉了。所以,我们不能用之前创建的Configviewer来查看这部分内容。我正在研究Magento把<adminhtml />存在哪里了。
添加组
【译者注:按照逻辑,这里应该讲的内容是添加选项。Mageto中,选项是按照组(Group)来划分的,所以我们在添加选项之前得先添加组。】修改system.xml
Location: app/code/local/Zhlmmc/Helloworld/etc/system.xml
<config>
<tabs>
<helloconfig translate="label" module="helloworld">
<label>Hello Config</label>
<sort_order>99999</sort_order>
</helloconfig>
</tabs>
<sections>
<helloworld_options translate="label" module="helloworld">
<label>Hello World Config Options</label>
<tab>helloconfig</tab>
<frontend_type>text</frontend_type>
<sort_order>1000</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<messages translate="label">
<label>Demo Of Config Fields</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</messages>
</groups>
</helloworld_options>
</sections>
</config>
这里也没什么好解释的。刷新一下页面看看你就什么都明白了。
添加配置选项
最后,我们要添加每一个单独的配置选项。配置选项是以<fields />节点的形式添加到<messages />节点下面的。
<!– … –>
<messages translate="label">
<label>Demo Of Config Fields</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<hello_message>
<label>Message</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</hello_message>
</fields>
</messages>
<!– … –>
这里有一个节点需要说明,“<frontend_type>”,刚才说这个节点没什么用。但是这里有用了,这个节点说明了这个选项的数据类 型。你可以把它换成别的类型,比如“time”。这里支持大部分默认的Varien定义的数据类型(lib/Varien/Data/Form /Element)。这个有点像是工厂(Factory)设计模式。让我们把类型改成“select”。你会看到一个下拉框,但是没有选项。我们来添加选 项。首先我们要添加一个源模型(Source Model)
<hello_message>
<label>Message</label>
<frontend_type>select</frontend_type>
<!– adding a source model –>
<source_model>helloworld/words</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</hello_message>
“<source_model>”定义了源模型的URI。和我们以前创建的模型一样,源模型也是一个模型,为“select”提供了默认的数据。我想我不说你也明白,根据这里的URI定义,我们要创建以下文件
File: app/code/local/Zhlmmc/Helloworld/Model/Words.php
class Zhlmmc_Helloworld_Model_Words
{
public function toOptionArray()
{
return array(
array('value'=>1, 'label'=>Mage::helper('helloworld')->__('Hello')),
array('value'=>2, 'label'=>Mage::helper('helloworld')->__('Goodbye')),
array('value'=>3, 'label'=>Mage::helper('helloworld')->__('Yes')),
array('value'=>4, 'label'=>Mage::helper('helloworld')->__('No')),
);
}
}
源模型提供了一个方法“toOptionsArray”,返回的数据时用来填充我们之前定义的配置选项的。这个方法在运行时会被“initFields”调用。“initFields”在以下类中定义
app/code/core/Mage/Adminhtml/Block/System/Config/Form.php
我们这里调用了帮助类的翻译函数(__)来获取数据。虽然不是很必要,但调用翻译函数总是一个好习惯。说不定哪天你要将模块翻译成日文呢。【译者注:值得 注意的是我们这里创建的模型不需要继承任何父类,只需要拥有“toOptionArray”方法就可以了。我觉得这个很不科学,起码要继承一个接口吧】
在已有的配置段或者组中添加数据
除了新建一个标签页,或者配置段,你也可以利用已有的标签页和配置段,向里面添加内容。比如我们添加以下代码到system.xml
File: app/code/local/Zhlmmc/Helloworld/etc/system.xml
<config>
<!– … –>
<sections>
<!– … –>
<general>
<groups>
<example>
<label>Example of Adding a Group</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</example>
</groups>
</general>
<!– … –>
</section>
</config>
刷新页面,你会在“General”标签页下面看到一个新的组,叫做“Example of Adding a Group”。
如何获得配置数据
到目前为止,我们只是讲了如何设置Magento,可以让用户可以配置我们的模块。现在让我们来看看如何获取用户的配置数据。
Mage::getStoreConfig('helloworld_options/messages/hello_message');
上面这行代码就可以获取我们上面配置的那个“select”选项的数据。这个函数的参数是我们要获取的数据的URI,格式如下
section_name/group_name/field_name
你也可以通过以下代码来获取一个组或者段的所有值
Mage::getStoreConfig('helloworld_options/messages');
Mage::getStoreConfig('helloworld_options');
最后,如果你想获取针对某个特定店面(store)的数据,你可以传入store ID
Mage::getStoreConfig('helloworld_options',1);
总结
这一章我们讲了如何在Magento的后台管理中添加个性化的配置。我们也顺便介绍了帮助类的使用和ACL基础。这里最重要的内容是后台配置的层级 结构,标签页包含了配置段,配置段包含了组,组包含了配置选项。我们将在以后的章节中介绍系统配置的高级内容,包括自定义格式,数据验证等等。
发表评论
-
magento,清空购物车中所有的产品和session
2013-01-23 14:03 2179在购物车中清除所有产品代码: foreach( Mage: ... -
magento布局文件formkey的作用
2013-01-17 16:02 3246magento表单提交时有个key,是如何引用进模板的: ... -
magento 添加 删除css js
2013-01-17 11:47 1339在addJs、addCss的代码一般在page/htm ... -
Magento中,调用静态块的几种方法
2013-01-11 15:46 3343在后台创建一个order_form静态块Block Ti ... -
Magento 后台配置中实现日期选择 (Date picker)
2013-01-10 17:33 1037首先,创建一个新的Form Field 类: <?php ... -
Magento Admin Form 表单元素大全
2013-01-10 17:30 2994开发Magento后台的时候经 ... -
Magento getModel getSingleton等常用函数详解
2012-12-28 11:41 652http://blog.csdn.net/huashenghn ... -
magento截取字符串
2012-12-05 14:19 1120<?php echo $this->html ... -
magento 发邮件机制
2012-12-03 14:02 704http://koda.iteye.com/blog/6236 ... -
Magento获取Zend_Db_Select对象中的SQL语句
2012-11-28 15:59 909app/code/core/Mage/Catalog/M ... -
在Magento的注册流程中增加职业字段
2012-11-27 15:54 710http://blog.chinaunix.net/uid-4 ... -
Magento获取当前页面URL地址
2012-11-19 14:37 1353$currentUrl = $this->help ... -
Magento 通过xxAction改变模板
2012-11-13 13:37 667$this->loadLayout(); $th ... -
magento 资料总结(myjavawork)
2012-11-09 16:02 756http://www.cnblogs.com/myjavawo ... -
magento model sql
2012-11-07 18:06 683$sql = "CALL xxxxxx('{$ ... -
安装插件之后Magento后台404的解决办法
2012-10-26 18:46 1316导致该问题的原因是Magento预读了所有的后台Layo ... -
Magento: Very Useful Collection Functions
2012-10-25 16:31 804There are different importan ... -
magento 取URL常用方法
2012-10-19 15:13 5001To Retrieve URL path in STAT ... -
如何在magento模板文件中获取controller名称,action名称和module name
2012-10-19 13:47 2318/** * get Controller name ... -
Magento中为Block启用Cache方法
2012-09-02 00:54 1109在Block类的_construct(不是构造方法)方法 ...
相关推荐
深入理解Magento-第八章 – 深入自定义Magento系统配置(未完成) 深入理解Magento-第九章 – 修改、扩展、重写Magento代码 深入理解Magento-第十章 – 数据操作&数据收集器 在Magento教程中用到的模块 ...
Magento的后台菜单主要由` Mage_Adminhtml_Block_Menu`类控制,它通过遍历系统配置中的`adminhtml/menu`节点来生成菜单。每个菜单项都是一个XML节点,例如: ```xml 自定义模块 <sort_order>100 自定义...
然而,原生的Magento系统并未提供直接在后台预览商品前端展示效果的功能。这篇博客“Magento:后台添加预览按钮 View product in frontend from Magento admin”主要探讨了如何通过自定义开发来实现这一功能,让管理...
- Magento后台的菜单和页面是由系统配置和布局XML文件控制的。你需要在相关XML文件中注册新的Grid,指定其Block类和对应的Controller Action。 7. **控制器Action**: - 控制器接收用户的请求并调用相应的Block来...
在Magento中,自定义菜单插件对于优化用户界面和提升用户体验至关重要。本插件专为实现更灵活、层次分明的菜单设计而开发,允许商家根据自身需求自由调整菜单结构。 自定义菜单插件的核心功能包括: 1. **显示行和...
这个文件会告诉Magento系统新模块的存在和版本信息。 7. **配置文件(Config.xml)**:配置文件定义了模块的依赖、前缀、菜单项和其他设置。在这里,你可以定义后台管理菜单的位置,以及与控制器和模型相关的路由。...
在Magento中添加后台管理功能是开发者经常遇到的任务,这涉及到对系统后端界面的扩展和定制,以便更好地管理和控制商店的各项功能。以下是对“Magento添加后台管理”这一主题的详细讲解。 1. **理解Magento架构** ...
5. **部署与激活**:最后,记得清除Magento的缓存,运行安装和升级SQL脚本(如果有的话),并在后台的系统配置中启用你的模块。 通过以上步骤,你就能实现Magento 1中的自定义登录、注销和新账户创建后的重定向功能...
### Magento深入理解——强大配置系统解析 #### 一、引言 Magento是一款极其灵活且功能丰富的电子商务平台,其核心竞争力之一在于其强大的配置系统。这一系统不仅为开发者提供了极高的定制化能力,还确保了平台的...
Magento 后台操作日志(Enterprise Logging) 是一个专门针对Magento电子商务平台的高级日志功能。这个插件的目的是为了增强系统的透明度和安全性,使管理员能够详细追踪和记录后台的所有管理活动。以下是对该插件及其...
"magento汉化包完全版"意味着这个压缩包包含了Magento系统的所有中文翻译资源,使得国内用户能够更加方便地理解和操作这个平台,消除语言障碍,提升使用体验。 Magento的核心功能包括但不限于: 1. **多店铺管理**...
7. **自定义系统配置**:指导如何创建和管理 Magento 后台的自定义配置选项。 8. **代码修改、扩展和重写**:教你如何不改变核心代码的情况下扩展或替换 Magento 功能。 9. **数据操作和数据收集器**:涉及数据的...
这通常涉及将Magmi文件解压到Magento的`app/code/local`或`app/code/community`目录下,然后在Magento后台的“系统”>“Magento连接”>“Magento连接管理器”中刷新缓存和 Mage registry,以便系统识别新添加的插件...
在Magento平台进行二次开发时,创建自定义后台模块是一项常见需求。这不仅可以扩展系统的功能,还能根据业务特定需求定制管理界面。本文将详细介绍如何从零开始构建一个Magento后台模块,包括模块的声明、控制器的...
这份"Magento中文手册"是针对中国用户精心编译的,旨在帮助初学者和经验丰富的开发者更好地理解和操作Magento系统。 一、Magento概述 Magento是基于PHP开发的电子商务解决方案,由Magento Inc.公司创建。它以其灵活...
6. **后台功能和表单元素**:Magento的后台管理界面允许管理员配置商店的各种设置。`后台功能列表.mmap`和`后台表单元素.txt`可能包含了关于如何创建和自定义后台功能及表单元素的信息。 7. **运行流程**:`运行...
7. **自定义系统配置**:Magento 允许开发者创建自定义的后台配置选项,以便商店管理员可以调整系统的特定行为。 8. **修改、扩展、重写**:Magento 的核心代码可以通过扩展和重写机制进行定制,以避免直接修改核心...
#### 一、Magento的配置系统 **1.1 设置组件的目录结构** Magento的配置系统是其核心组成部分之一,通过一套复杂的机制管理着系统的各个部分,包括模块、模型、类、模板等。配置系统的核心在于能够通过配置文件的...