最新消息:Excel无乱码转CSV,由于工作原因很少更新博客和回复大家的评论,非常抱歉。

Magento 常见问题二

1. 分类产品列表逆向排列(为了实时显示分烊最新添加的产品)。
位置:app\code\core\Mage\Catalog\Block\Product\List\Toolbar.php
修改:protected $_direction = ‘asc’;为desc
附另一个改法:按产品 entity_id 倒序排列,将同文件中的
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
改为:
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->setOrder(‘entity_id’, ‘desc’);
待测:$products = Mage::getModel(‘catalog/product’)->getCollection()->addAttributeToSort(“entity_id”,”DESC”);
另侧:$_productCollection=$this->getLoadedProductCollection()->clear()->addAttributeToSort(‘entity_id’,’DESC’);

2. 添加批量导入产品自定义选项
位置:app\code\core\Mage\Catalog\Model\Convert\Adapter\Product.php

3. 调整产品页面的Add to Cart、wishlist、compare、及产品自定义选项的位置
位置:app\design\frontend\base\default\template\catalog\product\view.phtml

4. 取掉了首页,分类、比较、购买意愿里的 Add to Cart 按钮。
原因有二:1).若产品有自定义选项时,Add to Cart 形同虚设,没有用;
2).也不美观。

5. 首页推荐产品排序默认改为显示最新推荐产品,若要随机显示请看
app\design\frontend\default\f001\template\catalog\product
这里的说明。

6. 信用卡等在线支付时需要另开一个新窗口,具体代码如下 :
app\design\frontend\default\f001\template\checkout\cart.phtml
替换 getChildHtml(‘top_methods’) ?> 为如下代码即可。
<im’,’ target=”_blank”><im’,$this->getChildHtml(‘top_methods’)) ?>

7. 修复 Magento Title 全变成 Customer Login 一例:
经过分析,是由于:app\code\core\Mage\Customer\Block\Form\Login.php 文件中的

1 protected function _prepareLayout()
2 {
3 this->getLayout()->getBlock('head')->setTitle(Mage::helper('customer')->__('Customer Login')) ;
4 return parent::_prepareLayout();
5 }

红字部份引起的,删除这部份或者整行,都可以恢复正常。

8. 设置 Magento 301 永久定向
编辑 .htaccess 在 RewriteEngine on 下方加入以下代码:
Redirect permanent /old.html /new.html
提示:缺少 permanent 就变成 302 临时重定向了,搜索引擎还会索引 /old.html,所以推荐使用 301 定向。

9. 开启 Magento 模板调试模式
System->Configuration->Current Configuration Scope:选择调试商店->Developer->Debug->Template Path Hints 设为 Yes ,保存。刷新前台即可以看到模板各模块的调试路径,调试完模板将这里改为 No ,保存即可。

10. 如何顺利导入其它系统中的客户到 magento 邮件系统:
1). 导入其它系统客户,必不可少的四条数据:First Name、Last Name、E-mail、Password (也可能是仅需要保留的四条数据)
2). 加入到邮件系统过程中可能出现:”Customer email already exists” 和 “Form was filled incorrectly” 错误而无法正常进行,到对应的文件,删除对应的那段代码(注意事先备份文件),即可顺利导入。如应的数据表 newsletter_subscriber 根据 customer_id 值可在导入过程中”连续导入”,而对应的文件位置如下 :
app\code\core\Mage\Customer\Model\Entity\Customer.php
app\code\core\Mage\Newsletter\Model\Mysql4\Subscriber.php

11. 解决 SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘e.brand’ in ‘field list’
到缓存管理里重建:分类产品索引,即可解决问题。原因:修改数据库时造成的“后遗症”

12. Magento 1.3 升级到 1.4 小提示
直接把纯净的 1.4 程序安装在 1.3 的数据库上,即可将程序正常升级到 1.4 (我说的是程序,不是模板哦)

13. SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘765’ for key ‘PRIMARY’
全选数据库所有“表” -> 修复,问题解决!

14. 在 Header 的 Top.links 中加入 Register 链接
编辑:/app/design/frontend/base/yourtheme/layout/customer.xml
在 top.links 下加入下面方法即可:

1 Register200

15. 换思路解决下面这个错误:
Fatal error: Call to a member function getSku() on a non-object in
\app\code\core\Mage\Catalog\Model\Product\Option\Type\Select.php on line 221
起初在 Google 里搜寻答案,结果全是改代码,改就改吧,可是不管怎么修改代码,问题始终没有彻底解决,反而敷衍出新的问题,让人摸不着头脑……冷静下来后,仔细分析了这个故障的出现时间,发现只是在后台操作某一个顾客时,才会出现,而且这个顾客不能在前台登陆,其它顾客正常,突然一个念头闪过:何不重建一个账户取代这个有问题的账户? 改程序麻烦,移订单和密码就简单多了,照着这个思路前进,果然问题完美解决,特此记录一下,以供各位参考。

补充一个解决方法:
将代码:
$result = $option->getValueById($optionValue)->getSku();
替换为:
$o = $option->getValueById($optionValue);
$result = is_object($o) ? $o->getSku() : null;
即可。
参考:http://stackoverflow.com/questions/1801311/magento-fatal-error-call-to-member-function-getsku-on-a-non-object

16. 开启编译功能可能会导致这个错误:
Fatal error: Call to a member function toOptionArray() on a non-object in
/includes/src/Mage_Adminhtml_Block_System_Config_Form.php on line 385
解决方法:关闭编译功能(Compilation)即可恢复正常。

17. Magento 1.4.2 以下的 1.4 模板移植到 Magento 1.4.2 上出现
Invalid method Mage_Wishlist_Block_Links::addWishlistLink(Array
错误的解决办法是修改文件:app\code\core\Mage\Wishlist\Block\Links.php
在函数:public function __construct() 后面追加以下函数即可。

01 public function addWishlistLink()
02 {
03 $parentBlock = $this->getParentBlock();
04 if ($parentBlock && $this->helper('wishlist')->isAllow()) {
05 $count = $this->helper('wishlist')->getItemCount();
06 if ($count > 1) {
07 $text = $this->__('My Wishlist (%d items)', $count);
08 }
09 else if ($count == 1) {
10 $text = $this->__('My Wishlist (%d item)', $count);
11 }
12 else {
13 $text = $this->__('My Wishlist');
14 }
15 $parentBlock->addLink($text, 'wishlist', $text, true, array(), 30, null, 'class="top-link-wishlist"');
16 }
17 return $this;
18 }

分类页出现:Invalid method Mage_Catalog_Block_Product_List_Toolbar::isLastPage(Array
解决办法是修改文件:app\code\core\Mage\Core\Block\Template.php
在函数:public function getCacheKeyInfo() 后面追加以下函数即可。

1 public function isLastPage()
2 {
3 return $this->getCollection()->getCurPage() >= $this->getLastPageNum();
4 }

18. 让 Magento 删除产品的同时删除产品图片
在product模型类的delete方法里加上如下代码:

1 foreach ($this->getMediaGallery('images') as $image){
2 $image_path = $this->getMediaConfig()->getMediaPath($image['file']);
3 if(file_exists($image_path)){
4 @unlink($image_path);
5 }
6 }

具体位置:app\code\core\Mage\Catalog\Model\Product.php
在此文件搜索:function delete() 方法,加入以上代码即可。

19. Magento 提示 Notice: getimagesize() [function.getimagesize]: Read error! 是何因?
请求的分类下面有产品图片丢失或者损坏,就会导致这个错误提示,修复丢失的图片,或者删除没有图片的产品即可使分类恢复正常。

20. Magento 产品小数位数修改
编辑:/app/code/core/Mage/Core/Model/Store.php
查找:public function formatPrice
替换:return $this->getCurrentCurrency()->format($price, array(), $includeContainer);
换为:return $this->getCurrentCurrency()->format($price, array(‘precision’=>0), $includeContainer);
说明:(‘precision’=>0) 表示去掉小数位
(‘precision’=>1) 表示保留1位小数,更多倍数请自由设置。

21. 分类url简化之取掉子分类中的父分类url
编辑:/app/code/core/Mage/Catalog/Model/Url.php
在 632 行左右替换内容如下,即可。

1 //if (null === $parentPath) {
2 //$parentPath = $this->getResource()->getCategoryParentPath($category);
3 //}
4 //elseif ($parentPath == '/') {
5 $parentPath = '';
6 //}

参考:http://www.magentocommerce.com/boards/viewthread/32328/

23. “Cannot load configuration for payment method “ugiftcert””
安装 magento-community/Unirgy_Giftcert 即可。
或者:DELETE FROM `core_config_data` WHERE path LIKE ‘%ugift%’;
“Cannot load configuration for payment method “amazonpayments_asp””
备份 core_config_data 表,并运行以下命令,刷新缓存即可。
DELETE FROM `core_config_data` WHERE path LIKE ‘%amazon%’;

24. 取消 Magento 后台模板编辑提示信息帮助命令:
SELECT * FROM `core_config_data` WHERE `path` LIKE “dev/debug/template_hints%”;

25. 后台订单显示产品图片:
/app/design/adminhtml/default/default/template/sales/order/view/items.phtml

后面添加:
app/design/adminhtml/default/default/template/sales/order/view/items/renderer/default.phtml

前面添加:

1
2 getProductId();
4 $item_imgurl = Mage::getBaseUrl('media').'catalog/product'.Mage::getModel('catalog/product')->load($item_id)->getImage();
5 ?>
6 
7

26. 前台会员中心查看/打印订单时显示产品图片:
/app/design/frontend/default/(your theme)/template/sales/order/items.phtml
/app/design/frontend/default/(your theme)/template/sales/order/print.phtml

后面添加:
/app/design/frontend/default/(your theme)/template/sales/order/items/renderer/default.phtml

前面添加:

1
2 getProductId();
4 $item_imgurl = Mage::getBaseUrl('media').'catalog/product'.Mage::getModel('catalog/product')->load($item_id)->getImage();
5 ?>
6 
7

27. Magento 常用 shell 命令
1)、清除 Magento 日志命令:php -f shell/log.php clean
2)、控制 magento 编译: php -f shell/compiler.php help
3)、重建全部索引:php -f shell/indexer.php reindex
重建指定索引:php -f shell/indexer.php catalogsearch_fulltext //php -f shell/indexer.php info

28. 修正 Magento 前台会员查看订单样式错乱
app\design\frontend\default\modern\template\sales\order\info.phtml
在这个文件最后加一个

即可。

29. 删除 Magento 网址中的 ?___store=default
编辑 app\code\core\Mage\Catalog\Block\Widget\Link.php
将 91 行的:$this->_href = $this->_href . $symbol . “___store=” . $store->getCode();
修改为:$this->_href = $this->_href;

30. 让 Magento 结账时,在跳转支付前,就发邮件给客户,而不是支付后
编辑 app\code\core\mage\Checkout\Model\Type\Onepage.php
在 saveOrder() 方法里,将 sendNewOrderEmail() 方法的转向判断注释掉即可。

31. 为商品页面启用文件缓存,减少重复的数据库查询和CPU消耗。
修改文件:/app/code/core/Mage/Catalog/Block/Products.php
插入代码:在文档结尾大括号“}”之前插入:

1 protected function _construct()
2 {
3 $this->addData(array(
4 'cache_lifetime' => 120,
5 'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG . "_" . $this->getProduct()->getId()),
6 'cache_key' => $this->getProduct()->getId(),
7 ));
8 }

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

2.http://www.magentocommerce.com/blog/comments/understanding-magento-scalability-and-performance-1/

32. 解决 Magento 后台订单看不到产品自带的自定义选项 bug
注释掉:app/design/adminhtml/default/default/template/sales/items/column/name.phtml
大概 44 行: getFormattedOption($_option[‘value’]); ?>(注释掉即可)
摘自:http://www.magentouse.com/blog/magento-bug-order-custom-options-error/

33. Magento 升级 1.7 后 OneStepCheckout 报错:
Wrong Content Type.
\app\code\core\Mage\Usa\Model\Shipping\Carrier\Dhl\International.php(397)
解法:编辑 /app/code/core/Mage/Usa/etc/config.xml
在 标签内添加 <content_type>D 即可。

34. 解决 Magento 1.4.x – “Cache Management” Access denied 一例
编辑:/app/code/core/Mage/Adminhtml/controllers/CacheController.php
错误的代码:
protected function _isAllowed()
{
return Mage::getSingleton(‘admin/session’)->isAllowed(‘cache’);
}
正确的代码:
{
return Mage::getSingleton(‘admin/session’)->isAllowed(‘system/cache’);
}

35. Magento 后台对页面及CMS等内容进行保存时提示如下错误信息时,清空浏览器缓存即可。
1 error: error in [unknown object].fireEvent():
2 event name: formSubmit
3 error message: Cannot read property ‘body’ of undefined

36. magneto 页面代码优化 压缩输出文本
有的时候,可能因为页面制作时的不规范,导致页面源码里面有大段的空白,那么如何去掉这些空白呢,其实很简单:
找到:/app/code/core/Mage/Core/Block/Abstract.php

1 protected function _afterToHtml($html)
2 {
3 if (Mage::getSingleton('core/layout')->getArea() != 'adminhtml') {
4 $html = preg_replace('/(^[ \t]+|[ \t]+$)/m', '', $html);
5 $html = preg_replace('/(\r\n|\n|\r)+/s', "\r\n", $html);
6 }
7 return $html;
8 }

在页面输出html之前,对其进行相应的处理即可。
附另一个改法:

1 protected function _afterToHtml($html)
2 {
3 if (Mage::getSingleton('core/layout')->getArea() != 'adminhtml') {
4 $html = preg_replace('/(^\s+|\s+$)/im', '', $html);
5 }
6 return $html;
7 }

37. Magento 激活手机模板
System > Configuration > General > Design -> Theme sections
点击‘Add Exception’,在 matched expression 处键入下面内容
iPhone|iPod|BlackBerry|Palm|Googlebot-Mobile|mobi|Windows Mobile|Android|Opera Mini
在 Value 里输入手机模板名称,比如自带的 iphone 模板
建议:还是建议使用自适应模板,省事很多。

38. 让产品的最小购买量为 0 时,前台显示为 1 件
位置:template/catalog/product/view/addtocart.phtml
关键代码:getMinimalQty($_product)== null?1:$this->getMinimalQty($_product) ?>

39. 让 Magento 快速搜索更精准
旧版位置:app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php
新版位置:app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php
查找并修改:$likeCond = ‘(‘ . join(‘ OR ‘, $like) . ‘)’; 中的 OR 为 AND 即可。
最后,别忘了,刷新缓存哦。

40. Magento 升级到 1.4.2.0 后邮件队列不能保存.
编辑:app/design/adminhtml/default/default/template/newsletter/queue/edit.phtml

01 Event.observe($('store_switcher'), 'change', switchStore(this));
02
03 function switchStore(obj){
04 if(obj.value) {
05 $('preview_store_id').value = obj.value;
06 queueControl.preview();
07 }else{
08 return false;
09 }
10 }

将上述内容替换为下面内容即可.

01 isSingleStoreMode() ): ?>
02 Event.observe($('store_switcher'), 'change', switchStore(this));
03
04 function switchStore(obj){
05 if(obj.value) {
06 $('preview_store_id').value = obj.value;
07 queueControl.preview();
08 }else{
09 return false;
10 }
11 }
12 

41. 命令行安装 Magento 插件或升级 Magento
参考升级命令: #./pear install magento-core/Mage_All_Latest

42. 在 PHP 低于 5.3.9 版本的环境里 Magento 要批量修改大于 999 条记录时,需要在 php.ini 里增加以下三条记录才行。

1 max_input_vars = 10000
2 suhosin.post.max_vars = 10000
3 suhosin.request.max_vars = 10000

43. 增加 Magento 后台产品管理一页显示数量
/app/design/adminhtml/default/default/template/widget/grid.phtml

44. magento jQuery冲突
修改模板的时候,在page中加入jquery库,发现与原本自带的js冲突:商品无法加入购物车,很多js都没有效果。
这是jQuery和magento自带prototype的冲突 解决版本有很多种,说个简单点的
在jquery库文件最后加上一句 //例如: jquery.1.7.1.min.js文件
jQuery.noConflict();
搞定!

45. Magento 1.5.x 使用 SMTP 插件无法给客户发邮件(管理员却可以收到邮件)
错误日志为:Warning: Illegal offset type /lib/Zend/Mail.php on line 574
经过一翻 Google 原来是 1.5 与 SMTP 插件存在 bug 导致错误出现,编辑 /lib/Zend/Mail.php 574 行
在 $email = array($name => $email); 前面追加一条 if(is_array($name)) $name = $name[0]; 问题解决。

原文请参考:http://www.gaohelong.com/post/140

转载请注明:嗨酷哥,有你更酷! » Magento 常见问题二

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项

网友评论1条  本站回复1

  1. 博主你好!
    朋友介绍到你的地盘,受益匪浅!

    Satan2013-12-08 01:16 回复