magento常用的函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
magento常⽤的函数
1.Magento eav_attribute表中source如何指定⾃定义数据来源
如果你引⽤的类名为yebihai_usermanage_model_entity_school你必须完整的给出地址,不能usermanage/entity_school,这样默认是在Mage下⾯去找的。
如:
$setup->addAttribute('customer', 'school', array(
'type' => 'int',
'input' => 'select',
'label' => 'School',
'global' => 1,
'visible' => 1,
'required' => 0,
'user_defined' => 1,
'default' => '0',
'visible_on_front' => 1,
'source'=> 'yebihai_usermanage_model_entity_school', //数据来源,text留空即可
));
2.Magento getPrice()的结果⼩数点位数的处理
echo Mage::helper('core')->currency($_product->getPrice());
输出格式:888.673 => 888.67
3.Magento config.xml中global节点中的block重写与blocks下⾯的命名标签必须⼩写,如:
<global>
<!-- st 重写Block配置 -->
<blocks>
<catalog>
<rewrite>
<!-- 标签符号⼤⼩写敏感,category_view必须⼩写 -->
<category_view>Yebihai_CategoryList_Block_Category_View</category_view>
</rewrite>
</catalog>
</blocks>
<!-- end 重写Block配置 -->
<blocks>
<!-- categorylist只能⽤⼩写 -->
<categorylist>
<class>Yebihai_CategoryList_Block</class>
</categorylist>
</blocks>
</global>
4.Magento获取列表当前排序⽅式ASC or DESC?
获取当前排序:$this->getAvailableOrders()
获取当前分页:$this->getCurrentPage()
列表页的各种内容获取都在:Mage_Catalog_Block_Product_List_Toolbar这个类⾥⾯,有需要直接去这⾥⾯找。
5.Magento Collection添加排序?
$subCategories = Mage::getModel('catalog/category')->getCollection();
$subCategories->setOrder('position', 'ASC');
6.Magento Collection where⾥⾯的或条件如何实现?
$result = $selfread->select()->from( $table, array('id'))
->where( 'reid = '.$reid,'topid ='.$reid);//reid=$reid 或 topid=$reid
7.Magento操作某条数据下⾯的多个字段,使⽤场景如下:
本⼈在做订单备注的时候在监听类⾥⾯通过Magento系统的addStatusHistoryComment⽅法把订单内容能成功写⼊
sales_flat_order_status_history表,但是我的需求是还要修改is_visible_on_front此字段的值,让内容在前台可见。
头痛的问题来了,想了各种⽅法最后按下⾯的⽅式解决了。
监听类全部源码:
class Yebihai_CustomerOrderComments_Model_Observer
{
public function setCustomerOrderComments(Varien_Event_Observer $observer)
{
$_order = $observer->getEvent()->getOrder();
$_request = Mage::app()->getRequest();
$_comments = strip_tags($_request->getParam('customerOrderComments'));
if(!empty($_comments)){
$_order->setCustomerNote('<br/><strong>订单备注:</strong> ' .$_comments);
$_order->addStatusHistoryComment('订单备注: ' .$_comments)->setIsVisibleOnFront(1);
}
return $this;
}
}
8.Magento个⼈中⼼左侧菜单控制
关于个⼈中⼼的主要功能都是在customer这个模块进⾏,需要修改相应的功能,直接去你的模板customer⽂件夹去修改。
左侧菜单模板路径:customer/account/navigation.phtml
9.Magento把html转换为转义字符,⽤什么⽅法?
core助⼿⾥⾯有⼀个escapeHtml⽅法,使⽤如下:
Mage::helper('core')->escapeHtml("<b>yebihai</b><span> 加油</span><div style='display:block;font-size:18px;'>go</div>");
⽅法实际位置:Mage_Core_Helper_Abstract这个类⾥⾯。
ps:关于⼀些常⽤的操作⽅法都封装在core这个模块,⼤家有需要可以分析⼀下源码。
10.Magento动态创建block并且引⽤action?
下⾯是我⼀个模块的布局(Layout)配置⽂件,我现在需要通过Ajax动态的调⽤checkoutcart,直接调⽤肯定是不⾏的,改如何解决乃?
<block type="checkout/cart" name="checkout.cart" as="checkoutcart" template="quickbuy/cart/cart.phtml">
<action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block>
<template>quickbuy/cart/item/item_view.phtml</template></action>
</block>
第⼀步:通过ajax调⽤⼀个⾃定义控制器,如:
jQuery.post('<?php echo $this->getUrl('gouwuche/cart/updateQuickShoppingCar') ?>', function(data){
jQuery('#shopping-cart-table thead').after(data);
});
第⼆步:在控制器的⽅法中动态创建block,如:
public function updateQuickShoppingCarAction(){
$block = $this->getLayout()->createBlock('checkoutrewrite/quickcart')->setTemplate('quickbuy/cart/cart.phtml');
echo $block->toHtml();
}
第三步:新建⼀个block⽂件(quickcart),在这⽂件中的construct⽅法中初始化配置⽂件中的action内容,如:
public function __construct()
{
parent::__construct();
$this->addItemRender('simple', 'checkout/cart_item_renderer', 'quickbuy/cart/item/item_view.phtml');
}
PS:在进⾏第⼆步的时候,cart.phtml模板已加载完成,第三步只是为了加载cart block下⾯的action。
11. Magento getTable⽅法参数注意那些事项?
实例,查询数据库指定表和条件的⽅法如下:
public function getExcelKucunJiage($id,$status){
$selfread = $this->_getConnection('excelmanage_read');
$table = $this->getTable('excelmanage/excelkucunjiage');
$result = $selfread->select()
->from( $table )
->where( 'excel_id=?', $id)
->where( 'is_active=?', $status);
return $selfread->fetchRow($result);
}
其中getTable⽅法的参数设置需要注意如下,excelmanage就是你的模块名称,excelkucunjiage这个就是你操作的实体节点名称,我的实体配置如下:
<!-- st 数据库资源模型配置 -->
<excelmanage_resource_mysql4>
<class>Yebihai_ExcelManage_Model_Resource_Mysql4</class>
<entities>
<excelkucunjiage>
<table>excelkucunjiage</table>
</excelkucunjiage>
</entities>
</excelmanage_resource_mysql4>
<!-- end 数据库资源模型配置 -->
“/”后⾯的参数就是来源于表前⾯的实体名称。
12.如何更新数据表指定ID信息?
$excelModel = Mage::getModel('excelmanage/excelkucunjiage')->load(1);
$excelModel->setExcelAdddate(Mage::getModel('core/date')->timestamp(time()));
$excelModel->setIsActive(0);
$excelModel->save();
上⾯的代码就是修改ID为1的数据表信息。
扩展:
13.如何更改产品列表默认排序字段?
设置路径在:系统-->⽬录-->⾼级产品管理-->默认列表状态
14.获取⼀个数据集的条数?
获取_productCollection数据集条数,案例如下:
$this->setStoreId($storeId);
$this->_productCollection = Mage::getResourceModel('catalog/product_collection'); //获取数据集 $this->_productCollection = $this->_productCollection->addAttributeToSelect('*')
->addAttributeToSelect('manufacturer') //添加查询属性
->setStoreId($storeId) //设置商店
->addAttributeToFilter('cuxiaobiaoqian',array('eq'=>39)) //属性过滤指定
->addStoreFilter($storeId) //添加商店过滤条件
->setPageSize(6); //获取条数
15. 通过select()⽅法查询指定数据表,如何控制读取条数?
代码应⽤背景如下:
$selfread = $this->_getConnection('yafo_bbs_setup'); //数据库连接对象
$table = $this->zixunTablePrefix."forum_post"; //待查询表
$result = $selfread->select()->from( array('a'=>$table), array('tid','subject')) //指定表和要查询的字段 ->limit($size) //读取指定条数
->order("a.dateline DESC") //指定排序条件
->where( $selfwhere ); //添加筛选条件
return $selfread->fetchAll($result); //返回查询结果
16.修改指定产品价格和分组价格(代码操作)?
$selfPrc = Mage::getModel('catalog/product')->load(614);
$selfData = $selfPrc->getData();
$selfData['price'] = 25;
$selfData['group_price'] = array(
0 => Array(
"website_id" => 0,
"all_groups" => 0,
"cust_group" => 0,
"price" => 97.0000,
"website_price" => 97.0000
),
1=> Array
(
"website_id" => 0,
"all_groups" => 0,
"cust_group" => 1,
"price" => 27.0000,
"website_price" => 27.0000
),
2=> Array
(
"website_id" => 0,
"all_groups" => 0,
"cust_group" => 2,
"price" => 17.0000,
"website_price" => 17.0000
),
3=> Array
(
"website_id" => 0,
"all_groups" => 0,
"cust_group" => 3,
"price" => 67.0000,
"website_price" => 67.0000
),
4=> Array
(
"website_id" => 0,
"all_groups" => 0,
"cust_group" => 4,
"price" => 66.0000,
"website_price" => 66.0000
));
$selfPrc->setData($selfData);
$selfPrc->save();
17.修改指定产品库存(代码操作)?
$selfPrc = Mage::getModel('catalog/product')->load(614);
$aa = Mage::getModel("cataloginventory/stock_item")->loadByProduct($selfPrc);
$selfaa = $aa->getData();
$selfaa['qty'] = 23;
$aa->setData($selfaa);
$aa->save();
18.如何输出sql语句
$result = $selfread->select()->from(array('ft'=>$flatTable),array())
->join(array('pc'=>$prcCategory),'ft.entity_id=pc.entity_id',array('pc.value'))
->where( 'ft.attribute_set_id=?', $attsetid)
->where( 'pc.attribute_id=?', $attid)
->group("pc.value");
// echo $result; exit;//输出sql语句
19.后台表单配置,如何在代码⾥⾯添加备注?
$fieldset->addField('dict_grade', 'select', array(
'name' => 'dict_grade',
'label' => Mage::helper('catalogsearchrewrite')->__('Advanced Search Ciku Manage Grade'),
'title' => Mage::helper('catalogsearchrewrite')->__('Advanced Search Ciku Manage Grade'),
'type' => 'options',
'options' => Mage::getSingleton('catalogsearchrewrite/cikumanage')->getCikuGradeOptionArray(),
'after_element_html' => Mage::helper('catalogsearchrewrite')->__('Keywords Grade Description.'), //after_element_html此属性就是⽤来添
加备注
'required' => true,
)
);
20.实例化model,通过load⽅法如何获取指定字段指定内容的值?
$dictModel=Mage::getModel('catalogsearchrewrite/cikumanage')->load($dictname,'dict_name'); //参数1:指定值,参数2:指定字段$dictModel->getDictName(); //获取返回的指定字段值。