Magento笔记/记录

Magento笔记/记录    http://www.yebihai.com/magento/397.html

2013-12-05 19:12   来源:大梦之家   浏览:471
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下面的命名标签必须小写,如:

     
             
                 
                  Yebihai_CategoryList_Block_Category_View
             
     
       
                
                 
                      Yebihai_CategoryList_Block
                 
          
 

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('
订单备注: ' .$_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("yebihai加油
go
");
方法实际位置:Mage_Core_Helper_Abstract这个类里面。
ps:关于一些常用的操作方法都封装在core这个模块,大家有需要可以分析一下源码。

10.Magento动态创建block并且引用action?

下面是我一个模块的布局(Layout)配置文件,我现在需要通过Ajax动态的调用checkoutcart,直接调用肯定是不行的,改如何解决乃?
            simplecheckout/cart_item_renderer            
 
第一步:通过ajax调用一个自定义控制器,如:
jQuery.post('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这个就是你操作的实体节点名称,我的实体配置如下:
   
      Yebihai_ExcelManage_Model_Resource_Mysql4       
   
   
       excelkucunjiage
   
   
“/”后面的参数就是来源于表前面的实体名称。

12.如何更新数据表指定ID信息?    
    $excelModel = Mage::getModel('excelmanage/excelkucunjiage')->load(1);
    $excelModel->setExcelAdddate(Mage::getModel('core/date')->timestamp(time()));
    $excelModel->setIsActive(0);
    $excelModel->save();
上面的代码就是修改ID为1的数据表信息。
扩展: Magento如何添加修改指定表信息?

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(); //获取返回的指定字段值

21.修改指定表所有字典中某个字段的信息?这里以搜索历史表为例,把搜索词对应的拼音全部修改出来。
function indexAction(){
$this->pinyin = new pinyin();
    $ckmanageModel = Mage::getModel('catalogsearch/query');
    $ssjgarray = $ckmanageModel->getResourceCollection()->getData();  //获取修改前列表
    foreach ($ssjgarray as $key => $value){
    $model = $ckmanageModel->load($value['query_id']);  //循环获取实例化
    $data = $model->getData();  //获取值
    $data['query_text_pinyin'] = $this->pinyin->GetPinyin($value['query_text']);  //修改指定字段
    $model->setData($data);  //赋值
    $model->save();  //保存
    }
}
PS:pinyin这个是跟拼音转换相关的类,非系统自带

22.如果获取图片原图?
$_product = Mage::getModel('catalog/product')->load($selfPid);
$_product->getImageUrl(); //读取原图

23.在翻译文件中,要出现双引号如何处理?
“yebihai”,""叶必海""   //显示效果:“叶必海”

24.返回某个下拉或多选属性(Attribute)对应的键值信息.

  public function getBrandOptionArray(){

  //返回品牌信息,取option_id、value字段值

  $attrInfo = Mage::getModel('eav/entity_attribute')->load('manufacturer','attribute_code');

  $attrId = $attrInfo->getAttribute_id(); //属性ID

  $brandArray = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($attrId)->setPositionOrder('ASC', true)->load()->getData();

  $brandArrayNew = array();

  foreach ($brandArray as $key=>$value){

  $brandArrayNew[$value['option_id']] = $value['value'];

  }

  return $brandArrayNew;

  }

     ps:上面的例子是获取品牌对应的键值信息,返回的数组结构为Array ( [1] => 三星 [1] => 佳能 [1] => 兄弟 )

  25.新增模块,getCollection结果如何添加字段条件?

  $collection = Mage::getModel("cacherewrite/brandurl")->getCollection();

  $collection->addFieldToFilter('url_category', 1); //只查询品牌对应的结果

  print_r($collection->getData());


  26.grid如何调用自定义模板?

public function __construct() 
    {
        parent::__construct();
        //模板地址
        $this->setTemplate('widget/grid-brandurl.phtml');   //加上这句就行了,grid-brandurl.phtml就是自定义grid模板
        //设置容器ID
        $this->setId('BrandurlGrid');
        //设置默认排序字段
        $this->setDefaultSort('urlid');
        //设置默认排序属性:DESC|ASC
        $this->setDefaultDir('ASC');
        $this->setSaveParametersInSession(true);
    }

  27.grid.phtml模板如何获取当前字段名称?以及如何获取当前值?

  $_column->getIndex(); //获取当前字段名称,如url_default

  $_index //字段当前所属ID

  $_column->getRowField($_i) //当前所属ID对应值

  扩展:$_column这个对象封装在Mage_Adminhtml_Block_Widget_Grid_Column这个类中,感兴趣大家可以去看看

 

  28.Grid里面用addColumn添加字段,如何把一个Unix时间显示为日期格式?

  $this->addColumn('baojia_datetime', array(

  'header' => Mage::helper('baojia')->__('Baojia Adddate'),

  'align' => 'left',

  'width' => '50px',

  'index' => 'baojia_datetime',

  'type' => 'datetime'   //重点是指定Type类型

  ));
 

  29.添加时间控件,显示时分以及格式化时间(此例是按照24小时制显示时间)?

  $fieldset->addField('baojia_datetime', 'date', array(

  'name' => 'baojia_datetime',

  'label' => Mage::helper('baojia')->__('Baojia Adddate'),

  'title' => Mage::helper('baojia')->__('Baojia Adddate'),

  'image' => $this->getSkinUrl('images/grid-cal.gif'),

  'style' => "width:150px;",

  'required' => true,

  'time' => true, //弹出时间控件,包含时间(时、分)

  'format' => 'yyyy-MM-dd HH:mm:ss' //格式化时间,支持什么样的格式请查看app/code/core/Zend/Date.php文件

  ));

  30.通用操作方法(getRequest,编码,解码,getLayout,setLayout),文件位置?

  Mage_Core_Helper_Abstract







你可能感兴趣的:(Magento笔记/记录)