当前位置

为Drupal 7的Ubercart 3产品批量添加Attributes

James Qi 在 2012年12月28日 - 23:56 提交
内容摘要:在用Drupal 7搭建Business Profile Report这个网站的过程中,遇到一个产品有多种不同License对应不同价格的情况,可以用Ubercart 3中的Attributes功能来......

  在用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"

?>

评论

-- 发自IP地址: 58.48.27.144 (位置 | 谁是)

可以用下面的语句把两个表全部清空,然后插入、更新内容:

TRUNCATE uc_product_attributes;

INSERT INTO uc_product_attributes(nid) SELECT nid FROM uc_products;
UPDATE uc_product_attributes SET aid='1',label='License',ordering='0',default_option='1',required='1',display='2';

TRUNCATE uc_product_options;

INSERT INTO uc_product_options(nid) SELECT nid FROM uc_products;
UPDATE uc_product_options SET oid='1',cost='0',price='0',weight='-10',ordering='-10' WHERE oid='';

INSERT INTO uc_product_options(nid) SELECT nid FROM uc_products;
UPDATE uc_product_options SET oid='2',cost='0',price='110',weight='0',ordering='0' WHERE oid='';

INSERT INTO uc_product_options(nid) SELECT nid FROM uc_products;
UPDATE uc_product_options SET oid='3',cost='0',price='550',weight='10',ordering='10' WHERE oid='';

执行后请检查典型页面。

 

 

James Qi / 祁劲松