2014-03-05 47 views
0

我有一個名爲「Publications」的內容類型,在該內容類型中,我有兩個字段,即「第一作者」和「作者」。我已經在這兩個領域創造了很多內容,並且他們都有很多信息。 我需要做的是複製或移動從「第一作者」字段到「作者」字段的所有內容這兩個字段都是節點引用,我正在使用Drupal 7.在同一內容類型中從一個字段複製到另一個字段drupal

這是可能的模塊或可能從SQL。我不知道該怎麼辦,我一直在試圖從周做到這一點,我被困:(請大家幫忙!

非常感謝!

回答

1

你應該寫一個模塊來做到這一點。

你將需要做一些事情這樣的功能:

<?php 
$type = "publications"; 
$nodes = node_load_multiple(array(), array('type' => $type)); 
foreach($nodes as $node){ 
    $node->field_authors[LANGUAGE_NONE][0]['nid'] = $node->field_first_author[LANGUAGE_NONE][0]['nid']; 
    node_save($node); 
} 
?> 

對於一個單獨的腳本,則需要添加如下內容:

require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

然後上面的代碼。

,你會因此有一個叫updateAuthors.php具有以下內容PHP:

<?php 
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

    $type = "publications"; 
    $nodes = node_load_multiple(array(), array('type' => $type)); 
    foreach($nodes as $node){ 
     $node->field_authors[LANGUAGE_NONE][0]['nid'] = $node->field_first_author[LANGUAGE_NONE][0]['nid']; 
     node_save($node); 
    } 
?> 

要first_author在field_authors新node_reference添加值,你需要做的是這樣的:

<?php 
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

    $type = "publications"; 
    $nodes = node_load_multiple(array(), array('type' => $type)); 
    foreach($nodes as $node){ 
     $firstAuthor = $node->field_first_author[LANGUAGE_NONE][0]['nid']; 
     if ($firstAuthor === false){ 
      continue; 
     } 
     $numberOfValuesInFieldAuthors = count($node->field_authors[LANGUAGE_NONE]); 
     $node->field_authors[LANGUAGE_NONE][$numberOfValuesInFieldAuthors]['nid'] = $firstAuthor 
     node_save($node); 
    } 
?> 

這將跳過沒有第一個作者集的節點,而對於有一個集合的節點,將field_first_author中的值作爲新節點引用添加到field_authors字段中

+0

作爲編寫模塊的替代方案,您可以簡單地將一個php文件放在drupal根目錄中,包含bootstrap include,然後添加上面的代碼 - 然後您只需導航到瀏覽器中的腳本。例如。 http://localhost/migrate-authors.php – PiX06

+0

非常感謝您的幫助,我是Drupal的新手,並且因此而迷失。我將如何編寫一個模塊?它困難嗎?它會如何工作?代碼只提到field_authors,它如何知道抓取所有field_first_author並將其複製到那裏? 對不起所有的問題,我真的需要幫助!另一種選擇是將php文件放在drupal根目錄中,但是,包含「bootstrap include」的含義是什麼,以及如何包含它? 非常感謝您的幫助,希望您能多幫助我:) – user3385791

+0

我犯了一個錯字,賦值運算符右側引用的字段名稱應該是field_author。我已經更新了上面的答案,其中包含了加載所有drupal函數和模塊的drupal bootstrap代碼 – PiX06

相關問題