Drupal網站搭建好、數據導入或者編輯完成後,如果需要大批量修改内容,可以有多種辦法:
1、最原始:MySQL語句
找到MySQL數據庫中需要修改的内容放置的字段,用MySQL UPDATE語句來直接替換,其運行效率最高,但實現不方便、出錯後無法挽回、頁面時間沒有變化;
2、最傻瓜:Scanner模塊
今天找到一個用于search和replace的模塊Scanner,安裝試了一下,很容易使用,替換後是生成一個新的版本,如果有問題可以批量還原,選項也很豐富:大小寫敏感查找、全詞查詢、加前後綴設置、正則表達式查找、分類查找、分内容類型查詢、自定義字段查找、隻查找不替換等;
3、最靈活:PHP程序
以前也曾經編寫過PHP程序來實現一些查找、替換,這就可以相當靈活,将各種條件進行組合,各種方式查找匹配,各種字段用于替換等,是否生成新版本可以控制,隻是編寫起來麻煩一些。
评论1
補充一段批量替換的PHP代碼
Google Webmaster Tools中發現khm.bizdirlib.com有很多找不到的鍊接報錯,檢查是因為原始數據中Product List字段裡面包含有:
這樣的内容,裡面的鍊接導緻有問題,下面的程序可以進行批量修改,替換掉<和>之間的内容,變成
這樣,程序如下:
<?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" ?>