נתקלתי בצורך להעביר מאות תמונות משדה CCK אחד, לשדה שני (דרופל 5). למזלי, מבנה שני השדות היה זהה, למעט שם השדה.
על מנת להעביר את תוכן השדה כתבתי קוד קצר, והצבתי אותו במודול, כמפורט להלן.
על מנת לייצר את רשימת התכנים לשינוי, ביצעתי שאילתא פשוטה לדטה בייס, ולא הסתבכתי עם פונקציות מורכבות.
אזהרה: הקוד איננו עומד בכל הקריטריונים של קוד תקין בדרופל.
<?php
function mymodule_menu($may_cache) {
if ($may_cache) {
$items[] = array (
'path' => 'mymodule_move_fields',
'callback' => 'mymodule_move_fields',
'access' => user_access('administer content'),
);
}
return $items;
}
function mymodule_move_fields() {
$vids = array (378, 555, 378, 557, 657, ..., 784); // A list of vids to change
foreach ($vids as $vid) {
// Load each node
$node = node_load (array('vid' => $vid));
if (count($node->field_3rd_party_image)){
foreach ($node->field_3rd_party_image as $key => $image){
// Copy each image's info
$node->field_images[] = $image;
// And remove the obsolete one
unset($node->field_3rd_party_image[$key]);
}
// Save the node
node_save($node);
}
}
return 'This concludes it';
}
?>
בעקבות הערה שקיבלתי: הקוד
בעקבות הערה שקיבלתי: הקוד לעיל מתייחס להעברת תוכן בין שדות של אותו תוכן, ולא בין תכנים שונים. ניתן להתאים את הקוד לתכנים שונים, ע"י שינוי ה-nid, אלא שאז יש לטפל גם בטבלת files, ולמחוק משם את השורה הרלוונטית.
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות