在用Drupal 7搭建Business Profile Report這個網站的過程中,遇到一個産品有多種不同License對應不同價格的情況,可以用Ubercart 3中的Attributes功能來實現。在modules中打開Ubercart的Attributes這個子模塊,然後在Attributes中添加一個叫License的屬性,并設置默認的Options選項。再在具體的頁面中為Attributes選擇License屬性,并根據需要來設置Options和調整不同的SKU編碼。
單個頁面都可以像上面隻有編輯,但我們已經有了數以十萬記的産品頁面,不可能逐一編輯,隻有設法批量來修改。我把已經修改和未修改的産品頁面的$node讀出并對比,按照已經修改過的數據來設置未修改的數據,保存後卻并沒有得到預期的效果,估計是我對于PHP數組及對象的了解還不夠,也沒有找到Ubercart中合适的函數API調用。
為了盡快解決這個問題,我用phpMyAdmin查看了這個網站對應的MySQL數據庫,發現每個修改過的頁面都在uc_product_attributes和uc_product_options這兩個表中有對應的記錄,于是可以通過在這兩個表中添加記錄在模拟人工修改頁面的過程,嘗試了幾條都可以成功。
剩下的工作是在MySQL中編寫一個循環,批量插入需要的數據就可以。但我對于MySQL的循環、子程序等不是很了解,就用PHP來編寫了一個調用MySQL插入語句的循環,程序bulk_set.php如下:
<?php $_SERVER['HTTP_HOST'] = 'report.bizdirlib.com'; $_SERVER['SCRIPT_NAME'] = '/'.'bulk_set.php'; $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; $drupal_path = '/var/www/html/report.bizdirlib.com/'; chdir($drupal_path); define('DRUPAL_ROOT', $drupal_path); require_once DRUPAL_ROOT.'includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); $nid=8; while ($nid <=190415) { echo "$nid \n"; $sql = "INSERT INTO `bizdirlib_report`.`uc_product_attributes` (`nid` ,`aid` ,`label` ,`ordering` ,`default_option` ,`required` ,`display`)VALUES ($nid, '1', 'License', '0', '1', '1', '2')"; //添加attributes表數據 $result=db_query($sql); $sql = "INSERT INTO `bizdirlib_report`.`uc_product_options` (`nid` ,`oid` ,`cost` ,`price` ,`weight` ,`ordering`)VALUES ($nid, '1', '0.00000', '0.00000', '-10', '-10'), ($nid, '2', '0.00000', '110.00000', '0', '0'), ($nid, '3', '0.00000', '550.00000', '10', '10'); "; //添加options表數據 $result=db_query($sql); $nid=$nid+1; } echo "<br>Done!<br>\n" ?>
自由标簽
评论1
補充更新uc_product_attributes和uc_product_options數據表新辦法
可以用下面的語句把兩個表全部清空,然後插入、更新内容:
執行後請檢查典型頁面。