事后看来,最好的方法是确保人们使用 Drupal 函数来建立所有链接:
l(那是字母L)
drupal_get_path()
base_path()
该l()函数解决了基本路径问题,并提供了一种系统化的方式来定义您的 URL。使用诸如theme_image()plusl()功能之类的东西是肯定的。如果您必须编写自己的<a>标签并在主题函数(如theme_image().
但是对于您目前的情况:
至于 Andy 的解决方案,如果您可以将更改限制在您知道链接所在的某些数据库字段中,那就更好了。
所以编写一个查询来选择所有这些字段(例如所有正文字段):
$my_query = db_query("SELECT vid, body FROM {node_revisions}");
例如,这将使您获得表body中的每个字段node_revisions,因此即使您的旧修订版也将具有正确的链接。
然后运行这些结果,str_replace()对每个结果进行操作,然后将更改写回:
while($node = db_fetch_object($my_query)) {
$new_body = str_replace('what you have', 'what you want', $node->body);
db_query("UPDATE {node_revisions} SET body = '%s' WHERE vid = %d", $new_body, $node->vid);
}
我显然会先在一个记录上尝试它,以确保您的代码按预期运行(只需添加一个WHERE vid = 5,例如,将其缩小到一个修订版)。此外,我没有利用node_loadand node_save,它更适合正确加载和保存节点,以便提供更通用的解决方案(供您替换块中的文本等)。
对于您的文件,我会建议一个好的 ol'sed命令,通过在您的“站点”文件夹中运行类似以下内容:
find ./ -type f -exec sed -i ’s/string1/string2/’ {} \;
从这里找到了,所以看看那个网站以获得更多解释。如果你要使用路径,你要么需要/在你的命令版本中转义路径sed,要么使用不同的sed分隔符(即你可以写s#string1#string2#而不是s/string1/string2/,所以你可以写s#/drupalsite/img/#/img#而不是s/\/drupalsite\/img\//\/img/:- )。另请参阅 Drupal 手册页面以获取快速sed命令:http ://drupal.org/node/128513 。
有点乱,这就是为什么我尝试预先使用正确的功能。但是,如果您希望他们创建 Drupal 内容但又不想让他们访问“PHP 过滤器”输入格式,或者他们根本不了解 PHP,这将是困难的。正确的 Drupal 主题,在基本的 HTML/CSS 工作之后的任何时候,都需要 PHP 和 Drupal 的主题相关函数的知识。