Drupal代碼編寫規範

1.在代碼中不要使用非id的字符串來判斷邏輯,如:判斷一個用戶是否有某個小組角色,錯誤的使用方法:

$user_group_roles = og_get_user_roles('node', $gid, $user->uid);

if (in_array('小組管理員', $user_group_roles)) {}

正確的使用方法:

$user_group_roles = og_get_user_roles('node', $gid, $user->uid);

if (array_key_exists(RESOURCE_GROUP_EXPERT_RID, $user_group_roles)) { }

2.不要直接使用arg(),先定義一個有語義的變量,將arg()賦值,再使用該變量。

3.如果對比的兩個變量類型不同,那麼不能用 !== 去判斷, ===及!==都要慎用!

if ($node->field_course_visibility['und'][0]['value'] != COURSE_VIEW_PRIORITY_PRIVATE

if ($node->field_course_visibility['und'][0]['value'] !== COURSE_VIEW_PRIORITY_PRIVATE

4.編寫可重用的代碼,建立項目API文檔供團隊成員查詢使用

5.文件,目錄組織及命令要遵守drupal的規範

6.變量名,函數名有語義,SQL語句關鍵字大寫,縮進兩個空格,運算符、控制語句內,該空格空格,該折行折行。如:if else之間是折行的。

7.代碼注重效率,簡潔,可讀性好(分解代碼),註釋要詳細。

8.成員之間可相互做code review,有利於瞭解項目的其它功能,提升代碼編寫能力。

9.ajax調用時的url路徑值,要寫成非簡潔url的格式,以保證支持各種不同的服務器環境

$.ajax({

  type: "POST",

  url: '?q='+$( "#slider-range-max" ).attr('url'),

  data: "progress="+progress,

  success: function(){

           

  }

});

10.在讀取添加編輯刪除entity相關內容時,如節點,分類,用戶,評論等,都可以使用entity_metadata_wrapper()來實現,避免因字段結構不明產生的問題。

11.不要直接查詢核心或第三方模塊提供的表,要以API的方式調用,自己的功能模塊寫的表也是,模塊都要提供相應的API封裝。

12.若是自定義顯示用戶自行輸入保存到數據庫的內容,顯示時要加輸入格式過濾函數:check_markup, 或check_url, check_plain

12.儘量使用:Drupal.behaviors.*** 來代替jquery的頁面載入事件:$(document).ready

14.儘量將.module中的API函數分散放到不同的inc文件中,按需加載(module_load_include()),減少.module的代碼加載量

15.輸出特定的日期格式時,要使用format_date函數,以使用系統內定義好日期格式,方便統一管理。

如:format_date($comment->created, 'short'); 而不要自己寫:date('Y-m-d', $comment->created);

16.不在代碼中設置特殊的變量值,如ip地址,帳號信息等。也不用常量,這些都放在variable中,提供一個變量設置界面,別忘了賦好權限。就像google分析模塊,phpmailer模塊等一樣。

好處:1.有利於權限控制,只有相應管理員角色才能在正式站點配置這些敏感信息。 2.防止同一個系統,多個項目並存的開發模式下,代碼之間有太多敏感的不同之處,不能方便的覆蓋,改一個還得去再改另一個。

17.非在文件字段中上傳的文件,例如是直接放在文件目錄裏被引用的文件,文件名儘量不要是中文,否則有些服務器的系統環境裏,svn無法checkout

18.給模板增加變量時,可以先判斷哪些頁面需要這個變量,再去處理,比如在 _preprocess_page 裏,每個頁面加載時都會通過這個預處理函數去處理變量,

如果有變量的生成比較麻煩,花時間長,那麼對每個頁面都會有性能損失,所以可以只針對某些頁面路徑去定義。

19.hook_init裏的代碼是不會進入緩存中的,慎用!

20.非全局性css和js,在模塊中使用 drupal_add_css, drupal_add_js 來加載,並儘量使用文件形式,而非在模塊代碼里加載。

21.如果在上線維護階段,且是多人協作,那麼做一個任務時,如果增加了新模塊,且代碼中有依賴此模塊(如:調用了此模塊的API),一定要在代碼中判斷新模塊是否已經存在,如果不存在,也不會報錯,影響其他成員的開發環境。

22.如果因爲不得已的原因修改了第三方模塊,應該把該模塊從contrib文件夾轉移到contrib_custom文件夾。已表明是修改了第三方模塊。

23.詞彙表使用時,儘量不使用vid,要使用machine_name。如:menu中有分類的參 數,$items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name'] ,SQL中有條件是某個詞彙表時,使用詞彙表的machine name,而不是vid。views中如果要使用詞彙表作爲動態參數,也要注意儘量使用詞彙表的machine name。

分類導出再導入到另一個系統裏後,vid可能會變化,但是machine name只要沒有重複的就會保持,所以通過machine name調用詞彙表的功能還可正常使用。

24.如果修改了第三方模塊的代碼,應該將其轉移到custom目錄中,以表明此模塊被修改了,不要再直接覆蓋升級。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章