Joomla的VirtueMart商城的关联商品更改

在使用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();
 }
 }

 }

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

    分享到:

Leave a Reply