根据属性值获取可配置产品configurable product下的子产品 simple

根据属性值获取可配置产品configurable product下的简单产品 simple product。 详细说明看下面代码注释。

$product = Mage::getModel('catalog/product')->load('2639');//configurable产品

$collection = Mage::getResourceModel('catalog/product_type_configurable_product_collection')
                    ->setProductFilter($product);
$collection->addAttributeToSelect('*');

$collection->addAttributeToFilter('color', 4); //color是配置选项,4 是color属性值的ID

foreach($collection as $p){
     print_r($p->getData());
}

Magento2配置redis缓存 session / page_cache

Magento2配置redis缓存,包括redis保存session, cache  page_cache

session redis配置

修改文件:app/etc/env.php session的节点改成下面的

'session' => 
   array (
   'save' => 'redis',
   'redis' => 
      array (
	'host' => '127.0.0.1',
	'port' => '6379',
	'password' => '',
	'timeout' => '2.5',
	'persistent_identifier' => '',
	'database' => '0',
	'compression_threshold' => '2048',
	'compression_library' => 'gzip',
	'log_level' => '1',
	'max_concurrency' => '6',
	'break_after_frontend' => '5',
	'break_after_adminhtml' => '30',
	'first_lifetime' => '600',
	'bot_first_lifetime' => '60',
	'bot_lifetime' => '7200',
	'disable_locking' => '0',
	'min_lifetime' => '60',
	'max_lifetime' => '2592000'
    )
),

特别说明:Magento 2.0.6及后面的版本才支持 redis保存session 官网说明链接:http://devdocs.magento.com/guides/v2.0/config-guide/redis/redis-session.html

page cache redis配置

	'cache' => array(
	  'frontend' => array(
		'default' => array(
		  'backend' => 'Cm_Cache_Backend_Redis',
		  'backend_options' => array(
			'server' => '127.0.0.1',
			'port' => '6379',
			'persistent' => 'mage2', // Specify a unique string like "cache-db0" to enable persistent connections.
			'database' => '0',
			'password' => '',
			'force_standalone' => '0', // 0 for phpredis, 1 for standalone PHP
			'connect_retries' => '1', // Reduces errors due to random connection failures
			'read_timeout' => '10', // Set read timeout duration
			'automatic_cleaning_factor' => '0', // Disabled by default
			'compress_data' => '1', // 0-9 for compression level, recommended: 0 or 1
			'compress_tags' => '1', // 0-9 for compression level, recommended: 0 or 1
			'compress_threshold' => '20480', // Strings below this size will not be compressed
			'compression_lib' => 'gzip', // Supports gzip, lzf and snappy,
			'use_lua' => '0' // Lua scripts should be used for some operations
		  )
		),
		'page_cache' => array(
		  'backend' => 'Cm_Cache_Backend_Redis',
		  'backend_options' => array(
			'server' => '127.0.0.1',
			'port' => '6379',
			'persistent' => 'mage2', // Specify a unique string like "cache-db0" to enable persistent connections.
			'database' => '1', // Separate database 1 to keep FPC separately
			'password' => '',
			'force_standalone' => '0', // 0 for phpredis, 1 for standalone PHP
			'connect_retries' => '1', // Reduces errors due to random connection failures
			'lifetimelimit' => '57600', // 16 hours of lifetime for cache record
			'compress_data' => '0' // DISABLE compression for EE FPC since it already uses compression
		  )
		)
	  )
	),

官网说明链接:http://devdocs.magento.com/guides/v2.0/config-guide/redis/redis-pg-cache.html

验证配置

验证配置成功与否,最简单的就是先清空magento2网站var目录下面的 session 和cache文件夹,然后再运行网站前台,网站没出错而且这2个文件夹下面也没有生成其他的文件 就已经配置成功了。 当然,你可以安装上面给出来的官网链接里面的方法检查。

让Magento前台显示空白页面

没错,你没看错,这里说的不是magento前台显示空白的错误问题,而是就要magento显示空白页面。一些APP就有这种需求,不显示网页版的内容。而我这是把magento当成了一个订单管理系统来用,把其他magento的网站的订单都整合到一个站里面,就不需要显示前端页面了,后台能用就好。 废话说多了,下面是实现代码。

<default>
    <remove name="root"/>
</default>

把这段代码加到合适的位置就能实现前台显示空白页面。 只让首页显示空白可以把这代码加到CMS/编辑首页/设计>页面布局>更新XML里面。 全部前台页面都不显示的话 请加到当前模板的layout文件夹下面的合适xml文件里。

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 HTTPS $ishttps;
}

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

//$_SERVER['HTTPS']
$this-&gt;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_Abstract $object)
    {
        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系列才是正确的选择,能速度把网站搭起来,对程序员的要求也会相对低很多。