2011-02-16 165 views
0

因此,這很可能會在黑暗中拍攝,但那裏的人誰知道一點的Drupal和更好的實現了從章的註釋模塊。 2 Pro Drupal 7開發問:註釋模塊

你知道如何改變註釋模塊,所有用戶都可以註釋嗎?現在,只有管理員可以註釋,並將其作爲編輯的擴展來呈現。

正在使用的特定代碼在這個倉庫(幾乎直接從書):http://github.com/dsharkey/Drupal-Module-Development--Annotate-Module

而且,我真的不看到註釋模塊是怎麼說都被呈現的?我相信它由PHP的以下行(從annotate.admin.inc):

$instance = array(
      'field_name' => 'annotation', 
      'entity_type' => 'node', 
      'bundle' => $key, 
      'label' => t('Annotation'), 
      'widget_type' => 'text_textarea_with_summary', 
      'settings' => array('display_summary' => TRUE), 
      'display' => array(
      'default' => array(
       'type' => 'text_default', 
      ), 
      'teaser' => array(
       'type' => 'text_summary_or_trimmed', 
      ), 
     ), 
    ); 
$instance = field_create_instance($instance); 

但我不知道如何做任何事情超過創建一個實例和自身附着到一個節點。它爲什麼顯示它的位置(作爲編輯旁邊的選項)?

謝謝大家!

回答

1

我不知道你指當你說「作爲未來的選項編輯」到什麼,但你上傳的代碼(仔細檢查這本書本身,使用的代碼)不會導致該。事實上,你應該看到下面的正文字段的字段,當您編輯與註釋的節點啓用:

Annotations location

原因無它,只出現在你編輯現有的節點(而不是當你創建一個它不是讓所有的用戶註釋節點新節點)與您的第一個問題:在hook_node_load()實現,它專門檢查是否用戶編輯節點相同的節點的業主;如果不是,則隱藏註釋字段:

/** 
* Implements hook_node_load() 
*/ 
function annotate_node_load($nodes, $types) { 
    global $user; 
    // Check to see if the person viewing the node is the author. If not then 
    // hide the annotation. 
    foreach ($nodes as $node) { 
    if ($user->uid != $node->uid) { 
     unset($node->annotation); 
    } 
    } 
} 

因此唯一一個應該看到註釋字段的人是所有者。如果您想允許任何具有編輯訪問權限的人員註釋該節點,請刪除該功能。

至於允許任何人做出註解到節點作爲一個單獨的功能來編輯節點本身,這不是什麼例子是大約是從使用的代碼完全獨立。你將不得不尋求其他地方爲,並期待在像如何做到這一點的Drupal.org項目Annotate例子。基本上,註釋將是它們自己的獨立實體,它們可以引用節點,這與評論的工作方式大致相同。

但是,如果我可能如此大膽,你已經遇到了一個大問題Pro Drupal 7 Development因爲它不像以前的版本那樣是一個很好的開發參考:它不能很好地解釋事情在小事情上花費太多時間,在重要事情上沒有足夠時間,介紹非常糟糕的做法(包括註釋示例中的幾個),並完全忽略了Drupal 7引入的大部分內容。我建議你檢查出Drupal 7的模塊開發來代替。

+0

真棒回答馬克。非常感謝!我一定會看看你推薦的書。除了你所說的關於Pro Drupal 7的內容之外,它還包含了它提供的代碼中的錯誤。 – djs22 2011-02-16 09:28:12