在用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数据表新办法
可以用下面的语句把两个表全部清空,然后插入、更新内容:
执行后请检查典型页面。