Drupal

Drupal 11 でルートとコントローラーを定義する

概要

画面を追加する場合は、ルーティング定義とコントローラーを分離します。アクセス権もルートで明示します。

実施例

example_tools.hello:
  path: '/example-tools/hello'
  defaults:
    _controller: '\Drupal\example_tools\Controller\HelloController::page'
    _title: 'Hello'
  requirements:
    _permission: 'access content'

注意点

画面ロジックにDB接続やグローバル関数を直接書かず、必要なサービスを依存性注入で受け取ります。

参考: 公式ドキュメント

続きを読む

Drupal 11 の最小カスタムモジュールを作る

結論

Drupal 11でモジュールとして認識させるために必須なのは、モジュール情報を定義する .info.yml です。hookは必須ではありません。独自ページを表示する場合は .routing.yml とControllerを追加し、Drupalの処理へ介入したい場合だけ必要なhookを実装します。

ここでは、公開ページ /pixie-hello と hook_help() を持つ、コピーして試せる最小構成を作ります。

前提

  • Drupal 11がComposer構成でインストール済みであること
  • Drupalのドキュメントルートが web であること。構成が異なる場合は、そのドキュメントルートへ読み替えること
  • Drushを vendor/bin/drush から実行できること

完成するディレクトリ構成

web/modules/custom/pixie_hello を作り、次の4ファイルを配置します。

続きを読む

Drupal 8 で、HTML マークアップに URL リンクを含めて戻り値を返す方法

$entity->toLink(..)という便利なヘルパー関数があるらしい。最後は->toString()で文字列にして$this->t(...)に渡す。

public function foo(Request $request = NULL) {

  $id = $request->get('id');  // from query string
  $entity = YourEntity::load($id);

  $message = $this->t('Check at @url.', [
    '@url' => $entity->toLink('<TEXT_TO_LINK_HERE>', 'edit-form')->toString(),
  ]);

  return [
    '#type' => 'markup',
    '#markup' => $message, 
  ];
}
続きを読む

Drupal 8 で、リスト表示でチェックボックスを表示する方法

以下の例では、['active']['data']のように、['active']につづいて['data']キーが必要である。

public function buildRow(EntityInterface $entity) {

  $row['active']['data'] = [  // @IMPORTANT: add ['data'] here
    '#type' => 'checkbox',
    '#default_value' => (bool) $entity->isActive(),
    '#checked' => (bool) $entity->isActive(),
    '#attributes' => ['disabled' => 'disabled'],
    '#disabled' => TRUE,
  ];

  return $row + parent::buildRow($entity);
}

リスト中なので、チェックボックスは表示するだけて編集不可にしたいが、その場合は

続きを読む

Drupal 8 で、カスタムブロックの設定対象となるフィールド文字列を翻訳可能にする

Drupal 8 で、カスタムブロックだけを提供するモジュールを作成するには、例としてmy_custom_block.info.ymlとMyCustomBlock.phpの 2つのファイルを書くだけでよいが、設定フィールドを翻訳可能にするには、3つ目のファイルであるスキーマファイルmy_custom_block.ymlを用意すればよい。

続きを読む
Drupal を購読