Миграция на новый домен - PullRequest
0 голосов
/ 27 июля 2010

Я работаю над сайтом drupal 6 по адресу mydomain.com/drupalsite, и дизайнер добавил туда много жестко закодированных путей к изображениям, например, пользовательскую папку img в mydomain.com/drupalsite/img. Так что большая часть сайта использует ссылки на /drupalsite/img/myimg1.png.

Вот в чем проблема - сайт в конечном итоге переходит на finaldomain.com, указав finaldomain.com на mydomain.com/drupalsite. Так что теперь пути вроде /drupalsite/img/myimg1.png будут преобразованы в finaldomain.com/drupalsite/img/myimg1.png вместо того, что должно быть finaldomain.com/img/myimg1.png. Сайт finaldomain.com должен указывать на этот подкаталог, чтобы он попадал в index.php.

Мой первый инстинкт - использовать файл .htaccess для замены / drupalsite на "", но я пробовал около дюжины различных решений, но они не сработали. Мое решение было использовать ссылки ln -s, но мне это очень не нравилось :) tia

Andrew

Ответы [ 3 ]

2 голосов
/ 27 июля 2010

Оглядываясь назад, лучше всего убедиться, что люди используют функции 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.

0 голосов
/ 27 июля 2010

Вы можете попробовать Pathologic , он должен иметь возможность исправлять пути следующим образом.

0 голосов
/ 27 июля 2010

Я делал это раньше, взяв полный дамп базы данных, открыв его в текстовом редакторе и выполнив глобальный поиск и замену путей. Затем на новом хосте загрузите измененный файл дампа, и он будет иметь правильные пути в.

...