Drupal 8 模組 Module 開發(未完)

2021-09-11 03:27:19 字數 4062 閱讀 3256

我們目標:建立乙個帶有區塊(block)的模組(module)

我們建立乙個簡單模組,模組會用到內建的區塊子系統(block sub-system)來新增乙個自定義區塊,這個區塊顯示當前drupal中已經啟用的模組列表。

我們將分成三個部分:

建立drupal模組是一件很簡單的事,簡單到不需要是 php 專家,這裡我們只需要建立幾個目錄和3個小檔案就可以

我們需要給模組命名2個名字:

為了方便,這2個名字盡量類似。一般機器識別名遵循規則:人可識別名裡的空格用下劃線代替,大寫字母用小寫字母替換

drupal 8的核心模組都在 /core 資料夾下,我們不要去觸碰這個資料夾

我們把模組放在 /modules 資料夾下。雖然可以直接把模組放在modules下面,強烈建議,在 modules下建立 contrib 和 custom 二個子資料夾,用以區分模組**,方便管理。在 contrib資料夾裡的模組是**於drupal.org**上的非核心模組,custom資料夾裡放置自己開發的模組。

(以下這段比較複雜可以跳過)

由於drupal支援一次安裝,支援多個不同**,所以我們模組也可以放在 /sites/all/modules 下面(預設這些資料夾不存在,就自己建立),放在這個目錄下模組支援所有**。如果某個**需要特殊模組,我們可以放在 /sites/site_one/modules 下面,這樣只有訪問site one的時候,模組才起作用。

最後說一下,我們模組將放在 /modules/custom 資料夾下面

我們要建立drupal 8第乙個模組,叫 my first,人可識別名:my first,機器識別名:my_first

根據機器可讀名,需要建立乙個新目錄叫/modules/custom/my_first,在這資料夾下還要建立2個檔名:my_first.info.ymlmy_first.module

.info.yml檔案是為了drupal提供模組(或者 主題 theme)的資訊,這些資訊包括例如:模組名字(人類可讀名),模組說明,是否依賴其他模組,**的儲存位置等

.info.yml是乙個yaml格式檔案,它的指令格式:名字,冒號(:),值。

name: value
有些指令用類似陣列的語法來宣告乙個多值的名稱。類似下面格式

name:

- value1

- value2

縮排不可用 tab,只能是空格,空幾格無所謂,drupal用2個空格縮排。

更多關於yml格式,訪問**:中文可參考:

我們來繼續完成我們的my_first.info.yml檔案

name: my first

type: module

description : 'my first drupal 8 module'

package: drupal 8 module development

core: 8.x

dependencies:

- block

下面來解釋一下他們

還有更多可選,參考: 。

有些引數可以參考我之前寫的drupal 7裡的.info檔案

我們已經填好了 my_first.info.yml 檔案。drupal 讀取這個檔案後,會在extend頁面(www.example.com/admin/modules)顯示如下

完成了.info.yml檔案,我們來繼續編寫.module檔案

.module 是乙個php檔案,通過鉤子實現技術(hook implementations)來建立乙個模組(只要<?php開頭,最後不用?>結尾)

鉤子實現技術能簡單的在drupal系統中執行某個事件。當乙個鉤子事件觸發後,drupal就自動到所有啟用模組裡尋找匹配的鉤子,從而來實現和執行相對應的功能。

讓我們開始建立乙個簡單的my_first.module檔案,包括乙個單獨的鉤子實現技術 —— 提供顯示幫助資訊

<?php 

/** * @file

* a module demonstrating drupal coding practices and apis.

* * this module provides a block that lists all of the

* installed modules in our drupal system. it illustrates coding standards,

* practices, and api use for drupal 8.

*//**

* implements hook_help().

*/function my_first_help($route_name, \drupal\core\routing\routematchinte***ce $route_match)

}

讓我們來看一下以上**的文件塊。就是一句話:implements hook_help()。 這是drupal程式設計的標準說明方式。當我們的功能要執行乙個鉤子(hook),應該在呼叫之前說明:implements hook_name,這就方便的讓開發人員知道這個鉤子的功能。

這是乙個簡單的功能,所以我們沒有新增更多說明,和引數說明。

drupal已經定義了乙個鉤子叫hook_help(). 能呼叫內建的幫助系統。每個模組都能呼叫一次hook_help()。我們的模組只要把幫助文字寫入幫助鉤子。

<?php 

function first_help($route_name, \drupal\core\routing\routematchinte***ce $route_match)

}

用我們的模組名字my_first代替hook,寫函式my_first_help(),函式呼叫hook_help()就完成了。

hook_help()有2個引數:

我們這個例子,把精力集中在第乙個引數。幫助系統通過匹配路由(routes)在相應路徑下寫入幫助文字。

預設產生的幫助路徑是admin/help/模組名,這裡的模組名是機器識別名。而 $route_name 是help.page.my_first。如果不寫這個if判斷,就會在每個模組呼叫 hook_help()時候,都會寫入幫助內容。

啟用這個模組後,你將能訪問admin/help/my_first,得到我們之前寫的幫助資訊。如下圖:

drupal8 模組設定

建立乙個路由,在這個路由裡設定一下頁面的位址,使用的控制器方法,還有頁面的標題等等 在我們自己的模組的根目錄下 建立乙個路由配置檔案 名字可以是 routing.yml 路由檔案都是用 routing.yml 結尾的 在這個檔案裡先新增乙個路由的名字 這裡我把它設定成modal form examp...

Drupal8 新建第乙個模組

參考 drupal 8 rc 發布了。由於d8使用了symfony2的核心。與之前版本對比,模組的寫法有很大的不同。下面的例子中寫乙個單獨顯示 hello world 頁面的模組。首先要給模組起乙個唯一的機器名 machine name 機器名必須滿足 1.字母開頭 2.只能包含小寫字母和下劃線 3...

Drupal常用的模組

cck content construction kit 新增字段模組 views 生成列表 tinymce wysiwyg editor 常用的編輯器之一 ajax form builder 自定義ajax的表單 ubercart flash gallery flash相簿 civicrm crm...