使用Mamgi导入magento可筛选的select属性字段注意

注:本文针对的情况为Magento属性集(Attribute sets)和属性为程序批量添加的情况。如果是后台手动添加则没有这种问题。

例如csv文件的导入格式为:

"sku","store",....,"myselect"
"sku1","admin",....,"value1"
"sku2","admin",....,"value3"

这里的myselect为Magento新建的attribute,下拉可筛选的select

不同于使用magento自己的导入程序规范的csv文件格式,使用MAMGI导入的话需要更改 "value1" "value3" ..,为对应的属性字段的option的id。

可使用一下magento代码查询并替换:

$productModel = Mage::getModel('catalog/product');
$attr = $productModel->getResource()->getAttribute(" myselect
 ");
if ($attr->usesSource()) {
   $value_id = $attr->getSource()->getOptionId("value1");
}

这里的value_id的值替换"value1"再用Mamgi导入一遍即可。

Ps 泥马 被这问题吭了一天。。

Magento导入Tier Price

Magento默认无法导入Tier Price,需要在app/code/local/YOURMODULE/Catalog/Model/Convert/Adapter/Product.php 继续加入扩展方法。

已有的脚本里已实现过导入多图/多属性,自动创建目录,自动采集远程图片,现在再加导入Tier Price的功能。

核心函数:

private function _editTierPrices(&$product, $tier_prices_field = false)
{
if (($tier_prices_field) && !empty($tier_prices_field)) {
    if(trim($tier_prices_field) == 'REMOVE'){
        $product->setTierPrice(array());
    } else {
        $existing_tps = $product->getTierPrice();
        foreach($existing_tps as $key => $etp){
            $etp_lookup[$etp['price_qty']] = $key;
        }
        $incoming_tierps = explode('|',$tier_prices_field);
        foreach($incoming_tierps as $tier_str){
            $tmp = explode('=',$tier_str);
            $tps_toAdd[$tmp[0]] = array(
                                'website_id' => 0, // !!!! this is hard-coded for now
                                'cust_group' => 32000, // !!! so is this
                                'price_qty' => $tmp[0],
                                'price' => $tmp[1],
                                'delete' => ''
                            );
            if(isset($etp_lookup[$tmp[0]])){
                unset($existing_tps[$etp_lookup['price_qty']]);
            }
        }
        $tps_toAdd =  array_merge($existing_tps, $tps_toAdd);
        $product->setTierPrice($tps_toAdd);
    }
}
}

然后在saveRow函数里找地方加入:

if(
    isset($importData['tier_prices'])
    && !empty($importData['tier_prices'])
){
    $this->_editTierPrices($product, $importData['tier_prices']);
}

CSV文件里要有字段”tier_prices“,值的格式例子:qty=price|qty=price|qty=price

比如:50=12.25|500=11.70|5000=11.00

这样Magento就能导入Tier Price了

Magento: The Flat Catalog module has a limit of 64 filterable and/or sortable attributes. 错误

批量导入Magento attributeSets和Attributes之后,在重建索引的时候出现了这个错误:

The Flat Catalog module has a limit of 64 filterable and/or sortable attributes. Currently there are 772 of them. Please reduce the number of filterable/sortable attributes in order to use this module

字面上理解是Magento对于可筛选或排序的属性字段有数量限制 TAT!

排查了下,发现是在“/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php” 这文件里头的prepareFlatTable函数抛出的错误。

限制数64是在配置文件:"app/code/core/Mage/Catalog/etc/config.xml" 里,搜索“max_index_count”就会发现有段配置:

<global>
    <catalog>
        <product>
            <flat>
                <max_index_count>64
</max_index_count>
            </flat>
        </product>
    </catalog>
</global>

修改限定值64为大于772的数字后,重建索引报错“Cannot initialize the indexer process.”

由此预测这个值应该是不能改的,解决办法只好从 filterable和sortable 的字段入手,重新导入,并限制64个以内的可筛选和可排序字段。。

具体为is_filterable和used_for_sort_by都设为0再导入magento属性集和属性

另外也可以在表catalog_eav_attribute中查出is_filterable = 1和used_for_sort_by = 1的记录

限制64以内了也就解决了The Flat Catalog module has a limit of 64 filterable and/or sortable attributes.这错误。。

实用的iptables防火墙规则

#!/bin/sh

#####

##name:iptables_firewall

#####

 

iptables -F

iptables -X

iptables -Z

iptables -t filter -P INPUT ACCEPT

iptables -t filter -P OUTPUT ACCEPT

iptables -t filter -P FORWARD ACCEPT

iptables -t nat -F

iptables -t mangle -F

iptables -t filter -F

 

###安全策略###

###禁止用nmap扫描服务器端口

iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP                  # NMAP FIN/URG/PSH

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP                      # Xmas Tree

iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP              # Another Xmas Tree

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP                       # Null Scan(possibly)

iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP                          # SYN/RST

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP                         # SYN/FIN -- Scan(possibly)

 

###防止 synflood 攻击的设定

iptables -N synfoold

iptables -A synfoold -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j RETURN        #每秒最多4个syn联机封包进入

iptables -A synfoold -p tcp -j REJECT --reject-with tcp-reset

iptables -A INPUT -p tcp -m state --state NEW -j synfoold

 

###防止 Ping of Death

iptables -N bad-ping

iptables -A bad-ping -p icmp --icmp-type echo-request -m limit --limit 1/s -j RETURN

iptables -A bad-ping -p icmp -j REJECT

iptables -I INPUT -p icmp --icmp-type echo-request -m state --state NEW -j bad-ping

 

###进入本机包

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p icmp -j ACCEPT

iptables -A INPUT -p udp --sport 53 -j ACCEPT     ###允许dns query

iptables -A INPUT -p tcp --dport 22 -j ACCEPT     ###进入本机ssh

iptables -A INPUT -p tcp -m multiport --destination-port 53,80,21,22,3306,10001 -j ACCEPT

 

###定义默认策略

iptables -t filter -P INPUT DROP

iptables -t filter -P OUTPUT ACCEPT

iptables -t filter -P FORWARD DROP

iptables -t nat -vnL

iptables -t mangle -vnL

iptables -t filter -vnL

service iptables save

标签: iptables

linux network无法启动解决

/service network start 报错:Bringing up interface eth0:  Device does not seem to be present, delaying initialization. [FAILED] 

解决办法:ifconfig -a 查看eth0的HWaddr值

打开/etc/sysconfig/network-scripts/ifcfg-eth0 文件

修改为:

 

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

IPADDR=你的IP

NETMASK=255.255.255.192

HWADDR=00:16:3E:F2:A0:9C

 

重新启动network服务,得以PING通

标签: linux, network