Drupal標準のコンテンツではなく、既存のテーブルのデータ一覧を表示する場合、Views Custom Tableモジュールを利用することにより、テーブル内容をViewsに表示することができますが、今回は、カスタムモジュールを作成し、以下のような「employee」テーブルをDrupal上に表示します。
カスタムモジュールの作成
今回のカスタムモジュールも前回作成したHello Worldモジュール同様に、ControllerBaseを継承するコントローラ クラスを作成します。
モジュール作成に必要なファイルとしては、前回と同様以下の3種類のファイルです。
modules/
└── custom/
└── employee_list/
├── employee_list.info.yml
├── employee_list.routing.yml
└── src/
└── Controller/
└── EmployeeListController.php
employee_list.info.ymlの内容としては、以下のように記述します。
name: Employeeの一覧
description: カスタムテーブルemployeeの一覧表示
package: Custom
type: module
core: 8.x
employee_list.routing.ymlの内容としては、以下のように記述します。
employee_list.list:
path: '/list_employee'
defaults:
_controller: '\Drupal\employee_list\Controller\EmployeeListController::list'
_title: 'Employeeの一覧'
requirements:
_permission: 'access content'
上記の記述により、パス'/list_employee'にアクセスすると、タイトルが'Employeeの一覧'のページが表示され、ページには、EmployeeListControllerクラスのlistメソッドの内容が表示されます。
EmployeeListController.phpには、以下のように記述します。
<?php
namespace Drupal\employee_list\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* EmployeeListControllerクラス
*/
class EmployeeListController extends ControllerBase {
/**
* employeeテーブルからのリストの取得
*/
function queryEmployeeList($header) {
// employeeテーブルのqueryを行う
$query = \Drupal::database()->select('employee', 'emp');
$query->fields('emp', ['employee_id','dept_code','name','kana','position','telephone','mail']);
// ヘッダーにソート項目を指定
$table_sort = $query->extend('Drupal\Core\Database\Query\TableSortExtender')->orderByHeader($header);
// ページャーを使用。表示件数:5行
$pager = $table_sort->extend('Drupal\Core\Database\Query\PagerSelectExtender')->limit(5);
$results = $pager->execute()->fetchAll();
// 出力用の配列を初期化
$output = array();
// query結果を出力用の配列にセット
foreach ($results as $row) {
$output[] = [
'employee_id' => $row->employee_id,
'dept_code' => $row->dept_code,
'name' => $row->name,
'kana' => $row->kana,
'position' => $row->position,
'telephone' => $row->telephone,
'mail' => $row->mail,
];
}
return $output;
}
/**
* employeeテーブルの一覧表示
*
* @return array
* Return markup array.
*/
public function list() {
// 'field'で指定された項目がソート項目となる
$header = [
[ 'data' => '社員ID', 'field' => 'employee_id', 'sort' => 'asc' ],
[ 'data' => '部門コード', 'field' => 'dept_code' ],
[ 'data' => '名前', ],
[ 'data' => 'カナ', 'field' => 'kana' ],
[ 'data' => '職位', ],
[ 'data' => '電話', ],
[ 'data' => 'メール', ],
];
$output = $this->queryEmployeeList($header);
$form['table'] = [
'#type' => 'table',
'#header' => $header,
'#rows' => $output,
'#empty' => 'データがありません',
];
// pagerの表示
$form['pager'] = [
'#type' => 'pager'
];
return $form;
}
}
上記のように、ページャーの指定、ヘッダー項目のソートの指定を行うことができ、パス'/list_employee'にアクセスすると、以下のように表示されます。
ソースファイル
上記のemployee_listモジュールのソースファイルは以下に置きました。
コメント
コメントを追加