国际电子商务技术 & Magento开发公司

Maishen technologies

Welcome visitor! You canlogin orcreate an account.

热线:+86-0532-58973093

麦神科技有限公司
Mygod Technologies

官方认证开发工程师

怎么使用magento的block cache机制

2012年5月25日星期五 Asia/Shanghai上午8:18:38

magento自己带有缓存机制

我们要做的是实现magento的 _construct方法,然后使用addData方法,将里面的cache_lifttime和cache_tags赋值

如下:

在这个例子里,缓存存在的时间为120秒,这个将存在缓存中,知道这个产品的缓存被删除!

  1. class {NS}_{Module}_Block_{View} extends Mage_Core_Block_Template {
  2.  
  3.     protected function _construct()
  4.     {
  5.         $this->addData(array(
  6.             'cache_lifetime'    => 120,
  7.             'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG),
  8.         ));
  9.     }   
  10.  
  11. }

这个缓存将根据产品id的不同生成不同的缓存

  1. class {NS}_{Module}_Block_{View} extends Mage_Core_Block_Template {
  2.  
  3.     protected function _construct()
  4.     {
  5.         $this->addData(array(
  6.             'cache_lifetime'    => 120,
  7.             'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG),
  8.             'cache_key'            => $this->getProduct()->getId(),
  9.         ));
  10.     }   
  11.  
  12. }

当我们做缓存的时候,要把要该url下的所有参数加入到cache_key,来保证这个key的唯一性,进而在不同的参数下的页面是不一样的!

我上面是大致写写,如果您想具体的研究,下面是链接地址,可以参看这个

http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput

或者上谷歌搜索magento block cache

资料也是一大把的,然后就是自己琢磨测试了,一定要保证key的唯一性,不然,很多的不同的页面,做了block cache后发现页面都是第一次访问的那个!

当访问量大的时候,效果还是比较明显的!

0 Comments | Posted in magento二次开发 By terry water

magento的custom option属性,客户自定义属性,可以让客户在前台选择自己的属性,譬如size,color等,但是magento1.6版本有一个bug,就是在后台订单中无法查看产品的客户自定义属性(custom options)!

这也是比较郁闷的,呵呵,下面是解决的办法:

找到下面的文件地址:

app/design/adminhtml/default/default/template/sales/items/column/name.phtml

在 44行:
<?php $_option = $this->getFormattedOption($_option['value']); ?>

把这行删除或者注释掉,如下
<?php //$_option = $this->getFormattedOption($_option['value']); ?>

然后保存,就可以在后台订单里面查看到对应的产品的客户自定义属性了!

0 Comments | Posted in magento二次开发 By terry water

Call to a member function toHtml()错误的解决!

2012年4月24日星期二 Asia/Shanghai上午11:35:38

 

在安装模板的时候,有一些比较低版本的模板安装在高版本后会出现问题:

Call to a member function toHtml()

解决的办法:

找到文件地址:

app/design/frontend/default/default/layout/page.xml

当然,上面的文件包名和模板名是默认的地址,您需要到您的当前模板下找到page.xml文件,然后打开这个文件

找到代码

<block type="core/profiler" output="toHtml"/>
然后把这段代码替换成

<block type="core/profiler" output="toHtml" name="core_profiler"/>

然后刷新下缓存,如果开启了编译,关闭掉,就可以了!

 


0 Comments | Posted in magento二次开发 By terry water

得到当前购物车的产品的个数和价格信息

2012年3月2日星期五 Asia/Shanghai上午10:45:51

得到购物车所有的产品信息

1
2
3
4
5
6
7
8
9
10
11
// $items = Mage::getModel('checkout/cart')->getQuote()->getAllItems();
$items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
  
foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";
}

当然,也可以快速得到当前用户的所有的item的个数和产品的所有个数!下面是magento的一个快速函数!

1
2
$totalItems = Mage::getModel('checkout/cart')->getQuote()->getItemsCount();
$totalQuantity = Mage::getModel('checkout/cart')->getQuote()->getItemsQty();

 

下面是得到subtotal price 和grand price的方法

1
2
$subTotal = Mage::getModel('checkout/cart')->getQuote()->getSubtotal();
$grandTotal = Mage::getModel('checkout/cart')->getQuote()->getGrandTotal()

这样就可以快速的得到当前购物车的详细信息,方便操作数据,显示购物车的信息!!

一般用于右上角的购物车信息居多,或者ajax购物车!

0 Comments | Posted in magento二次开发 By terry water

magento--操作数据库方法--joinAll

2012年2月28日星期二 Asia/Shanghai下午10:50:31

magento中的很多表有关联的,为了更方便的查询,我们使用join方法,将多个表联合起来查询,然后得到一个总集合,下面是一个实例方法

 

$resource = Mage::getSingleton('core/resource');  
        $read = $resource->getConnection('catalog_read');  
        $producttitle = (string)Mage::getConfig()->getTablePrefix().'catalog_product_option_title';  
        $productoption = (string)Mage::getConfig()->getTablePrefix().'catalog_product_option';  
    
        $select = $read->select()->from(array('re'=>$productoption))
                                ->where('re.product_id=?',$this->getProduct()->getId())
                                ->join(array('pei'=>$producttitle),'re.option_id=pei.option_id',array('*'))
                                ;
                                //->where('re.product_type=?',4);
       // echo $select;
        $rows = $read->fetchAll($select);
    ///    if($rows!=""){
              foreach($rows AS $row) {
                  if($title==$row['title']){
                         $ptitle = $row['title'];  
                         $poptionid = $row['option_id'];
                         echo "###".$ptitle."###".$poptionid."<br/>";
                        // break;
                  }
            
             }

关键点: ->join(array('pei'=>$producttitle),'re.option_id=pei.option_id',array('*'))

array(*),就把pei表的所有column都加入进去了!

0 Comments | Posted in magento二次开发 By terry water
 
  • Mygod Technologies
  • 麦神科技有限公司
  • 香港中路8号
  • 中铁青岛中心大厦A3001
  • 市南区, 青岛, 266000
  • 电话: 0532-5897-3093

订阅我们的最新消息。

我们将严格尊重您的隐私。

关注我们的微信
获取外贸电子商务最新资讯;跨境推广最新策略;电子商务网站技术最新趋势。

2018 Mygod Technologies. 保留所有权. Privacy Policy