2011-07-22 16 views
0

如何從php代碼發佈節點?試過簡單的查詢db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid);但它不起作用。 我的場景:默認情況下節點未發佈。我正在改變編輯節點的形式來添加文本字段。如果用戶輸入正確的代碼節點成爲發佈。因此,我在form_alter中添加了另一個提交函數,並在該函數中檢查了代碼,以及是否正確嘗試將節點狀態更新爲已發佈。Drupal 6,如何從代碼發佈節點

+0

你可能會顯示更多您所使用的代碼?你是否在Drupal 6或7的表單提交處理程序中執行代碼? – kiamlaluno

回答

0

嘗試使用內置於drupal的node_loadnode_save函數。

+0

試過這個:'$ node = node_load(array(「nid」=> $ form ['nid'] ['#value'])); $ node-> status = 1; node_save($節點);'。不起作用。 – breethe

+0

你知道它失敗的地方嗎?任何錯誤消息? – nmc

+0

沒有錯誤。只是不工作。 – breethe

0
  1. 檢查您的自定義模塊/主題是否啓用。

  2. 我也會嘗試通過Drupal界面創建一個節點(使其未發佈)。然後在您的自定義模塊中運行,看看它是否有效。

1

最好不要直接對數據庫模式進行編碼,因爲寫入查詢會引入冗餘。您應該始終使用節點API。

執行節點保存時,Drupal會調用節點api。這使應用程序中的所有其他模塊有機會以任何他們希望的方式修改節點。所以,你的代碼可能正常工作,而不是你所期望的。例如,另一個模塊可以在設置節點狀態後重新寫入您的值。

這可能有點難以調試。你可以嘗試改變你的代碼運行的模塊的權重,以便在其他任何事情之後被調用。這是您可以直接修改數據庫模式的少數例外之一(有一個模塊可以在UI中公開模塊權重,但這是一個可怕的想法)。我不特別喜歡依靠模塊權重來獲得代碼的工作。你可能最終會遇到競爭狀況,但這至少會把這看作是原因。

參見:
http://api.drupal.org/api/drupal/modules--node--node.module/function/node_save/6

4
<?php 
// load the node object 
$node = node_load($nid); 
// set status property to 1 
$node->status = 1; 
// re-save the node 
node_save($node); 
?> 

而且,我看到了你的使用$形式的評論[ 'NID'] [ '#值'。你確定該變量保存節點ID值嗎?通常你會在表單的提交處理程序上執行代碼,這意味着你將使用類似於:$ form_state ['values'] ['nid']來獲取$ form ['nid']元素的值。

例子:

<?php 
function mymodule_myform() { 
    $form = array(); 
    $form['nid'] = array(
    '#type' => 'textfield', 
    '#title' => 'Node ID to Publish' 
); 
    $form['submit'] = array('#type' => 'submit', '#value' => 'Submit'); 
} 

function mymodule_myform_submit($form, &$form_state) { 
    $node = node_load($form_state['values']['nid']); 

    if ($node) { 
    $node->status = 1; 
    node_save($node); 
    } 
} 
+0

所有變量都保持正確的值。一般來說你的代碼和我的一樣。仍然有更新節點狀態的問題... – breethe

+0

至少你有一個理智的檢查,並知道這應該工作。現在你可以開始尋找其他地方......也許新模塊,自定義模塊或其他可能會干擾nodeapi的東西。也許嘗試使用不同的內容類型作爲測試。 – Coder1

相關問題