magento目录产品数据1001条的限制解决

magento目录产品数据可以批量导入超入1001条的产品,但如果对产品目录进行保存,就会发现只有1001条的产品了,
解决这个有两种思路,
一种是改服务器配置,但这个改动可能会引发ddos的风险,所以弃之
第二是改magento的核心代码,改动如下:
app/code/core/Mage/Adminhtml/controllers/Catalog/CategoryController.php文件中

parse_str($data['category_products'], $products);
改成
$cat_products_split = explode('&', $data['category_products']);
foreach($cat_products_split as $row) {
    $arr = array();
    parse_str($row, $arr); //This will always work
    list($k, $v) = each($arr);
    if (!empty($k) && !empty($v)) {
        $products[$k] = $v;
    }
}
即可解决后台保存超过1001个产品的问题

if (isset($data['category_products']) &&
                !
$category->getProductsReadonly()) {
                $products 
= array();
                
parse_str($data['category_products']$products);
                
$category->setPostedProducts($products);
            
}

换成

if (isset($data['category_products']) &&
            !
$category->getProductsReadonly()) {
            $products 
= array();
            
$records preg_split('/&/',$data['category_products'],-1,PREG_SPLIT_NO_EMPTY);
            if(
count($records) > 0){
                
foreach($records as $record){
                    $record 
trim($record);
                    if(
preg_match('/([0-9]*)=([0-9]*)/',$record,$matches)){
                        $products[$matches[1]] 
$matches[2];
                    
}
                }
            }
            $category
->setPostedProducts($products);
        
}
可以解决之一个方案在某些情况下,产品变0的问题

 

 

magento因.htaccess配置问题造成网站无法访问的解决

如果在webmin/virtualmin中安装magento,因近期webmin/virtualmin升级,造成全新安装的服务器使用迁移magento代码,会因.htaccess配置问题造成网站无法访问
解决方法:
1、根目录下的.htaccess
将Options +FollowSymLinks  换成 Options +SymLinksifOwnerMatch

2、media目录下的.htaccess
如果有这个文件,将两个option对应换成如下
Options ExecCGI Includes IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch -Indexes

Options +SymLinksifOwnerMatch
即可!

magento中目录url多层变成单层的方法

magento中目录url多层变成单成的方法,app/code/core/Mage/Catalog/Model/Url.php这个php文件,找到

if (null === $parentPath) {

$parentPath = $this->getResource()->getCategoryParentPath($category);

}

elseif ($parentPath == ‘/’) {

$parentPath = ”;

}

把上面的代码修改为:

//if (null === $parentPath) {
//$parentPath = $this->getResource()->getCategoryParentPath($category);
//}
//elseif ($parentPath == ’/') {
$parentPath = ”;
//}

magento的.net c#环境下调用v2 soap接口时发现urn:Magento的associativeMultiArray错误解决

magento的.net c#环境下调用v2 soap接口时发现以下错误:
自定义工具错误: 无法导入 Web 服务/架构。无法从命名空间“urn:Magento”导入绑定“Mage_Api_Model_Server_V2_HandlerBinding”。 无法导入操作“catalogProductCreate”。 缺少数据类型“urn:Magento:associativeMultiArray”。
这是magento的一个bug
解决方法是:
/app/code/core/Mage/Api/etc/wdsl2.xml
中的某个complexType块的下方增加如下内容即可

<complexType name="associativeMultiArray">
                <all>
                    <element name="associativeArray" type="typens:associativeArray" minOccurs="0" />
                </all>
 </complexType>

magento的soap v2接口在.net c#调用时出现响应text/html,应为text/xml的错误解决

magento在.net c#调用v2 soap接口时,在login验证时,出现,“客户端发现响应内容类型为“text/html”,但应为“text/xml”。\r\n请求失败,错误信息为:\r\n–\r\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">\n                <SOAP-ENV:Body>\n                <SOAP-ENV:Fault>\n                <faultcode>0</faultcode>\n ”
的错误。
经过排查,是没有安装php-soap插件引用的
在centos环境下yum -y install php-soap即可完全安装。

magento几种全页缓冲加速Full Page Cache插件试用心得

magento的速度确实比较慢,但有全页缓冲,速度很快的
由于全页缓冲插件很多,最终的效果也不一至,我把我使用及测试过的种插件介绍如下,
其实所有的全页缓冲插件都能启到加速的作用,但最关键的在用户登录、增加增物车及一些需要动态变化时,全页缓冲插件可能会出问题。
1、Lightspeed Full Page Caching   500美元
http://www.magentocommerce.com/magento-connect/lightspeed-full-page-caching.html
这个插件分成两个部分,一个是块和页缓冲,这个有一定的加速作用,但是提高的部分不是很大,插件本身也少,不涉及核心文件,单买需要225美元,性价很差,不建议使用。
另一个部分就是真正的Full Page Caching了,需要将要目录的index.php换成lightspeed.php,是加速了很多,但是兼容性差,而且无法单独控制页的某个部分不缓冲。用了一段时间后,不用了。
http://www.tinybrick.com/magento-modules/performance/magento-speed-booster-module.html
这个插件有序列号保护,但代码开源,很容易破解

2、Mgt Full Page Cache   349欧元
http://www.mgt-commerce.com/speed-up-magento-by-full-page-cache.html
这个加速插的加速性能也不错,但是需要修改核心文件,增加local.xml中的配置,代码有深度加密,好处是支持apc,memcache,xcahe等加速方式,但最至命的是无法提供指定页或块不加速的功能,用了一段时间后,不用了。

3、Zoom Full-Page Cache 免费
http://www.magentocommerce.com/magento-connect/zoom-full-page-cache-1742.html
这个免费插件不错,支持magento自身需要动态缓冲的块不更新,如top.link等,后台有一个可以管理缓冲面页的地方,有缓冲的都会记录下来,基本上接近即能加速又能一些块不更新的功能,但是使用过程中发现,他无法的自定义块指定不缓冲,而且不缓冲的块都是以ajax方式,在正常缓冲代码显示后,动态跳出显示,会造成整个页跳一下,影响视觉,对于不介意这个的可以使用,推荐大家。

4、I-Speed: Performance Booster免费
http://www.magentocommerce.com/magento-connect/zoom-full-page-cache-1742.html
这个免费插件,具体不知什么原因,我没成功起来放弃,感觉好像没什么加速,

5、PageCache powered by Varnish 免费
http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html
这个插件,加速后的效果不错,他需要与varnish功能配合,在正常访问时,加速是相当的块,但是在网站环境发生变化,如登录、注册、增加购物车后,缓冲就失效了,如果不介意这个,倒也可以用。

6、Turpentine – Varnish Cache 免费
http://www.magentocommerce.com/magento-connect/turpentine-6332.html  
这个也是varnish配合的插件,但是与PageCache powered by Varnish 相比,控制性少了些,缺点也是一样的。

7、Memcached缓冲,这个应是系统级缓冲
Memcached 是高效开源缓存机制被广泛应用到很多站点的缓存服务器。Memcached经常和MySQL服务器安装在同台服务器上,但由于数据库服务器经常需要很大内存,而Memcached对内存的需求也很大,因此这里就会有内存的瓶颈。在一些情况下,Memcached其实是从数据库服务器上分离出来,运行在独立的服务器上的,这样就避免了和数据库服务器竞争内存的情况。这个我也测试过,加速非常的快,致使一点就是但是在网站环境发生变化,如登录、注册、增加购物车后,面页上相关无法跟随变化。

8、Brim's Full Page Cache  149美元
http://www.magentocommerce.com/magento-connect/full-page-cache-7153.html
这个插件,不影响核心文件,涉及的文件自成体系,可以通过在xml定义块中增加不缓冲的语法,即可达到在全页缓冲时局部更新,其它功能测试正常,加速效果也理想,代码无加密,可以正常使用。

9、Full Page Cache Pro   349美元
http://www.magentocommerce.com/magento-connect/full-page-cache-multi-level-5450.html
这个插件涉及文件比较多,特别是js文件,安装后,系统后台崩溃了,无法测试了。

10、Full Cache  299美元
http://www.magentocommerce.com/magento-connect/catalog/product/view/id/14800/s/full-cache-9622/
这个插件,不影响核心文件,涉及的文件自成体系,可以在后台配置中直接对不需要缓冲的块进行定义,也可对url有指定元素的页不缓冲,而且有调试功能,可以在页上标注缓冲的情况,以便与我们进行了解。加速性能也很好。

11、另外还有一些apc加速,xcache加速,apc加速我试过了,没什么感觉,不知是否有其它问题。
12、memcached配合magento,在local.xml中增加相应的配置,那个速度叫做快啊,太快了,可惜网页局部信息无法根据状态更新。
13、另外还有google的pagespeed加速,这个加速只涉及到如图片,css等方面,不是代码架构层次的加速
14、网站本身的加速,最好是开启目录及产品的flat的功能,将eav方式转成平面方式,以加快网站对数据库的访问。

从上述个人体验上看,推荐8的Brim's Full Page Cache和10的Full Cache ,这两个,当然网站插件装多了,可能会冲突,大家在测试时注意。

magento如何根据sku显示产品销售量

magento根据sku显示产品销售量,这个功能最好放在产品页中显示
如果放在产品目录及列表页中显示,估计需要动用较多的数据库资源,没加速缓冲时谨慎使用。
以下是示范代码

 
 $sku = nl2br($_product->getSku());
                $_productCollection = Mage::getResourceModel('reports/product_collection')
             ->addOrderedQty()
             ->addAttributeToFilter('sku', $sku)
             ->setOrder('ordered_qty', 'desc')
             ->getFirstItem();
             $product = $_productCollection;
 
             echo 'Already Bought: '.(int)$product->ordered_qty; 



或者是以下方式,大同小异

function  getQuantityOrderedBySku($sku)
{
    try {
     $_product = Mage::getResourceModel('reports/product_collection')
       ->addOrderedQty()
       ->addAttributeToFilter('sku', $sku)
       ->setOrder('ordered_qty', 'desc')
       ->getFirstItem();
     if (!$_product) {
       throw new Exception('No product matches the given SKU');
     }
     return (int)$_product->getOrderedQty();
     }
     catch (Exception $e) {
     return 0;
     }
}

magento支持的paypal站内iframe支付模式

网站的站内支付,能大量提升支付的成功率,由于跳转支付存在的信任的问题,经常用户到第三方支付页后放弃支付。
其实paypal做为最大的第三方支付商,提供了各种支付手段,其中就有站内支付,由于各个国家信用程度的不同,支持站内支付方式也不一样,在magento后台选择paypal国家区域时,系统会自动进行支付方式过滤。
站内主要支付以下几个国家:
United States
United Kingdom
Australia
Canada
France
Italy
Spain
Hong Kong
Japan
paypa的支付方式基本上是叫Website Payments Pro ,各个国家名称可能会不一样。

其中United States和United Kingdom支持,在选择支付模式时直接输入信用卡资料,这种是最理想的,如下图。

其它国家支持支付在完成后通过iframe方式跳出支付信息,如下图:

其中各个国家的帐户显示的不同的语言,如香港帐户显示中文,日本帐户显示日文,这个文字由帐户所在国家决定。

大家可能通过在developer.paypal.com开 发环境中选择建立开发帐户,然后设置各个国家的测试帐户进行测试
Name on Card: Any Name
Type: VISA
Card #: 4485362859528762
CVV #: 528
在测试环境中,可用上述信用卡资料时行试支付,日期随便填,大于当前月份即可。

(转)Mangento速度优化(加速)完整攻略,完整大全,总结的经验

1.开启Gzip,去掉网站根目录下.htaccess部分代码注释,修改成如下形式:(这个不是很理解)
第一部分:

############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
SetOutputFilter DEFLATE
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don’t compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
<IfModule mod_ssl.c>
############################################

第二部分:

## enable resulting html compression
php_flag zlib.output_compression on

第三部分:
在php.ini中将zlib.output_compression = Off改为zlib.output_compression = On

2.在my.cnf中修改或添加如下代码:(修改Mysql服务器的配置好好利用服务器的内存)

key_buffer = 512M
max_allowed_packet = 64M
table_cache = 512
sort_buffer_size = 4m
read_buffer_size = 4m
read_rnd_buffer_size = 2m
myisam_sort_buffer_size = 64m
tmp_table_size = 128m
query_cache_size = 96m
query_cache_type = 1
thread_cache_size = 8
max_connections = 400
wait_timeout = 300

3.给文件指定有效期
网站根目录.htaccess最后添加:

<ifmodule mod_headers.c>
<filesmatch “\.(html|htm|txt)$”>
header set cache-control “max-age=3600″
</filesmatch>
<filesmatch “\.(css|js|swf)$”>
header set cache-control “max-age=86400″
</filesmatch>
<filesmatch “\.(ico|gif|png|flv|pdf)$”>
header set cache-control “max-age=86400″
</filesmatch>
<filesmatch “\.(jpeg|jpg)$”>
header set cache-control “max-age=86400″
</filesmatch>
</ifmodule>

4.关闭Etag
网站根目录.htaccess添加:

FileETag none

5.-bash: pecl: command not found的解决方法
-bash: pecl: command not found
出现这个问题是因为没有安装php的扩展开发导致的,建议将php以及apache的开发都安装上,使用如下的命令。
yum install php-devel php-pear httpd-devel

6.Centos6.0安装APC
安装: 命令行输入:
pecl install apc
如果报错-bash: pecl: command not found,参看上面一条,第5条
安装完毕后在/usr/lib/php/modules中出现apc.so
然后在/etc/php.ini中加入:
extension=apc.so
重启Apache
phpinfo出来APC的相关内容
在php.ini 中重新配置如下:

[apc]
extension = apc.so
apc.cache_by_default = On
apc.coredump_unmap = Off
apc.enable_cli = 0
apc.enabled = 1
apc.file_update_protection = 2
apc.filters = “”
apc.gc_ttl = 3600
apc.include_once_override = Off
apc.max_file_size = 5M
apc.mmap_file_mask = “”
apc.num_files_hint = 1000
apc.report_autofilter = Off
apc.shm_segments = 2
apc.shm_size = 512
apc.slam_defense = 0
apc.stat = On
apc.stat_ctime = Off
apc.ttl = 0
apc.user_entries_hint = 4096
apc.user_ttl = 0
apc.write_lock = On

安装好APC后,在Magento中app/etc/local.xml中加入下面的代码:

 <global>
………….
     <cache>
          <backend>apc</backend>
          <prefix>MAGE01_</prefix>
     </cache>
 </global>
…………………………….

7.将magento的缓存挂载到内存, 提高读取速度
将magento的cache和session文件夹mount到内存里, 提高读取cache和session的速度
mount -t tmpfs -o size=256M,mode=0777 tmpfs /你网站存放文件夹/var/cache/
mount -t tmpfs -o size=64M,mode=0777 tmpfs /你网站存放文件夹/var/session/
#注意修改为你的文件夹路径,为了能够重启后生效,请在/etc/fstab文件里加入
tmpfs  /你网站存放文件夹/var/cache/ tmpfs size=256,mode=0777 0 0
tmpfs /你网站存放文件夹/var/session/ tmpfs size=64,mode=0777 0 0

8.设置apache 开启 KeepAlive
KeepAlive = On
LoadModule deflate_module modules/mod_deflate.so #开启mod_deflate

来源:http://www.wujinlin.com/mangento%E9%80%9F%E5%BA%A6%E4%BC%98%E5%8C%96-%E5%8A%A0%E9%80%9F-%E5%AE%8C%E6%95%B4%E6%94%BB%E7%95%A5/

Magento:新模块的xml配置中设置title,keywords,description内容

当使用插件,或许会新建一个页,这时如何在方便的页中设置指定的title,keywords,description呢,一种当然是在代码中直接进行设置,但有一个更方便的方法,就是在xml中进行设置
代码如下:

<reference name="head">
    <action method="setTitle"><title>新模块标题</title></action>
    <action method="setKeywords"><title>your, module, keywords</title></action>
    <action method="setDescription"><title>Your Module Description</title></action>
</reference>