Magento CDN加速Cloudflare开启https后无限重定向问题

Cloudflare是用的很多的免费CDN服务商,尤其是面向国外电商的网站。Cloudflare的CDN可以隐藏服务器IP,又提供免费的https服务,尤其吸引着一部分的人,特别是一些特殊的Magento网站,这里就不多说了,这里说的是Magento的系统怎么启用Cloudflare的免费https。 当Magento网站完成Cloudflare的接入后,Cloudflare就会给当前的域名签发ssl证书,这时候用 https://www.域名.com 就可以访问到magento的网站的。当然,这也只是能访问到,会出现非https加密连接被拒绝的错误。 嗯,到这里有感觉了,于是马上到magento后台开启https安全连接,然而到了这里才是本文提到的问题的开始,你会发现访问网站会无限重定向而over…

Cloudflare https和http都请求magento服务器80端口的情况

set ishttps "off";

if (http_x_forwarded_proto = "https") {
    set ishttps "on";
}
location ~ [^/]\.php(/|){

    try_files uri =404;
    fastcgi_pass  unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    fastcgi_param HTTPSishttps;
}

上面的代码放到listen 80端口的service里面,大概意思是请求的http_x_forwarded_proto是https的,向php后端传递HTTPS=on的值。
因为magento里面是用

//_SERVER['HTTPS']this->getServer('HTTPS') == 'on'

来判断https的。
写的有点匆忙,有时间再整理一篇关于magento https无限重定向在 各种环境下的解决办法的文章出来。

Magento无法设置自定义评论时间

很多magento网站都会人为的伪造很多产品评论,就会有导入产品review的需求。导入magento产品评论的代码没有难度,只是开发过程中多会碰到无法设置magento的评论自定义时间的问题,结果就是所有的评论时间几乎是一样的,这除非网站用户是智障了。。

问题产生原因

查看文件:Mage_Review_Model_Resource_Review

    /**
     * Perform actions before object save
     *
     * @param Varien_Object object
     * @return Mage_Review_Model_Resource_Review
     */
    protected function _beforeSave(Mage_Core_Model_Abstractobject)
    {
        if (!object->getId()) {object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
        }
        if (object->hasData('stores') && is_array(object->getStores())) {
            stores =object->getStores();
            stores[] = 0;object->setStores(stores);
        } elseif (object->hasData('stores')) {
            object->setStores(array(object->getStores(), 0));
        }
        return $this;
    }

上面的代码可以看出,magento的review在新建的时候强制设置了CreateAt的值,所以我们用下面的代码插入评论是没法设置自定义时间的。

$reviewModel->setData(……)->setCreateAt(时间)-save()

解决办法

简单暴力的处理方法,先save一次,再save。

$reviewModel->setData(……)-save()->setCreateAt(时间)-save()

保存2次,是不考虑性能什么的了。
修改代码,设置一个是否设置自定义时间的值IsCustomCreatedAt来控制。

    protected function _beforeSave(Mage_Core_Model_Abstract object)
    {
        if (!object->getId() and !object->getIsCustomCreatedAt()) {object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
        }
        if (object->hasData('stores') && is_array(object->getStores())) {
            stores =object->getStores();
            stores[] = 0;object->setStores(stores);
        } elseif (object->hasData('stores')) {
            object->setStores(array(object->getStores(), 0));
        }
        return $this;
    }

然后我们插入评论代码如下

$reviewModel->setData(……)->setIsCustomCreatedAt(true)->setCreateAt(时间)-save()

Magento升级操作及错误解决

最近升级了很多网站到Magento 1.9.3,这里把升级方法和碰到问题记录一下。 升级magento系统,首先第一步就是得备份。备份无非就是程序资源文件和数据库。一般的magento网站只需要拷贝网站目录副本 和导出数据库SQL文件即可。 下面的代码早前记录的【也不知道来源是哪里了】

阅读详情

悲剧的Magento版本选择故事

这一年碰到很多magento新手,来问的问题都是magento2.x版本的。这些人基本都是工作才1年左右,这里不谈编程技术水平如何如何,我比较好奇的是他们为什么会选择magento2的版本!

闲聊后,大部分竟是这种情况。。初创小公司,老板或负责人听过magento系统的大名,就让公司里面的程序员去实施了。开始,肯定就要去下载magento了,不用说,肯定用最新版本的。2.x肯定比1.9x更新吧,哈哈,然后就开始了magento2之旅了。好不容易把magento2安装成功了,接下来的就是哭天喊地了,怀疑人生了。查资料查来查去最后才搞清楚2个版本不是一回事。这还是部分能撑住的程序员,很多都已经死在了开始的路上…

这是个悲剧的magento版本选择问题,我若是入门者,估计也是会掉进这陷阱。

对于这些小初创公司,magento1系列才是正确的选择,能速度把网站搭起来,对程序员的要求也会相对低很多。