我使用的是OC 2.2.0。在前端,我需要自动完成的名称和模型。现在,只有名字自动完成。在catalog/model/catalog/product.php中我更改了
$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
$sql .= " OR LCASE(p.model) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
但仍然不能自动完成模型。相反,我总是必须输入整个模型名称,但必须是自动完成的。有什么建议吗?
经过许多天的研究和查看代码,我设法理解并解决了我的问题。我看错地方了。唯一需要更改的文件是getdata.php
,它位于OC的根目录中。因此,默认的自动完成只针对产品名称。在这个文件中是这样定义的:
$sql = "SELECT pd.name FROM " . DB_PREFIX . "product p," . DB_PREFIX . "product_description pd WHERE p.status = 1 AND p.product_id = pd.product_id AND language_id = '".$id."' AND UPPER(pd.name) like UPPER('%$q%') GROUP BY pd.product_id ORDER BY pd.name ASC";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0){
while($ro = mysql_fetch_assoc($res)){
$name = str_replace( array( '''', '"', ',' , ';', '<', '>','"','&'), ' ', $ro['name']);
//$str[]= $name."'n";
echo $name."'n";
}
}
现在,您需要做的就是在oc_product表中为model或任何需要自动完成的数据库字段添加确切的查询。意思是,例如,复制名称查询并将pd.name
替换为p.model
,并在找到['name']
的地方替换为['model']
。瞧!我真的希望这能帮助到一些人,因为直到今天我自己都很难意识到这一点。