使用命令行刷新Magento索引管理

当我们网站商品很多的时候,比如有几千件,我们刷新Magento的索引管理(Index Management)经常会失败。那么后台刷新不了,我们还可以通过命令行来刷新。使用命令行来刷新索引管理会极大降低系统消耗,容易成功。
我们来看下步骤,如果你在使用linux服务器,登入你的ssh客户端,切换目录到你magento根文件夹中名字是shell的文件中。
在此文件夹中输入如下命令

1
php -f indexer.php --reindex catalog_url

它的意思是刷新Catalog Url Rewrites即网址重写。成功后会有成功提示,如:Catalog URL Rewrites index was rebuilt successfully

我们来看下有哪些索引管理,可以使用Shell的命令行来刷新,如下

1
2
3
4
5
6
7
8
catalog_product_attribute     Product Attributes
catalog_product_price         Product Prices
catalog_url                   Catalog Url Rewrites
catalog_product_flat          Product Flat Data
catalog_category_flat         Category Flat Data
catalog_category_product      Category Products
catalogsearch_fulltext        Catalog Search Index
cataloginventory_stock        Stock status

如上分别对应后每项台的索引管理。

命令执行后需要耐心等待一段时间,因你商品数量和你服务器性能决定等待多久。注意命令中reindex前的两个横线。如有代码错误提示,直接黏贴本文的命令或者
如下参考文章的命令,直接修改执行参数即可。

参考文章:http://inchoo.net/ecommerce/magento/executing-magento-indexer-from-shell/
原始出处:http://www.hellokeykey.com/magento-shell-reindex-index-management/

推荐一个magento环境下生成google base shopping的文件免费插件

magento环境下,原先有带自动向google api接口提交产品的功能,但目前这个功能用不了
找了magento官方的一些插件,有一些要收费,magmeto自已另外提供的插件mage_googleshopping安装时,大部分会出问题,
终于找到了不错的插件:Google Base Feed Generator
http://www.magentocommerce.com/magento-connect/google-base-feed-generator.html

http://connect20.magentocommerce.com/community/Google_Base_Feed_Generator

我试过了,可以生产一个文本类型的文件。比xml方便编辑!

magento在目录页实现用户手工输入要跳转的页面

magento在目录页中,想要访问各个页,需要点数字,如何用户想手工输入页面数,实现自行跳转
如图:

简单的代码即可实现
/app/design/frontend/default/default/template/page/html/pager.phtml中增加一个简单的代码即可实现
代码如下:

<li style="width:65px;border:0px;margin-left:-5px" class="next-icon">
            	<form onsubmit="return true;" class="custom_form" action="" name="p" method="get" >
                    <input type="text" value="" name="p" class="custom_page" style="width:20px;">
                    <input type="submit" class="custom_form_submit" onclick="submitCustomPages(this);" value="Go" name="submit">
                </form>
              <script type="text/javascript">                
					 function submitCustomPages(self){
						var inputValue = jQuery.trim(jQuery(self).prev().val());
						
						if(inputValue && !isNaN(inputValue)){
							var vv = parseInt(inputValue);
							
						}else{
							alert("Please enter a number");	
							return false;						
						}
						return ture;
					 }
                </script>
			</li>

加到合适的地方即可!

原始完整代码如下:

<li class="custom_li">
            	<form onsubmit="return false;" class="custom_form" action="" name="custom_page" method="get">
                    <input type="text" value="" name="custom_page" class="custom_page">
                    <input type="submit" class="custom_form_submit" onclick="submitPages(this);" value="ok" name="submit">
                </form>
              <script type="text/javascript">                
					 function submitPages(self){
						var inputValue = jQuery.trim(jQuery(self).prev().val());
						
						if(inputValue &amp;&amp; !isNaN(inputValue)){
							var vv = parseInt(inputValue);
							
							if(jQuery("div.pages &gt; ol &gt; li.custom_li").prev("li").find("a.next").size() &gt; 0){
								var mm = parseInt(jQuery("div.pages &gt; ol &gt; li.custom_li").prev().prev().find("a").html());
								if(vv &lt;= mm){
									window.location = jQuery("div.pages &gt; ol &gt; li.custom_li").prev().prev().find("a").attr("href").replace(mm,vv);									
								}else{
									alert("Please enter a number not greater than the limit.")									
								}								
							}else{
								var hh = parseInt(jQuery("div.pages &gt; ol &gt; li.custom_li").prev().html());
								var kk = hh - 1;
								if(vv &lt;= hh){
									window.location = jQuery("div.pages &gt; ol &gt; li.custom_li").prev().prev().find("a").attr("href").replace(kk,vv);									
								}else{
									alert("Please enter a number not greater than the limit.");									
								}								
							}							
						}else{
							alert("Please enter a number");							
						}
					 }
                </script>
            </li>

magento在产品目录页过滤特价和免运费的插件代码

如何在,magento的产品目录页,根据默认的产品清单,过滤当前特价和免运费的功能呢?
如图

涉及两个代码
1、Mage/Catalog/Block/Product/List/Toolbar.php
大约在235处找到以下代码:
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
将其换成

$postData = Mage::app()->getRequest()->getParam('alpha').'%';
			$postData_all = Mage::app()->getRequest()->getParam('alpha');
			switch(trim($postData_all))  
			   {
				case 'special': 
					$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->addAttributeToFilter(array(
                    array('attribute'=>'special_price', 'gt'=>0)));
					break;  
				case 'freeshipping': 
					$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->addAttributeToFilter(array(
                    array('attribute'=>'free_shipping', 'eq'=>1)));
				break;  
				default:
					$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
			   }

2、/app/design/frontend/default/default/template/catalog/product/list/toolbar.phtml
在合适位置加上以下前台显示代码

<ul   class="sort-by" style="margin-right:65px">
          
            <?php 
			$temppath= $this->helper('core/url')->getCurrentUrl();
		    if(strpos($temppath, '?')) $temppath=substr($temppath,0,strpos($temppath, '?'));
			$postData = Mage::app()->getRequest()->getParam('alpha');
			$tempoption='?';
			foreach($this->getRequest()->getParams() as $key=>$value) {
				if($key=='dir' || $key=='mode' || $key=='order' || $key=='limit') 
		        $tempoption=$tempoption.$key.'='.$value.'&';
		    }
			$temppath=$temppath.$tempoption;
			?>
			 <li><label><?php echo $this->__('Filter:') ?></label></li>
			 <li><a href="<?php echo $temppath.'alpha=all' ?>" <?php if($postData<>'special' && $postData<>'freeshipping'): ?> class="active"<?php endif; ?>><span><span><?php echo $this->__('All'); ?></span></span></a></li>
			 <li><a href="<?php echo $temppath.'alpha=special' ?>" <?php if($postData=='special'): ?> class="active"<?php endif; ?>><span><span><?php echo $this->__('Special Offers'); ?></span></span></a></li>
			 <li><a href="<?php echo $temppath.'alpha=freeshipping' ?>" <?php if($postData=='freeshipping'): ?> class="active"<?php endif; ?>><span><span><?php echo $this->__('Free Shipping'); ?></span></span></a></li> 
       
		</ul>

就可大致形成上述的效果!

magento全页加速插件Full Page Cache的破解

magento全页加速插件Full Page Cache是一个不错的加速插件,特点如下:
特点
兼容的Magento社区版1.4.x版,1.5.x及1.6.x版
支持多店,店的意见,货币和语言
使用文件系统,APC或Memcached的缓存存储
极大地减少了页面加载时间
降低硬件要求
易于扩展的
兼容Fooman欧宝
通过E-Mail的免费技术支持
10管理电子商务模块的原因
简单的1分钟安装
易于扩展的自定义应用程序的模块
高品质的编码

经过实际使用,加速效果还是不错,但是有一个问题,是如何用户登录后,可能在一些缓冲的页不能正确反应当前用户是登录的状态,如购物车,logout状态不能正确显示,不知后期是否会改进。
这是magento官网站地址:http://www.magentocommerce.com/magento-connect/fast-full-page-cache.html
这是Full Page Cache插件的官网地址,只充许使用paypal购买,http://www.mgt-commerce.com/speed-up-magento-by-full-page-cache.html
说说如何破解.
使用的是eval(gzinflate(base64_decode这种加密方式。以下是破解代码:

<?
$str=gzinflate(base64_decode('FZdFssTgeUW3 ..以前的内容... 33//4z7//5z//Bw=='));
 while (preg_match("/base64_decode\('.*?'\)/s",$str)){
   if (preg_match("/eval\(gzinflate\(base64_decode\('(.*?)'\)\)\);/s",$str,$reg)){
     $s=gzinflate(base64_decode($reg[1]));
     $str=str_replace("eval(gzinflate(base64_decode('$reg[1]')));",$s,$str);
   }
   elseif (preg_match("/eval\(gzinflate\(str_rot13\(base64_decode\('([^']*)'\)\)\)\);/",$str,$reg)){
     $s=gzinflate(str_rot13(base64_decode($reg[1])));
     $str=str_replace("eval(gzinflate(str_rot13(base64_decode('$reg[1]'))));",$s,$str);
   }
   else break;
   $str=str_replace('<? ?>','',$str);
 }
 echo $str;
 ?>

这个插件共有5个文件是加密的,但判断授权最关系的文件是
app/code/community/Wee/Fpc/Model/FullPageCache.php   
将他的加密部分代码copy到上述解密代码中运行,即可显示正常代码,
找到
public function hasValidLicense() {
改成以下形式
public function hasValidLicense() { return true;

即可完成这件插件的破解工作.
不过大家可能拿不到源代码的!这个作者不提供测试版,
只是大家如果觉得有用,买一个授权,然后就可以用到其它网站上。

magento的google base接口2011年6月后失效的解决办法

magento的google base接口2011年6月后失效。
从今年开始, 谷歌已经推出了新的购物 APIs接口,将取代Google Base的API。
的Google Base的API将完全退休,
2011年6月1日,并使用相应的API上传到Google的产品的商家应该迁移到新内容的API.
这个扩展包括新的内容的API逻辑,它是专为被上传到Google Base,管理商户的项目-在Magento,它会简单地取代目前的Google Base API的逻辑。
http://www.magentocommerce.com/magento-connect/Magento+Core/extension/6887/mage_googleshopping

大家可使用magento官方的这件插件,这是magento官方针对magento的google的api做出的更新,
但是大家要注意,这个插件的安装,需升级相应的核心代码,1.6以下的用户要注意了,升级后,可能系统会蹦掉!

以下是1.0和2.0的connect key:
http://connect20.magentocommerce.com/community/Mage_GoogleShopping
magento-core/Mage_GoogleShopping