2011-01-22 36 views
2

我正在爲基於drupal的客戶端創建一個站點,並且客戶端希望匿名用戶(未登錄)能夠創建新節點,但只能創建一個未發佈的節點。然後,管理員可以在發佈自己之前查看節點並對其進行修改。允許匿名用戶在Drupal中創建未發佈的節點?

我已經看過使用觸發器和動作,但編寫自定義觸發器模塊似乎有點令人生畏,因爲我現在對Drupal API不太流利。任何想法都表示讚賞。

+0

你在使用CCK嗎? – tpow 2011-01-22 22:41:17

回答

1

可以完成,如果沒有自定義編碼或觸發器/動作。

您可以使用2種不同的節點類型,每種類型一個,然後在顯示時對待它們。或者,您應該能夠在nodeapi的「預留」操作中根據角色發佈或取消發佈。

只需將匿名用戶內容類型的默認「狀態」設置爲取消發佈,並設置內容類型的權限即可允許匿名用戶創建該類型的內容。

2

無需自定義編碼或觸發器/操作即可完成。只需將內容類型的默認設置爲取消發佈,並設置內容類型的權限以允許匿名用戶創建該類型的內容。

+0

這可以工作...除了每當經過身份驗證的用戶(不一定是管理員)發佈節點時,他們都必須確保並檢查發佈的框。這似乎有點不方便......你能想出一種通過認證用戶自動發佈節點的方法嗎? – 2011-01-22 22:46:11

0

您可以將默認發佈狀態設置爲未發佈 - 並將匿名用戶隱藏該字段。

然後,您可以創建一個視圖 - 或者僅使用管理部分中的「內容」鏈接來查看具有匿名作者的頁面,並且不發佈 - 然後您可以從那裏查看節點。

1

謝謝去@mirzu。任何有興趣,我用下面的代碼:

function hook_nodeapi($node, $op, $a3 = NULL, $a4 = NULL) 
{ 
    global $user; 
    if($op == 'presave' && !$user->uid) 
    { 
     db_query('UPDATE node SET status="0" WHERE nid="' . $node->nid . '"'); 
    } 
} 
1

在你hook_nodeapi() 'presave' 而不是:

db_query('UPDATE node SET status="0" WHERE nid="' . $node->nid . '"'); 

你能不能只使用:

$node->status = 0; 
2

爲Drupal 7,你可以申請@Mirzu的解決方案是這樣的:

function <your-module-name>_node_presave($node) { 
    if (user_is_anonymous()) 
     $node->status = FALSE; // means unpublished 
} 

當然,你可以用相反的方法做到這一點:
Def將內容類型設置爲未發佈的,然後將其設置爲已發佈以供掛鉤中的已認證用戶使用。