Оглядываясь назад, лучше всего убедиться, что люди используют функции Drupal для создания всех ссылок:
l
(это буква L)
drupal_get_path()
base_path()
Функция l()
берет на себя заботы о базовых путях и обеспечивает систематический способ определения ваших URL. Использование таких вещей, как theme_image()
плюс функция l()
- это верный выигрыш. Используйте вторую и третью функции, описанные выше, если вам нужно написать свои собственные теги <a>
и для использования внутри функций темы, таких как theme_image()
.
Но для вашей текущей ситуации:
Что касается решения Энди, было бы лучше, если бы вы могли ограничить свои изменения определенными полями базы данных, в которых, как вы знаете, расположены ссылки.
Итак, напишите запрос, чтобы выбрать все эти поля (например, все поля тела):
$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
и node_save
, которые лучше подходят для правильной загрузки и сохранения узлов, чтобы обеспечить более общее решение (для замены текста в блоках и т. Д.).
Для ваших файлов я бы предложил хорошую команду ol 'sed
, выполнив что-то вроде следующего из вашей папки "sites":
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.