您在這裡

編寫PHP程序實現Drupal中pathauto模塊的批量生成URL别名(Alias)

James Qi 在 2011年2月10日 - 16:20 發表

  為了網站SEO的需要,我在Drupal中安裝了第三方模塊pathauto,用于在頁面生成時自動産生一個帶有關鍵詞的URL别名。不過前一陣子導入數據的時候,pathauto的事先設置沒有做好,必須在設置好了以後将前面不符合規範的别名都删除,然後重新生成。

  在菜單中有批量生成Alias的功能,但默認是每次生成50個,可以修改為幾百,再多了就會超時報錯,而且當需要重新生成的數量到10萬的時候,需要在Web頁面上操作數百次以上,很不現實,隻有設法編個程序來做了。

  好在Drupal的用戶數量很大,被數十萬個網站采用,所以各種英文資料比較齊全,讨論留言中也可以找到很多有用信息。于是我搞了下面這個小程序來實現批量生成:

<?php
include_once './includes/bootstrap.inc';
include_once './sites/all/modules/pathauto/pathauto.inc';
include_once './sites/all/modules/pathauto/pathauto_node.inc';

// The URL how you would normaly access your drupal site with a browser
$province="shanghai";
$once=100;
$times=1000;

$url = "http://$province.youbianku.com";
$drupal_base_url = parse_url($url);
$_SERVER['HTTP_HOST'] = $drupal_base_url['host'];
$_SERVER['PHP_SELF'] = $drupal_base_url['path'].'/index.php';
$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];
$_SERVER['REMOTE_ADDR'] = NULL;
$_SERVER['REQUEST_METHOD'] = NULL;

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
variable_set('pathauto_max_bulk_update', $once);
for ($i=1;$i<=$times;$i++)
{
 $start=time();
 echo "$province: $i/$times*$once";
 _pathauto_include();
 $count=node_pathauto_bulkupdate();
 if ($count==0) {exit('0 alias, Done!\n');}
 $stop=time();
 $pass=$stop-$start;
 echo "; count=$count aliases; time=$pass seconds;\n";
}
echo "Done!\n";
?>
  上面是以上海為例,每次生成100個,最多運行1000次。實際使用中每次都需要10-20秒,所以整個耗時還是很長的,如果中途遇到數據庫負載過高而連接中斷,可以重新繼續運行。

自由标簽:

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。