会员登录

联系我们

电话:18921289006

传真:0510-88804819

EMAIL: 这个 E-mail 受所垃圾邮件程序保护,您需要启用 JavaScript 才能查看。

开发手记

JOOMLA的vm商城的关联商品更改手记

打印 Email

在使用JOOMLA的Virtuemart的过程中,发现在添加产品时的关联商品有一个问题。关联只是单向的,那样就产生一个问题,如果在后期大量添加新产品时,只能让新的关联老的,如果让旧有商品同时也关联该新产品,必须去这个产品进行重新編辑,如果产品过多,这无疑工作量是非常大的。

如果能让新产品添加时能让老产品自动相互关联,这就要更改代码来实现,先查看了数据库VM的关联商品的表里面的关联结构,是一个商品的ID对应关联商品用|相隔。如果我在添加新产品时,添加进新产品的ID的相关联商品后,然后用将他对应的商品ID一个一个的进这个数据库进行检索。如果检索不到,插进关联。如果检索得到

则将其对应的产品ID取出再进行确认,如果已经存在,刚放过(虽然不可能存在,但还是检测一下好),如果不存在,则在尾部添加此ID,替换之前的数据。

找到administrator/components/com_virtuemart/class/ps_product.php打开,找到370行:

if( !empty($d["related_products"])) {
/* Insert Pipe separated Related Product IDs */
$related_products = vmGet( $d, "related_products" );
$q  = "INSERT INTO #__{vm}_product_relations ";
$q .= "(product_id, related_products) ";
$q .= "VALUES ('".$d["product_id"]."','".$db->getEscaped($related_products)."')";
$db->setQuery($q); $db->query();
$related_products_a = explode('|',$related_products);
$db3 =new ps_DB;
foreach ($related_products_a as $related_products_b){
$db->query("SELECT related_products FROM #__{vm}_product_relations WHERE product_id='$related_products_b'");
if($db->next_record()) {
$related_products_c = explode("|", $db->f("related_products"));
if (!in_array($d["product_id"],$related_products_c)){
$related_products_c[]=$d["product_id"];
$related_products_d=implode('|',$related_products_c);
$q  = "REPLACE INTO #__{vm}_product_relations (product_id, related_products)";
$q .= " VALUES( '".$related_products_b."', '$related_products_d') ";
$db3->query($q);
}
}else{
$q  = "INSERT INTO #__{vm}_product_relations ";
$q .= "(product_id, related_products) ";
$q .= "VALUES ('".$related_products_b."','".$db->getEscaped($d["product_id"])."')";
$db3->setQuery($q); $db3->query();
}
}

}

将以上语句代替之前的代码。便可实现关联商品的相互关联