首先先找到 <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" > <action method="addTab" translate="title" module="catalog"><alias>description</alias><title>Product Description</title><block>catalog/product_view_description</block><template>catalog/product/view/description.phtml</template></action> <action method="addTab" translate="title" module="catalog"><alias>additional</alias><title>Additional Information</title><block>catalog/product_view_attributes</block><template>catalog/product/view/attributes.phtml</template></action> <block type="review/form" name="product.review.form" as="review_form"> <block type="page/html_wrapper" name="product.review.form.fields.before" as="form_fields_before"> <action method="setMayBeInvisible"><value>1</value></action> </block> </block> </block> </block> 替换为 <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" > <action method="addTab" translate="title" module="catalog"><alias>description</alias><title>Product Description</title><block>catalog/product_view_description</block><template>catalog/product/view/description.phtml</template></action> <action method="addTab" translate="title" module="catalog"><alias>additional</alias><title>Additional Information</title><block>catalog/product_view_attributes</block><template>catalog/product/view/attributes.phtml</template></action> <block type="review/product_view_list" name="product.info.product_additional_data" as="product_review" template="review/product/view/list.phtml"> <block type="review/form" [...]
Tag: Lamp
APMXE&MAGENTO 1.4.1.1 集成包(本来觉得这个东西没什么用不想更新,但是居然有人加我QQ找我要,就再放一次) **************************************************** 版本说明(感谢起源科技制 作的APMXE): # Apache 2.2(完整) # PHP 5.2.9–2(完整) # XCache 2.0.4 # MySQL 5.0(服务端和命令行工具) # phpMyAdmin 3.2 # Magento 1.4.1.1 (集成后台中文语言包) **************************************************** MySQL 默认账号密码:root magento后台地址 http://127.0.0.1/magento/index.php/admin magento后台账号:magentochina密码:1q2w3e4r5t **************************************************** 解压缩后运行apmxe.exe by jidda QQ:23363038 MSN:jidda@live.cn http://www.magentochina.org Windows 7 64bit, Windows xp sp3 32bit 测试通过 注意事项: 1.APACHE默认端口80,请确保安装时系统80端口未被占用(如迅雷) 2.mysql默认端口3306 3.如要卸载,请先把apache和mysql服务停止,直接删除文件夹即可 4.安装包直接用的好压haozip制作,安装完成后会出现假死,不用理会,直接关闭即可 4.apache,php,mysql的配置文件在/etc目录中,修改template文件即可%APMXE%为apmxe.exe所在目录的位置变量 QQ文件中转站下载 提取码(2d001275) 115网络U盘下载
function getContents() { var request_url = “test1.html”; // 需要获取内容的url var request_pars = ”;//请求参数 var myAjax = new Ajax.Updater(‘result’, request_url,{ // 将request_url返回内容绑定到id为result的容器中 method : ‘get’, //HTTP请求的方法,get or post parameters : request_pars, //请求参数 onFailure : reportError, //失败的时候调用 reportError 函数 onLoading : loading, //正在获得内容的时候 onComplete : done //内容获取完毕的时候 }); } function loading() { $(‘loading’).style.display = ‘block’; } function [...]
js数组去重就是把数组中重复的元素去掉:
Array.prototype.delRepeat=function(){
var newArray=new Array();
var len=this.length;
for (var i=0;i
for(var j=i+1;j
if(this[i]===this[j]){
j=++i;
}
}
newArray.push(this[i]);
}
return newArray;
…
在写插件时,有的用户安装magento时设置了表的前缀,而有的用户没有,如果直接把表名写死在那,是不正确的。 magento提供了获取表名的的一个方法: $tableName = Mage::getSingleton(‘core/resource’)->getTableName(‘默认表名’);
解决magento contact us无法发送问题 需要修改的文件 /app/design/frontend/base/default/template/contacts/form.phtml 查找一下代码 <div class="buttons-set"> <p class="required"><?php echo Mage::helper(‘contacts’)->__(‘* Required Fields’) ?></p><input type="image" src="<?php echo $this->getSkinUrl(‘images/btn_submit.gif’);?>"alt="<?php echo Mage::helper(‘contacts’)->__(‘Submit’) ?>"/></div> 替换成 <div class="buttons-set"> <p class="required"><?php echo Mage::helper(‘contacts’)->__(‘* Required Fields’) ?></p><input type="text" name="hideit" id="hideit" value="" style="display:none !important;"/><button type="submit" title="<?php echo Mage::helper(‘contacts’)->__(‘Submit’) ?>"class="button"><span><span><?php echo Mage::helper(‘contacts’)->__(‘Submit’) ?></span></span></button> </div> ————–另类问题—–一下几点是收集的看看有没有对大家有帮助————— magento的contact us是一个非常重要的一个功能,当在线客服不在时,客户可以通过contact us发送邮件来联系我们。问题是,总是会出来这样或者那样的问题导致magento下面的这个功能无法使用。 我这边要说明的是一种非常特殊的情况引起的这个问题。但是我在magento论坛上搜索了,碰到的更多的是其它的状况,一起记录一下。 Unable to submit [...]
作者:Alan Storm 翻译:Hailong Zhang 第四章 – 模型和ORM基础 对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分。对于Magento来说,模型占据了一个更加重要的位置,因为它常常包含了一部分商业逻辑代码(可以说它对,也可以说它错)。这些代码在其他的MVC框架中往往出现在控制器或者帮助函数中。 传统的PHP MVC架构中的模型 本来MVC的定义就不是很清晰,不同的人有不同的看法,而对于模型的定义争议就更多了。在MVC模式被广泛采用之前,PHP程序员往往通过SQL语句直接操作数据库。也有些程序员通过一个SQL抽象层来操作数据库(比如AdoDB)。程序员往往关注SQL语句本身,而不是和数据相关的对象。 虽然直接操作SQL的方式一直被病诟,但是很多PHP框架还是以SQL为中心的。模型层提供了一系列对象,抽象/封装了数据操作,但是程序员最终还是需为模型层对象写SQL语句操作数据库。 还有一些框架回避了SQL,使用了对象关系映射(Object Relational Mapping,ORM)来解决这个问题。使用这个方法的话,程序员不用关注SQL,而只需要和对象打交道。我们可以操作一个对象的属性,当“Save”方法被调用的时候,对象的属性会作为数据自动的被写入数据库。有些ORM框架会根据数据表的信息自动推测对象的属性,也有框架要求用户显示的生命对象属性和表的关系。比较有名的ORM框架有ActiveRecord等等。【译者注:ActiveRecord源自Ruby on Rails,不过现在PHP也有了】 关于ORM的概念,我就解释到这里。但是和许多计算机领域的其他概念一样,ORM的定义也越来越模糊了。我不想在这片文章中讨论关于ORM的争议,所以我说的ORM就是那个最基本的ORM概念。 Magento的模型 Magento理所当然的也追随潮流应用了ORM。虽然Magento自带的Zend框架提供了SQL抽象层,但是在大多数情况下我们将通过Magento自带的模型和我们自己的模型来进行数据访问。他和视图层(View)一样,Magento的模型层也不是简单的ORM,而是一个高度灵活,高度抽象甚至有点令人费解。 解剖Magento的模型 大部分的Magento模型分为两类。第一类是基本的ActiveRecord类型,一张表一个对象的模型。第二类是Entity Attribute Value(EAV)模型。【译者注:EAV翻译成“实体属性值”有点词不达意,还是就叫EAV的好】Magento自己定义了一个数据类型叫做模型集合(Model Collection)。顾名思义,模型集合就是一个对象里面包含了很多模型对象。Magento的创造者Varien团队实现了PHP类库的标准接口,“IteratorAggregate”,“Countable”。这样模型集合就能调用这些方法,这也是模型集合和数组的区别。 Magento的模型并不直接访问数据库。每一个模型都有一个资源模型(Resource Model),每一个资源模型拥有两个适配器(Adapter),一个读,一个写。这样的话逻辑模型和数据库访问就分开了,所以从理论上讲更改底层数据库只需要重写适配器就可以了,所有上层代码都不需要更改。 创建一个基本模型 【译者注:从这一章开始我用我自己的例子替换了Alan的例子】继续我们Hello World的例子。在Hello World模块中创建BlogController.php如下 class Zhlmmc_Helloworld_BlogController extends Mage_Core_Controller_Front_Action { public function indexAction() { echo ‘Hello Blog’; } } 访问以下URL http://127.0.0.1/Magento/helloworld/blog 你应该看到“Hello Blog”输出。 创建数据表 我们可以通过Magento自带的方法创建或者修改数据库,但是为了不引入过多新内容,我们暂且手工创建一张表。在你的数据库中执行以下语句 CREATE TABLE `blog_posts` ( [...]
作者:Alan Storm 翻译:Hailong Zhang 第三章 – 布局,块和模板 我们接着研究Magento。根据我们第二章讲的Magento MVC的架构,我们接下来应该讲模型(Model),但是我们跳过模型先来看布局和块。和一些流行的PHP MVC架构不同的是,Magento的执行控制器不直接将数据传给试图,相反的视图将直接引用模型,从模型取数据。这样的设计就导致了视图被拆分成两部分,块(Block)和模板(Template)。块是PHP对象,而模板是原始PHP文件,混合了XHTML和PHP代码(也就是把PHP作为模板语言来使用了)。每一个块都和一个唯一的模板文件绑定。在模板文件phtml中,“$this”就是指该模板文件对应的快对象。 让我们来看一个例子 File: app/design/frontend/base/default/template/catalog/product/list.phtml 你将看到如下代码 <?php $_productCollection=$this->getLoadedProductCollection() ?> <?php if(!$_productCollection->count()): ?> <p class="note-msg"><?php echo $this->__(‘There are no products matching the selection.’) ?></p> <?php else: ?> 这里“getLoadedProductCollection”方法可以在这个模板的块对象“Mage_Catalog_Block_Product_List”中找到 File: app/code/core/Mage/Catalog/Block/Product/List.php … public function getLoadedProductCollection() { return $this->_getProductCollection(); } … 块的“_getProductCollection”方法会实例化模型,并读取数据然后返回给模板。 嵌套块 Magento把视图分离成块和模板的真正强大之处在于“getChildHtml”方法。这个方法可以让你实现在块中嵌套块的功能。顶层的块调用第二层的块,然后是第三层……这就是Magento如何输出HTML的。让我们来看一下单列的顶层模板 File: app/design/frontend/base/default/template/page/1column.phtml <!DOCTYPE html PUBLIC "-//W3C//DTD [...]
作者:Alan Storm 翻译:Hailong Zhang 第二章 – Magento请求分发与控制器 Model-View-Controller (MVC) ,模型-视图-控制器,源于Smalltalk编程语言和Xerox Parc。现在有很多系统是基于MVC架构的,不同的系统MVC的实现也略有不同,但都体现了MVC的精髓,分离数据,业务逻辑和显示逻辑。最常见的PHP MVC框架是这样的 URL请求被一个PHP文件拦截,通常称为前端控制器(Front Controller) 这个PHP文件分析这个URL,获得一个执行控制器(Action Controller)的名字和一个执行方法(Action Method)的名字,这个过程通常称为路由(Routing) 实例化#2获得的执行控制器 调用执行控制器的执行方法 执行方法中处理业务逻辑,比如获取数据 执行控制器负责把数据传递给显示逻辑 显示逻辑生成HTML 这个架构相对于传统的“每个php都是一个页面”来讲已经是一个巨大的飞跃,但还是有人抱怨【译者注: CodeIgniter就是这样一个MVC框架】 前端控制器仍然以全局的方式运行 基于配置的惯例导致了系统不够模块化 URL Routing不够灵活 控制器往往和视图绑定 更改默认设置往往导致大量的重构 Magento创造了一个更抽象的MVC来解决上述问题。 URL请求被一个PHP拦截 这个PHP文件实例化一个Magento对象 Magento对象实例化前端控制器 前端控制器实例化全局配置中指定的路由对象,可以是多个 路由对象会逐个与请求URL匹配 如果发现匹配,那么可以获得一个执行控制器和一个执行方法的名字 实例化#6获得的执行控制器,并调用相应的执行方法 执行方法中处理业务逻辑,模型数据 控制器实例化布局对象(Layout) 布局对象根据请求的参数,系统配置创建一个块对象(Block)列表,并实例化 布局对象会调用块对象的output方法生成HTML。这是一个递归的过程,因为块对象可以嵌套块对象 每一个块对象都和一个模板文件(Template File)对应。块对象包含了显示逻辑,模板文件包含了HTML和PHP输出代码 块对象直接从模型那里获得数据,换句话说,在Magento的MVC架构中,控制器并不直接把数据传给视图 这里很复杂,我们以后会详细解释每一个部分。我们先关注“前端控制器->路由对象->执行控制器”部分。 Hello World示例 我们讲了太多理论,现在让我们来实践一下,通过实践来加深理解。下面是我们将要做的事情 创建一个Hello World模块 为这个模块配置路由 为这个模块创建执行控制器 创建Hello World模块 首先,我们要创建一个模块的目录结构,这个我们以前已经做过了,就不再熬述 [...]
作者:Alan Storm 翻译:Hailong Zhang 第一章 – Magento强大的配置系统 Magento的配置系统就像是Magento的心脏,支撑着Magento的运行。这套配置系统掌管着几乎所有“module/model/class/template/etc”。它把整个Magento系统抽象出来,用一个配置文件来描述。这里的“配置文件”并不是一个物理上存在的文件,而是Magento根据当前的系统状态动态生成的一段XML。大多数的PHP开发者并不习惯于这样抽象层,因为它增加的编程的复杂性。但是这样的抽象提供了无与伦比的灵活性,允许你覆盖几乎任何系统的默认行为。 首先,让我们写一个简单的插件来看看这个所谓的“配置文件”长什么样。虽然我已经提供的现成的代码,但是还是建议你自己建立这个插件,把整个流程走一遍有助于你的理解。 设置插件的目录结构 我们将要创建一个Magento的模块【译者注: Magento的插件不叫plug-in,叫module,翻译成模块】。Magento的模块由php和xml文件组成,目的是扩展或者覆盖系统的行为,比如为订单增加数据模型,更改一个类的方法,或者增加一个全新的功能。【译者注:Magento自带的那些功能也都是基于模块的,比如用户注册,商品展示,结账流程等等。Magento给我的感觉就是一切皆模块,和Eclipse的插件体系结构有点像】 大多数Magento的系统模块的结构和我们将要构建的插件的结构是一样的。Magento的系统模块在以下目录 app/code/core/Mage 每一个子目录都是一个单独的模块。这些模块是由Magento官方开发的。我们安装完Magento以后,所使用的功能就是来自这些模块。我们自己创建的模块应该放在如下目录 app/code/local/Packagename “Packagename”应该是一个唯一的字符串,用来标识你的代码。通常人们使用公司名字作为Packagename,比如 app/code/local/Microsoft 由于我在做我自己的Magento项目,我将使用我自己的域名“Alanstormdotcom”。 然后,我们要创建以下目录结构 app/code/local/Alanstormdotcom/Configviewer/Block app/code/local/Alanstormdotcom/Configviewer/controllers app/code/local/Alanstormdotcom/Configviewer/etc app/code/local/Alanstormdotcom/Configviewer/Helper app/code/local/Alanstormdotcom/Configviewer/Model app/code/local/Alanstormdotcom/Configviewer/sql 你的插件并不一定需要包含以上所有的目录,但是为了以后开发方便,我们还是在一开始就把目录创建好。接下来我们要创建两个文件,一个是config.xml,放在etc目录下面 app/code/local/Alanstormdotcom/Configviewer/etc/config.xml 文件内容如下 <config> <modules> <Alanstormdotcom_Configviewer> <version>0.1.0</version> </Alanstormdotcom_Configviewer> </modules> </config> 第二个文件需要在如下位置创建 app/etc/modules/Alanstormdotcom_Configviewer.xml 第二个文件应该遵循如下命名规则“Packagename_Modulename.xml”,文件内容如下 <config> <modules> <Alanstormdotcom_Configviewer> <active>true</active> <codePool>local</codePool> </Alanstormdotcom_Configviewer> </modules> </config> 我们先不管这些文件是干什么的,以后会解释。建立好这两个文件以后,你的模块的骨架就已经完成了。Magento已经知道你的模块存在,但是现在你的模块不会做任何事情。我们来确认一下Magento确实装载了你的模块 清空Magento缓存 在后台管理界面,进入 System->Configuration->Advanced 展开“Disable Modules Output” 确认“Alanstormdotcom_Configviewer”显示出来了 [...]
