Magento入门:
一、简介: magento 是这个星球上最强大的购物车网站平台,当然,你应该已经对此毫无疑问了,不过,你可能不知道,mangento 同样是一个面向对象的php框架,你可以配合magento 购物车强大的功能,开发动态的web应用程序。
二、 在开始学习之前,我们来了解一下magento mvc的流程图。
统一入口进入之后 url Request--> system 在这个底层 调用相应的modules 已经你配置 config----->程序继续运行-->程序将进入controller 里面的某个 Action---->程序进行运行进入 Application 找到相应的帮助 helpers,如果要查询数据库--将进入models---> 然后对数据库进行操作--->将数据返回给view层---->在视图层中首先是layout布局----->布局下面是页面数据块 block----最后程序组合后输出html完整页面。
三、magento模块中代码组织形式:
magento将代码独立进行封装一个一个的模块,在一个典型的mvc应用中,所有的的控制器都会被放在一个文件夹中 applications,所有的模型都会放在models 中,但是magento的做法是,按照功能来对文件进行封装分组,这种分组后的代码叫模块。
比如:你想找到故意付款功能的代码:
app/code/core/Mage/checkout 在这个目录下面有付款功能所需要的所有控制器、模型、助手、blocks等
四、认识magento的mvc:
4.1 配置 config.xml
magento 是一个配置性的mvc,按照一定的约定,来创建你的控制器、模型并且只需要安装这个约定的内容来创建你的文件,系统会自动的识别。 在magento中每个模块都一个一个config.xml文件,在这个文件中需要描述该模块所有的配置信息,程序运行时所有模块的配置文件都会被加载到一个巨大的配置文件树中。
比如: 你想在某个模块中使用某个模型:
<models>
<packagename>
<class>packageName_moduleName_model</class> 那个包下面的那么模型目录下面的那个模型类
</packagename>
这种配置不仅限于模型,对于控制器,助手,blocks,路由,等都需要在模块下面的config.xml中进行配置
4.1 控制器 controller
在任何的php的系统中核心文件肯定是php文件,magento也不例外,index.php就是magento的核心文件,注意:index.php 永远不要去修改它。
在index.php 中大概包含如下几个部分的内容:
1- 检测url 地址
2- 根据路由规则,将访问的url 地址分发到控制中的方法中
3- 初始化控制器, 并调用相应的动作,这个步骤叫分发 dispatching
4.1.1 我们来看url的组成构建:
http://127.0.0.1/module/controller/Action/id/25
那么magento 会找到 module 模块目录下面的controller 控制器类类文件里面的Action动作
比如: http://127.0.0.1/catalog/category/index/id/25
上面的url 对应的项目文件地址: app/code/core/mage/catalog/controllers/cateoryControler.php/
那么它的类文件格式是
class Mage_Catelog_categoryController extends Mage_core_Controller_front_Action{
// 在magento 中所有的控制器都继承来自育 Mage_core_controller_front_Action类
public function indexAction() {
echo $_GET['id']; //输出结果: 25
// id/25 在magento 中规定任何位于action 之后的参数都会被认为key/value形式传递get变量
}
}
如果你想让自定义模块使用控制器,那么你就必须对它进行配置
<frontend> 前端配置标签
<routers> 路由标签
<catalog> 模块名称下面的配置
<use>standard</use>
<args>
<module>Mage_Catalog</module> 链接到那个模块
<frontName>catalog</frontName> 模块的名称
</args>
</catalog>
</routers>
</frontend>
4.2 在程序中uri 模型读取
到目前为止,我们已经建立了一个控制器以及方法,那么下面我们该做点啥呢? 哦! magento 为我们提供了一种特殊的方式去实例化模型、助手、以及blocks. magento提供全局静态调用工厂方法
比如: 调用模型 Mage::getModel('catalog/product');
调用助手 Mage::helper('catalog/product');
注意: 在这里参数中的第一个为模块,第二个参数为该模块中的那个类被调用
按照magento 的规则: 将调用 Mage_catalog 开头的文件
如果是getModel 就是调用 Mage_catalog_Model_product
如果是helper 就是调用 Mage_catalog_Helper_product
5. magento 的模型
5.1 magento和大多数框架一样,magento也提供ORM支持。ORM能让你专注于数据,而非无尽的sql语句。
比如:
$model=mage::getModel("catalog/product")->load($_GET['id']);
$price= $model->getPrice(); // 获取价格
$price+=5; //计算新的价格
$model->setPrice($price)->setSku('sk123456');
$model->save();
在上面的案例中,我们调用了 getprice() setPrice()方法, 我们查看源代码Mage_catalog_model_product类中没有此方法,那么我们为什么可以使用呢?因为magento 使用了php的_get 和_set 魔法方法,当我们调用$product->getPrice() 时系统会自动获取属性price,当我们调用setPrice()的时候会设置price属性,当然,所有的这些都假设模型类没有getPrice和setPrice方法。
如果你想获取模型当中所有的数据,可以直接调用$product->getData()方法,它会返回包含所有字段的一个数组。
5.2 Magento的ORM系统中还包含一种通过Collections接口查询多个对象的方式。下例会读取系统中所有5美元的产品。
$product_collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('price','5.00');
循环得出数据
foreach($products_collection as $product){
echo $product->getName();
}
在上面的一个例子当中,你可能注意到了addAttributeToSelect方法。这里单独提到此方法,是因为它代表了Magento模型中的一个类别。Magento拥有两种形式的模型对象。一种是传统的“一个对象,一张表”的Active Record模型。当你实例化这些模型的时候,所有的属性都会被自动选取
Magento中第二种模型叫做Entity Attribute Value(EAV)模型。所有你可以使用addAttributeToSelect来制定你想获取的列,或者使用addAttributeToSelect(*)来获取所有列。
6. magento 的助手
Magento的助手类包含一系列实用的方法,通过这些方法可以对对象及变量做日常性的操作
$helper = Mage::helper('catalog');
是否注意到这里舍弃了Grouped Class Name的第二部分?代表模块(控制器的类)每个模块都有一个默认的data助手类。下面的语句与上面的作用是相同的,即默认使用模块下的data助手类
$helper = Mage::helper('catalog/data');
大部分的助手类继承自Mage_Core_Helper_Abstract,默认提供了很多使用的方法。
$translated_output = $helper->__('Magento is Great');
if ($helper->isModuleOutputEnabled()) {
}
7、Magento Layout 布局
http://www.ruiwant.com/magento-for-dev-part-1-introduction-to-magento.html
一、简介: magento 是这个星球上最强大的购物车网站平台,当然,你应该已经对此毫无疑问了,不过,你可能不知道,mangento 同样是一个面向对象的php框架,你可以配合magento 购物车强大的功能,开发动态的web应用程序。
二、 在开始学习之前,我们来了解一下magento mvc的流程图。
统一入口进入之后 url Request--> system 在这个底层 调用相应的modules 已经你配置 config----->程序继续运行-->程序将进入controller 里面的某个 Action---->程序进行运行进入 Application 找到相应的帮助 helpers,如果要查询数据库--将进入models---> 然后对数据库进行操作--->将数据返回给view层---->在视图层中首先是layout布局----->布局下面是页面数据块 block----最后程序组合后输出html完整页面。
三、magento模块中代码组织形式:
magento将代码独立进行封装一个一个的模块,在一个典型的mvc应用中,所有的的控制器都会被放在一个文件夹中 applications,所有的模型都会放在models 中,但是magento的做法是,按照功能来对文件进行封装分组,这种分组后的代码叫模块。
比如:你想找到故意付款功能的代码:
app/code/core/Mage/checkout 在这个目录下面有付款功能所需要的所有控制器、模型、助手、blocks等
四、认识magento的mvc:
4.1 配置 config.xml
magento 是一个配置性的mvc,按照一定的约定,来创建你的控制器、模型并且只需要安装这个约定的内容来创建你的文件,系统会自动的识别。 在magento中每个模块都一个一个config.xml文件,在这个文件中需要描述该模块所有的配置信息,程序运行时所有模块的配置文件都会被加载到一个巨大的配置文件树中。
比如: 你想在某个模块中使用某个模型:
<models>
<packagename>
<class>packageName_moduleName_model</class> 那个包下面的那么模型目录下面的那个模型类
</packagename>
这种配置不仅限于模型,对于控制器,助手,blocks,路由,等都需要在模块下面的config.xml中进行配置
4.1 控制器 controller
在任何的php的系统中核心文件肯定是php文件,magento也不例外,index.php就是magento的核心文件,注意:index.php 永远不要去修改它。
在index.php 中大概包含如下几个部分的内容:
1- 检测url 地址
2- 根据路由规则,将访问的url 地址分发到控制中的方法中
3- 初始化控制器, 并调用相应的动作,这个步骤叫分发 dispatching
4.1.1 我们来看url的组成构建:
http://127.0.0.1/module/controller/Action/id/25
那么magento 会找到 module 模块目录下面的controller 控制器类类文件里面的Action动作
比如: http://127.0.0.1/catalog/category/index/id/25
上面的url 对应的项目文件地址: app/code/core/mage/catalog/controllers/cateoryControler.php/
那么它的类文件格式是
class Mage_Catelog_categoryController extends Mage_core_Controller_front_Action{
// 在magento 中所有的控制器都继承来自育 Mage_core_controller_front_Action类
public function indexAction() {
echo $_GET['id']; //输出结果: 25
// id/25 在magento 中规定任何位于action 之后的参数都会被认为key/value形式传递get变量
}
}
如果你想让自定义模块使用控制器,那么你就必须对它进行配置
<frontend> 前端配置标签
<routers> 路由标签
<catalog> 模块名称下面的配置
<use>standard</use>
<args>
<module>Mage_Catalog</module> 链接到那个模块
<frontName>catalog</frontName> 模块的名称
</args>
</catalog>
</routers>
</frontend>
4.2 在程序中uri 模型读取
到目前为止,我们已经建立了一个控制器以及方法,那么下面我们该做点啥呢? 哦! magento 为我们提供了一种特殊的方式去实例化模型、助手、以及blocks. magento提供全局静态调用工厂方法
比如: 调用模型 Mage::getModel('catalog/product');
调用助手 Mage::helper('catalog/product');
注意: 在这里参数中的第一个为模块,第二个参数为该模块中的那个类被调用
按照magento 的规则: 将调用 Mage_catalog 开头的文件
如果是getModel 就是调用 Mage_catalog_Model_product
如果是helper 就是调用 Mage_catalog_Helper_product
5. magento 的模型
5.1 magento和大多数框架一样,magento也提供ORM支持。ORM能让你专注于数据,而非无尽的sql语句。
比如:
$model=mage::getModel("catalog/product")->load($_GET['id']);
$price= $model->getPrice(); // 获取价格
$price+=5; //计算新的价格
$model->setPrice($price)->setSku('sk123456');
$model->save();
在上面的案例中,我们调用了 getprice() setPrice()方法, 我们查看源代码Mage_catalog_model_product类中没有此方法,那么我们为什么可以使用呢?因为magento 使用了php的_get 和_set 魔法方法,当我们调用$product->getPrice() 时系统会自动获取属性price,当我们调用setPrice()的时候会设置price属性,当然,所有的这些都假设模型类没有getPrice和setPrice方法。
如果你想获取模型当中所有的数据,可以直接调用$product->getData()方法,它会返回包含所有字段的一个数组。
5.2 Magento的ORM系统中还包含一种通过Collections接口查询多个对象的方式。下例会读取系统中所有5美元的产品。
$product_collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('price','5.00');
循环得出数据
foreach($products_collection as $product){
echo $product->getName();
}
在上面的一个例子当中,你可能注意到了addAttributeToSelect方法。这里单独提到此方法,是因为它代表了Magento模型中的一个类别。Magento拥有两种形式的模型对象。一种是传统的“一个对象,一张表”的Active Record模型。当你实例化这些模型的时候,所有的属性都会被自动选取
Magento中第二种模型叫做Entity Attribute Value(EAV)模型。所有你可以使用addAttributeToSelect来制定你想获取的列,或者使用addAttributeToSelect(*)来获取所有列。
6. magento 的助手
Magento的助手类包含一系列实用的方法,通过这些方法可以对对象及变量做日常性的操作
$helper = Mage::helper('catalog');
是否注意到这里舍弃了Grouped Class Name的第二部分?代表模块(控制器的类)每个模块都有一个默认的data助手类。下面的语句与上面的作用是相同的,即默认使用模块下的data助手类
$helper = Mage::helper('catalog/data');
大部分的助手类继承自Mage_Core_Helper_Abstract,默认提供了很多使用的方法。
$translated_output = $helper->__('Magento is Great');
if ($helper->isModuleOutputEnabled()) {
}
7、Magento Layout 布局
http://www.ruiwant.com/magento-for-dev-part-1-introduction-to-magento.html