你在这里


Drupal页面内容的批量查找、替换的几种办法

James Qi 2013年5月22日 - 14:36 发布

  Drupal网站搭建好、数据导入或者编辑完成后,如果需要大批量修改内容,可以有多种办法:

1、最原始:MySQL语句

  找到MySQL数据库中需要修改的内容放置的字段,用MySQL UPDATE语句来直接替换,其运行效率最高,但实现不方便、出错后无法挽回、页面时间没有变化;

2、最傻瓜:Scanner模块

  今天找到一个用于search和replace的模块Scanner,安装试了一下,很容易使用,替换后是生成一个新的版本,如果有问题可以批量还原,选项也很丰富:大小写敏感查找、全词查询、加前后缀设置、正则表达式查找、分类查找、分内容类型查询、自定义字段查找、只查找不替换等;

3、最灵活:PHP程序

  以前也曾经编写过PHP程序来实现一些查找、替换,这就可以相当灵活,将各种条件进行组合,各种方式查找匹配,各种字段用于替换等,是否生成新版本可以控制,只是编写起来麻烦一些。

自由标签:

评论

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

  Google Webmaster Tools中发现khm.bizdirlib.com有很多找不到的链接报错,检查是因为原始数据中Product List字段里面包含有:

Branch Listing provided by <a href="banking/banking-and-finance/tpc-thaneakea-phum-cambodia-ltd-10660.html">TPC - Thaneakea Phum (Cambodia), Ltd.

  这样的内容,里面的链接导致有问题,下面的程序可以进行批量修改,替换掉<和>之间的内容,变成

Branch Listing provided by TPC - Thaneakea Phum (Cambodia), Ltd.

  这样,程序如下:

<?php
//程序开头注释部分开始
/*

批量替换字段

统计数据:
count //本次修改的总计数

*/
//程序开头注释部分结束

//定义区开始,请在下面填写国家代码

$country_code='khm';//国家代码

$_SERVER['HTTP_HOST'] = "$country_code.bizdirlib.com";
$_SERVER['SCRIPT_NAME'] = "/replace.php";
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

$drupal_path = '/var/www/html/drupal7.bizdirlib.com/';
chdir($drupal_path);

define('DRUPAL_ROOT', $drupal_path);

#require_once './includes/bootstrap.inc';
require_once DRUPAL_ROOT.'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$node_type = "country";
$limit = 10000;
$offset = 0;
$sql = "SELECT node.nid FROM {node} WHERE node.type = '$node_type' LIMIT $limit OFFSET $offset";
$result = db_query($sql);

$count=0;
while ($anode = $result->fetch()) {
$nid=$anode->nid;
$node=node_load($nid);
//print_r($node);
//将CCK数据库字段读出赋值给变量

$product_list=$node->field_product_list['und'][0]['value'];

//print "product_list=$product_list\n";

$pos1=strpos($product_list,'<');
$pos2=strpos($product_list,'>');
if ($pos1!==FALSE) {
$count++;
$new=$node;

$product_list_new=substr($product_list,0,$pos1).substr($product_list,$pos2+1);
print "count=$count nid=$nid: $product_list -> $product_list_new\n";
$new->field_product_list['und'][0]['value']=$product_list_new;

node_save($new);
}

}

echo "<br>count=$count Done!<br>\n"

?>

 

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符