Замяна на пътя на img в node

Лесната работа с изображение си има някои недостатъци. Поставяйки изображение директно в нод използваме статичния път на изображението. В процес на разработка - на локална инсталация, се натрупват доста нодове в които са поставени така нещата. За щастие може с няколко реда код след като качим проекта онлайн да сменим всички пътища на изображенията с нови.

Следващия код ще вземе всички нодове ($query = db_select('node', 'n');) тип Basic page ($query -> condition('type', 'page','=');) и ще замени локалния път (/~sve/site1.com) на изображенията с нов (http://site2.org).

$query = db_select('node', 'n');
$query -> fields('n',array('nid'));
$query -> condition('type', 'page','=');
$records = $query -> execute();
 
foreach ($records AS $record) {
  $node = node_load($record->nid);
  if (isset($node->body['und'])) {
    $body = $node->body['und'][0]['value'];
    $node->body['und'][0]['value'] = str_replace('/~sve/site1.com','<a href="http://site2.org'">http://site2.org'</a>,$body);
    node_save($node);
  }
}

Забележка: Преди да правите подобни гимнастики се уверете, че познавате много добре съдържанието на въпросните нодове - за да не замените нещо което не би трябвало.

Забележка 2: В случай, че съдържанието е повече и timeout на сървъра прекъсне операцията може да се направи batch процес http://razni-raboti.com/node/19, да се изпълни от конзола или да се ползва VBO.

EDIT:
Коригиране на файловият път за прикачени файлове в друпал 6 при преместване от мултисайт на отделна инсталация:

$q = db_query("SELECT*FROM {files}");
while ($r = db_fetch_array($q)) {
  $nfp = str_replace('domain_name', 'default', $r['filepath']);
  if ($nfp) {
    db_query("UPDATE {files} SET filepath = '%s' WHERE fid = '%d'", $nfp, $r['fid']);
  }
}
Categories: