事后看来,最好的方法是确保人们使用 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_load
and 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 的主题相关函数的知识。