Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Drupalのコア要素を知る
~構築と運用を支える道具立て~
白根健司(しらねけんじ)
(株)シナジークエスト
CMSMix Sapporo
2016年2月27日
趣旨
Drupal でよく耳にする・・・
• 大規模事例多数(特に海外)
• エンタープライズ指向!
• コンテンツ管理 "フレームワーク"(=CMF not CMS)
・・・本日そういう話はちょっと置いといて、
• Drupal のサイト構築...
自己紹介
• 白根健司(しらねけんじ)
– 妻1人、子供2人
– 老眼進行中
– ポンコツ中年
– Drupal 使用歴 9年くらい
• Drupal 4.6 の頃から少しずつ…
– 「Drupal さっぽろ」 事務局&雑用係
• 月例の Dr...
内容
• 全体構造
• フィールドとエンティティ
– ノード、コメント、タクソノミー、ユーザー、ファイル
• Views モジュール(=クエリビルダ)
• ブロックシステムとテーマ
• contributed モジュールの利用
– 例)Feed...
全体像
Drupal ってどんな CMS ?
Drupal の紹介
• Drupal(ドゥルーパル)とは
– PHP で記述されたオープンソース Web コンテンツ管理ソフトウェア
• GPLv2 ライセンス
• CMS Web サイトの 4.9%(全 Web サイトの 2.2%)が Dr...
国内のコミュニティ
• 定期的な Meetup
– Drupal Cafe
• https://www.facebook.com/DrupalCafe
– Drupal さっぽろ
• http://drupalsapporo.net/
• 質問...
Drupal のレイヤー構造
1. データ(エンティティ)
– システムの基礎となるデータ
2. モジュール
– 個々の機能を提供するプログラム
3. 出力コンテンツ
– ページ:URLが割り当てられる
– ブロック:ページ内の区画に出力
4....
モジュール = building block
• Drupal の機能を拡張するソフトウェア(プログラム)
• 次の3つに分類される:
– Core モジュール
• Drupal 本体に含まれる標準機能モジュール
• 追加コンポーネントのダウン...
フィールドとエンティティ
システム上で統合的に永続化データを扱うための共通概念
エンティティとタイプ
• エンティティとは?
– Drupal のデータベースに保管される構造化データを一般化したもの
• コア標準の管理 UI でフィールド設計を定義できる
• エンティティ タイプ
– エンティティはその用途・目的に応じたタ...
バンドル(bundle)
• バンドル
– エンティティ タイプにフィールドを関連付けた実装のこと
– 標準の UI でフィールド設計の定義や編集ができる
ページ
Body フィールド
・・・
ノード
エンティティ
タイプ
バンドル
フィールド
• フィールドとは
– 再利用可能なデータ断片
– データの用途・目的に応じたタイプ(型)を持つ
– ウィジェットを持つ
• 値の編集機能を提供する
• 値の表示機能を提供する
ページ
Body フィールド
・・・
ノード
エンティティ
ブログ記事
本文フィールド
写真フィールド
・・・
カテゴリ
用語名
用語説明
・・・
ターム
タグ
用語名
・・・
エンティティタイプ
バンドル
ノードからエンティティへ:flexinode、CCK、field
最初から現在のような構造だったわけではありません。
• flexinode モジュール
– https://www.drupal.org/project/flexinode
– ...
多様なフィールド拡張モジュール
さまざまなフィールドのモジュールが提供されている:
– 数値、選択肢、一般のファイル、画像ファイル(コア)
• 画像は 「画像スタイル」 として種々の変換処理を定義することもできる
– リンク
• サイト内/外の...
参照による関連の定義
• エンティティ参照フィールドで関連を定義できる
– 多重度(1対1、1対多)も指定できる
– 例)ノードからタクソノミータームを参照
• 特定のノードコンテンツが参照先のタームに分類されることを表す
– 多重度 > 1 ...
エンティティの活用事例:Drupal Commerce
• Drupal 7 ベースの EC サイト構築モジュール
– 商品、注文、顧客、注文明細などの EC エンティティを提供
– 各エンティティは Drupal 共通のフィールド UI でカ...
サンプル例:「お気に入り動画」 ノードタイプ
• お気に入りの動画を保存するノードのタイプ
– Video Embed Field モジュールを利用して・・・
• https://www.drupal.org/project/video_emb...
Views モジュール
UI でデータの問合せを定義できるクエリビルダ
View と Views モジュール
• データベース用語の "View"
– ビュー(View)表
• ひとつ以上のテーブルから任意のデータを選択&カスタマイズして表したもの
• 一度定義すれば、同じ条件に基づく結果を簡単に取得できる
• 何...
クエリ(問合せ)の構成要素
SQL 疑似コード例)
SELECT TITLE // 列 → フィールド
FROM BLOG // 表 → エンティティ
WHERE PUBLISH=TRUE // 抽出条件
ORDER BY POSTDATE; ...
Views モジュールの UI
取得するフィールド
(SELECT)
選択条件(WHERE)
並べ替え条件(ORDER
BY)
その他の設定オプション
• ディスプレイ
– Views の出力先を指定する(ブロック、ページ、フィード、・・・)
• フォーマット
– 出力の形式を指定する
• HTML List (ul)、グリッド、テーブル、フォーマットされていないリスト...
テーマとブロックシステム
テンプレート内の区画(リージョン)にコンテンツを配置する仕組み
Drupal のレイヤー構造
1. データ(エンティティ)
– システムの基礎となるデータ
2. モジュール
– 個々の機能を提供するプログラム
3. 出力コンテンツ
– ページ:URLが割り当てられる
– ブロック:ページ内の区画に出力
4....
テーマとテーマ エンジン
• テーマとは?
– サイトの外観を定義する、テンプレート、スタイルシート、スクリプト等を
まとめたソフトウェアパッケージのこと
– Drupal サイトに導入できる種々のテーマが開発・公開されている
• テーマ エン...
テーマの例
• コアに付属するテーマ
– Bartik
• Drupal 7 インストール後の初期デフォルト テーマ
– Garland
• Drupal 5 のコア標準テーマ、Color モジュール対応、fixed/fluid 切替対応
– ...
Drupal サイトのテーマを管理する
1. デフォルトテーマの設定
2. 管理用テーマの設定
3. テーマのグローバル設定
– ロゴ
– サイト名とスローガン
– ショートカットアイコン(ファビコン)
– ユーザーのアイコン(アバター)
– ...
1. デフォルト テーマの設定
• デフォルトテーマの設定
– 有効にするだけでなくデフォルト テーマにすることで通常表示されるテーマを指定する
• デフォルトテーマとは、一般のサイト訪問者に表示されるテーマ(フロントエンドテーマ)のこと
デフ...
2. 管理用テーマの設定
• 管理用テーマ
– サイトの管理に関するパス(URL)に適用されるテーマ
• /admin 配下のパスを持つページ
– コンテンツ編集用のページに適用することもできる
– デフォルトテーマの設定ページの一番下にある ...
3. テーマのグローバル設定 (1)
• 全テーマ共通の環境設定
– インストール済みの全テーマに適用されるデフォルト設定を指定できる
• パス: admin/appearance/settings
• 個別のテーマの設定で再定義できる
3. テーマのグローバル設定 (2)
設定項目 説明
ロゴ ロゴは、デフォルトでテーマディレクトリの直下にある logo.png というファイル
が使われる。別のファイルをアップロードしたり、別のパスを指定することもでき
る。テーマ設定で有効に...
3. テーマのグローバル設定 (3)
設定項目 説明
メインメニュー
セカンダリー メニュー
このチェックボックスをオンにすると、テンプレートファイル page.tpl.php で
使用する変数 $main_menu と $secondary_...
4. カスタム テーマ設定
• テーマやモジュールによって提供されるテーマ設定
– 特定のテーマやモジュールによって提供されるテーマ設定もある
• 例)Garland テーマの [コンテンツの幅] 設定
– 固定幅か可変幅(フルード)かを指定する
5. テーマの追加インストール
• テーマのインストール場所:
– themes フォルダ
• コアのテーマのインストール場所
• サイト固有のカスタムテーマはここにインストールしないこと
– インストールするとコアの更新で削除されたり上書きさ...
Drupal 7 テーマを構成するファイル (1)
出典(図)https://drupal.org/node/171194
リージョン
コンテンツの出力先となる
ページ内の区画領域のこと
Drupal 7 テーマを構成するファイル (2)
• .info ファイル(必須)
– テーマのメタデータ、スタイルシート、JSファイル、リージョン等を定義
– .info ファイルの名前がテーマの内部名を定義する
• テンプレート(.tpl...
リージョンについて
• リージョンとは?
– コンテンツの出力先となる、ページ内の区画領域のこと
• テンプレート内の該当する位置にコンテンツ出力コードを埋め込んで実装する
– HTML マークアップの高レベルの構造定義に用いられる
• リージ...
コアのデフォルト リージョン (1)
• Drupal コアが定義するリージョン
– プログラムから利用できる9つのデフォルト リージョンが用意されている
• .info ファイルの書式で記述すると次のようになる:
• regions[] の記...
コアのデフォルト リージョン (2)
page_top
page_bottom
footer
header
sidebar_secondsidebar_first
highlighted
content
help
コアのデフォルト リージョン (3)
• 主要リージョンの解説
– page_top、page_bottom
• サイトが正常に動作するために必要な必須リージョン
• ブロック設定の UI には表示されない非表示リージョン(後述)
– high...
(参考)html.tpl.php の内容
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd...
リージョンへのコンテンツ割り当て
• ブロック リージョン
– テンプレート内に設けられる、コンテンツの出力先となる区画
• .info における定義構文
– 内部名:処理系が使用する識別名
– 表示名:ブロックの管理 UI に表示される表示名...
サブテーマ
• サブテーマとは
– 既存のテーマを継承して作成するカスタマイズ版テーマのこと
• 詳細はこちら ⇒ https://drupal.org/node/225125
• サブテーマを作るには
– 新しいテーマを作る
• sites/...
テーマを利用した出力のカスタマイズについて
• ほとんどそのまま使えるが、一部どうしても変更したい・・・
– という場合にどうするか?
テーマ関数について
• テーマ関数とは?
– モジュールが提供する、オーバーライド可能なコンテンツ生成用の関数
• モジュール内の各部から必要に応じて呼び出されるマークアップ生成処理
– 目的:
• テーマ側でカスタマイズ可能な HTML マー...
テーマ関数のオーバーライド
• テーマ関数をオーバーライドする手順
1. 目的のテーマ関数をソースやドキュメントで探して
オリジナルのソースを見つけ出す
2. 入手したソースをテーマの template.php に貼り付ける
3. テーマ関数名...
サンプル:サブテーマの作成例
• 例)Bootstrap テーマ
– Bootstrap を利用したテーマの作成用に用意されたベーステーマ
• https://www.drupal.org/project/bootstrap
– サブテーマを作...
サンプル:テーマ関数のオーバーライド例
• 要求
– 動画コンテンツタイプの作成者欄にユーザー名が表示される。
– これを先にユーザーに追加した 「ハンドル名」 フィールド」に変えたい・・・
• 対応方法
– ノードの作成者欄のユーザー名出力の...
結果
contributed モジュールによる
システム機能の実装
さまざまな機能を提供するモジュールの活用
拡張/contributed モジュール
• コア API に基づいて作られるアドオン機能
• コアにない機能を追加する
• コアの動作を再定義する
• さまざまな機能を組み込める
膨大な数の資産があります
例)Panels モジュール
• ページ内のレイアウトを自在に定義
• コンテキストに応じてレイアウトを変更
例)Context モジュール
• 前後関係に基づく条件に
応じてサイトの要素を
多様に変化させる
例)Rules モジュール
• イベント、条件、アクションを定義
• サイト上で発生するイベントに基づき
さまざまなサイト挙動を実現する
例)Feeds モジュール
• フィードを読み込んでサイトの
データベースに取り込む
– https://www.drupal.org/project/feeds
サンプル:Feeds を使ってみる
• YouTube のフィードを読み込んでみる
– 動画フィードのURL:
• https://www.youtube.com/feeds/videos.xml?channel_id=[チャンネルID]
• ...
フィードの内容
<feed xmlns:yt="http://www.youtube.com/xml/schemas/2015" xmlns:media="http://search.yahoo.com/mr
ss/"xmlns="http:/...
パーサーの設定
entry 要素の下の・・・
id 要素は GUID (一意識別ID)にマップ
title 要素はタイトルにマップ
link 要素の href 属性は
動画フィールドの URL にマップ
media:group/media:de...
Drupal 8 について
最新の Drupal リリース
• 2015年11月にリリースされた Drupal の最新版
– https://www.drupal.org/8
• 特徴
– インプレース編集
– 構成情報をコンテンツデータベースと分離
– 多言語機能の強化...
REST と "Headless Drupal"
• REST (REpresentational State Transfer)
– HTTP をそのまま利用したリソース公開手法
• URL でリソースを識別する
• HTTP メソッドで処理...
HTTP メソッド
メソッド
HTTP
説明
1.0 1.1
GET ◎ ◎ URIで指定したリソースを取得する。
HEAD ◎ ◎ GET と同じだがヘッダーのみを取得する。
POST ○ ○ クライアントから名前と値のペアの集合としてデータ...
Drupal 7 の REST 実装
• Services モジュール
– https://www.drupal.org/project/services
• Services Views モジュール
– https://www.drupal....
REST in Drupal 8 Core
• RESTful Web Services (rest)
– エンティティやその他のリソースを RESTful API で公開する
• Serialization (serialization)
–...
Drupal 8 サイトの REST 構成管理
• Drupal 8 の構成管理
– Configuration Management in Core
• 種々の構成設定を .yml ファイルとしてインポート/エクスポートできる
• [環境設定...
REST UI モジュール
• REST の構成管理 UI を提供する (not Core)
– https://www.drupal.org/project/restui
– [環境設定] > [ウェブサービス] > [REST]
• できる...
REST リソースの設定
HTTP メソッド・データ形式・認証
• HTTP メソッド
– GET:リソースの取得
– POST:リソースの新規追加
– DELETE:リソースの削除
– PATCH:リソースの更新
• データ形式
– HAL-JSON(Hyper Ap...
各メソッドのリクエスト仕様
• 参照
– JavaScript and Drupal 8 RESTful Web Services
• https://www.drupal.org/node/2405657
• 例)
– Retrieve(取得...
注意点:CSRF対策と権限設定
• CSRF 対策
– POST/PATCH/DELETE では X-CSRF-Token ヘッダが必要
• X-CSRF-Token:CSRF 攻撃を防ぐために必要
– 下記のパスから得られるトークンをリクエス...
認証について
• 匿名アクセスでない場合は認証への対応が必要
• 例)Basic 認証の場合
– Authorization リクエストヘッダーが必要
– 値は次のとおり:
• 先頭に "Basic "
• 続けて 「<ユーザー名>:<パスワー...
コンテンツ一覧を REST で取得するには
• Views の "REST export" ディスプレイ
– フォーマットに "Serializer" を指定
– フィールドの環境設定のエイリアス
• JSON の key 値をカスタマイズでき...
AngularJS と組み合わせたサンプル
Drupal 8 Restful servivce
endpoint
endpoint
endpoint
endpoint
JSON
GET
PUT
POST
DELETE
まとめ
• Drupal のデータ管理
– 構造データをエンティティとして一般化
• コンテンツに限らない種々の構造化データを統一された API で扱える
• Views = クエリビルダ
– コーディング不要で高度なデータクエリを UI で対...
ありがとうございました
• 興味をお持ちいただけたらぜひ使ってみてください
• 勉強会もやっていますのでお気軽に遊びに来てください
– http://drupalsapporo.net/
Upcoming SlideShare
Loading in …5
×

Drupal のコア要素を知る ~構築を支える道具立て~

2,496 views

Published on

2016年2月27日に開催されたCMSMix Sapporoで発表したときのスライド資料です。サイト構築のためにDrupalが提供する道具立てとして、エンティティに基づくデータ管理、Views=クエリビルダ、ブロックシステムとテーマ、D8とRESTといった事項を簡単に紹介しています。

Published in: Internet
  • Be the first to comment

Drupal のコア要素を知る ~構築を支える道具立て~

  1. 1. Drupalのコア要素を知る ~構築と運用を支える道具立て~ 白根健司(しらねけんじ) (株)シナジークエスト CMSMix Sapporo 2016年2月27日
  2. 2. 趣旨 Drupal でよく耳にする・・・ • 大規模事例多数(特に海外) • エンタープライズ指向! • コンテンツ管理 "フレームワーク"(=CMF not CMS) ・・・本日そういう話はちょっと置いといて、 • Drupal のサイト構築で広く使われている基本機能を、 簡単なサンプルの設定例などを交えてご紹介します。
  3. 3. 自己紹介 • 白根健司(しらねけんじ) – 妻1人、子供2人 – 老眼進行中 – ポンコツ中年 – Drupal 使用歴 9年くらい • Drupal 4.6 の頃から少しずつ… – 「Drupal さっぽろ」 事務局&雑用係 • 月例の Drupal 勉強会を札幌と小樽で交互に開催しています • http://drupalsapporo.net/ – 株式会社シナジークエスト • 札幌/小樽でIT系の人材教育とサイト構築の仕事をしています https://www.facebook.com/bkenro https://twitter.com/bkenro
  4. 4. 内容 • 全体構造 • フィールドとエンティティ – ノード、コメント、タクソノミー、ユーザー、ファイル • Views モジュール(=クエリビルダ) • ブロックシステムとテーマ • contributed モジュールの利用 – 例)Feeds モジュール • Drupal 8 について – D8 コアの REST 機能 • まとめ
  5. 5. 全体像 Drupal ってどんな CMS ?
  6. 6. Drupal の紹介 • Drupal(ドゥルーパル)とは – PHP で記述されたオープンソース Web コンテンツ管理ソフトウェア • GPLv2 ライセンス • CMS Web サイトの 4.9%(全 Web サイトの 2.2%)が Drupal を使用 – 創始者:Dries Buytaert • 電子掲示板として書いたソフトウェアが出発点、2001 年に OSS 化 – ユーザーと開発者の巨大コミュニティ • drupal.org 上で日々活発な議論や情報交換 – アカウント数:1,167,000(2015年3月) – 開発者アカウント:37,000(〃) – モジュール数:33,310 – テーマ数:2,258 – ディストリ:1,017
  7. 7. 国内のコミュニティ • 定期的な Meetup – Drupal Cafe • https://www.facebook.com/DrupalCafe – Drupal さっぽろ • http://drupalsapporo.net/ • 質問を受け付けるフォーラム – https://groups.drupal.org/japan • 翻訳を共同で進めるプロジェクト – https://localize.drupal.org/translate/languages/ja
  8. 8. Drupal のレイヤー構造 1. データ(エンティティ) – システムの基礎となるデータ 2. モジュール – 個々の機能を提供するプログラム 3. 出力コンテンツ – ページ:URLが割り当てられる – ブロック:ページ内の区画に出力 4. ユーザーとアクセス許可 – ユーザーにロールを割り当て – ロールに権限を与える 5. テンプレート&テーマ – 最終的な応答コンテンツを生成する • HTML、CSS、PHP 変数 出典(図)https://drupal.org/getting-started/before/overview
  9. 9. モジュール = building block • Drupal の機能を拡張するソフトウェア(プログラム) • 次の3つに分類される: – Core モジュール • Drupal 本体に含まれる標準機能モジュール • 追加コンポーネントのダウンロードやコピー不要で最初から使用できる – 有効にするか無効にするかは設定で指定できる – Contributed モジュール • drupa.org のダウンロード セクションから入手できる拡張機能モジュール • Views、Panels、Rules、Feeds などなど、膨大な資産がある – カスタム モジュール • 独自に開発する拡張機能モジュール • 上記2つと同様にインストール、有効化して使用できる
  10. 10. フィールドとエンティティ システム上で統合的に永続化データを扱うための共通概念
  11. 11. エンティティとタイプ • エンティティとは? – Drupal のデータベースに保管される構造化データを一般化したもの • コア標準の管理 UI でフィールド設計を定義できる • エンティティ タイプ – エンティティはその用途・目的に応じたタイプに分かれる – Drupal コアの標準エンティティ タイプ • ノード :独立したページとして表示できるコンテンツ • コメント :ノードに付随して存在するコンテンツ • ファイル :サーバーにアップロードされるファイルの情報 • タクソノミー (分類用語) – ボキャブラリ :特定の目的に基づく用語の集合に関する情報 – ターム :ボキャブラリに属する個々の用語 • ユーザー :サイトのユーザーアカウント情報
  12. 12. バンドル(bundle) • バンドル – エンティティ タイプにフィールドを関連付けた実装のこと – 標準の UI でフィールド設計の定義や編集ができる ページ Body フィールド ・・・ ノード エンティティ タイプ バンドル
  13. 13. フィールド • フィールドとは – 再利用可能なデータ断片 – データの用途・目的に応じたタイプ(型)を持つ – ウィジェットを持つ • 値の編集機能を提供する • 値の表示機能を提供する
  14. 14. ページ Body フィールド ・・・ ノード エンティティ ブログ記事 本文フィールド 写真フィールド ・・・ カテゴリ 用語名 用語説明 ・・・ ターム タグ 用語名 ・・・ エンティティタイプ バンドル
  15. 15. ノードからエンティティへ:flexinode、CCK、field 最初から現在のような構造だったわけではありません。 • flexinode モジュール – https://www.drupal.org/project/flexinode – プログラミング不要でノードタイプの定義を可能に(Drupal4.6~) • CCK (Content Construction Kit) モジュール – https://www.drupal.org/project/cck – flexinode の機能を引き継ぎ(Druap 5~6) • Field モジュール/API – CMS 上の各種構造化データをエンティティに(Drupal 7~)
  16. 16. 多様なフィールド拡張モジュール さまざまなフィールドのモジュールが提供されている: – 数値、選択肢、一般のファイル、画像ファイル(コア) • 画像は 「画像スタイル」 として種々の変換処理を定義することもできる – リンク • サイト内/外のパス/URLを保持する – メディア • 外部サイトの動画等のURLを保持(+ 再生用のウィジェット) – エンティティ参照 • Entity Reference – https://www.drupal.org/project/entityreference – 別のノードやエンティティへの参照を保持する
  17. 17. 参照による関連の定義 • エンティティ参照フィールドで関連を定義できる – 多重度(1対1、1対多)も指定できる – 例)ノードからタクソノミータームを参照 • 特定のノードコンテンツが参照先のタームに分類されることを表す – 多重度 > 1 なら複数のタームを設定できる仕様(例:タグ) – 多重度 = 1 なら特定のタームにのみ分類される仕様(例:カテゴリ) ブログ記事 本文フィールド 写真フィールド ターム参照 タグ 用語名*複数値
  18. 18. エンティティの活用事例:Drupal Commerce • Drupal 7 ベースの EC サイト構築モジュール – 商品、注文、顧客、注文明細などの EC エンティティを提供 – 各エンティティは Drupal 共通のフィールド UI でカスタマイズできる • https://www.drupal.org/project/commerce • https://commerceguys.com/
  19. 19. サンプル例:「お気に入り動画」 ノードタイプ • お気に入りの動画を保存するノードのタイプ – Video Embed Field モジュールを利用して・・・ • https://www.drupal.org/project/video_embed_field
  20. 20. Views モジュール UI でデータの問合せを定義できるクエリビルダ
  21. 21. View と Views モジュール • データベース用語の "View" – ビュー(View)表 • ひとつ以上のテーブルから任意のデータを選択&カスタマイズして表したもの • 一度定義すれば、同じ条件に基づく結果を簡単に取得できる • 何に使う? – Drupal のエンティティに対する "ビュー" を作るための仕組み • https://www.drupal.org/project/views – 管理 UI を使用して特定のクエリを定義し、保存できる • 一度定義した Views はサイトの各部で再利用できる • 出力先(display)の指定: – ページ(URLが与えられて独立したコンテンツとして表示できる) – ブロック(テンプレート内のリージョンに埋め込まれるコンテンツ) – フィード(URLを与えられ、種々の形式で取り出される)
  22. 22. クエリ(問合せ)の構成要素 SQL 疑似コード例) SELECT TITLE // 列 → フィールド FROM BLOG // 表 → エンティティ WHERE PUBLISH=TRUE // 抽出条件 ORDER BY POSTDATE; // 整列条件
  23. 23. Views モジュールの UI 取得するフィールド (SELECT) 選択条件(WHERE) 並べ替え条件(ORDER BY)
  24. 24. その他の設定オプション • ディスプレイ – Views の出力先を指定する(ブロック、ページ、フィード、・・・) • フォーマット – 出力の形式を指定する • HTML List (ul)、グリッド、テーブル、フォーマットされていないリスト (div) • フィールドの詳細オプション – 表示から除外 – 結果の書き換え – CSS クラスの指定 • 行(出力される各レコード)に class 属性を付加する • Views の出力全体のコンテナに class 属性を付加する まだまだ他にも たくさん・・・
  25. 25. テーマとブロックシステム テンプレート内の区画(リージョン)にコンテンツを配置する仕組み
  26. 26. Drupal のレイヤー構造 1. データ(エンティティ) – システムの基礎となるデータ 2. モジュール – 個々の機能を提供するプログラム 3. 出力コンテンツ – ページ:URLが割り当てられる – ブロック:ページ内の区画に出力 4. ユーザーとアクセス許可 – ユーザーにロールを割り当て – ロールに権限を与える 5. テンプレート&テーマ – 最終的な応答コンテンツを生成する • HTML、CSS、PHP 変数 出典(図)https://drupal.org/getting-started/before/overview
  27. 27. テーマとテーマ エンジン • テーマとは? – サイトの外観を定義する、テンプレート、スタイルシート、スクリプト等を まとめたソフトウェアパッケージのこと – Drupal サイトに導入できる種々のテーマが開発・公開されている • テーマ エンジンとは? – テンプレートのコードを解釈して動的にコンテンツを生成する処理系 – Drupal 7 の標準テーマ エンジンは PHPTemplate • PHP で書かれた .tpl.php ファイルをそのままテンプレートとして使用する – その他のテーマエンジン • https://drupal.org/project/project_theme_engine • D8 では標準テーマエンジンが Twig になる
  28. 28. テーマの例 • コアに付属するテーマ – Bartik • Drupal 7 インストール後の初期デフォルト テーマ – Garland • Drupal 5 のコア標準テーマ、Color モジュール対応、fixed/fluid 切替対応 – Seven • Drupal 7 のデフォルト管理用テーマ – Stark • Drupal のデフォルト HTML マークアップをデモする最小構成テーマ • drupal.org の配布テーマ一覧(contributed themes) – https://www.drupal.org/project/project_theme
  29. 29. Drupal サイトのテーマを管理する 1. デフォルトテーマの設定 2. 管理用テーマの設定 3. テーマのグローバル設定 – ロゴ – サイト名とスローガン – ショートカットアイコン(ファビコン) – ユーザーのアイコン(アバター) – コメントにおけるユーザー検証の設定 – メインメニュー、セカンダリメニュー 4. カスタム テーマ設定 5. テーマの追加インストール Drupal 7 サイトにおける テーマ管理の操作内容と 設定項目を見ていきます。 下記パスからスタート: admin/appearance
  30. 30. 1. デフォルト テーマの設定 • デフォルトテーマの設定 – 有効にするだけでなくデフォルト テーマにすることで通常表示されるテーマを指定する • デフォルトテーマとは、一般のサイト訪問者に表示されるテーマ(フロントエンドテーマ)のこと デフォルトテーマが先頭に この例では Seven も有効になっている。 [デフォルトに設定] リンクをクリックすると デフォルトテーマに設定される
  31. 31. 2. 管理用テーマの設定 • 管理用テーマ – サイトの管理に関するパス(URL)に適用されるテーマ • /admin 配下のパスを持つページ – コンテンツ編集用のページに適用することもできる – デフォルトテーマの設定ページの一番下にある UI で指定する デフォルトテーマまたは インストール済みテーマの 中から選択・指定する コンテンツ編集ページに 適用することもできる
  32. 32. 3. テーマのグローバル設定 (1) • 全テーマ共通の環境設定 – インストール済みの全テーマに適用されるデフォルト設定を指定できる • パス: admin/appearance/settings • 個別のテーマの設定で再定義できる
  33. 33. 3. テーマのグローバル設定 (2) 設定項目 説明 ロゴ ロゴは、デフォルトでテーマディレクトリの直下にある logo.png というファイル が使われる。別のファイルをアップロードしたり、別のパスを指定することもでき る。テーマ設定で有効にすると、変数 $logo にロゴのパスを含むコンテンツ が設定され、テンプレートファイル page.tpl.php で利用できるようになる。 サイト名 スローガン admin/conifg/system/site-information の UI から指定でき、テー マ設定で有効にすると、それぞれ変数 $site_name、$site_slogan としてテンプレートファイル page.tpl.php から利用できるようになる。 ショートカット アイコン デフォルトは misc/favicon.ico のファイルが使用される。ロゴと同様、別 のファイルをアップロードしたり別のパスを指定することもできる。 投稿でのユーザーアバター コメントでのユーザーアバ ター それぞれ、テンプレートファイル page.tpl.php の $user_picture 変 数、テンプレートファイル comment.tpl.php ファイルの $picture 変 数の有効/無効を設定する。有効にするとノードやコメントにアバターが表示 される。 コメントの承認状況 ログインによって検証されたアカウントを使用していない場合、ユーザー名の 横に "(not verified)" と表示するオプション。この表示文字列は関数 template_process_username() で $variables['extra'] と して定義され、theme_username()で出力される。
  34. 34. 3. テーマのグローバル設定 (3) 設定項目 説明 メインメニュー セカンダリー メニュー このチェックボックスをオンにすると、テンプレートファイル page.tpl.php で 使用する変数 $main_menu と $secondary_menu にそれぞれ のメニューのリンクを格納した配列がセットされる。どの定義済みメニューをメ インとセカンダリに使用するのかは、admin/structure/menu/settings の設定 UI から指定できる。デフォルトでは次のメニューが設定されている。 メインメニュー admin/structure/menu/manage/main-menu セカンダリメニュー admin/structure/menu/manage/user-menu いずれも、テンプレートファイル page.tpl.php 内で theme_links() 関数を使用して出力される単純な単一階層メニューだが、高度なナビゲー ションのデザインが難しいため、これらのメニューを使用する代わりに、メニュー 用のリージョンを用意してブロックとしてメニューを出力するテーマも多い。
  35. 35. 4. カスタム テーマ設定 • テーマやモジュールによって提供されるテーマ設定 – 特定のテーマやモジュールによって提供されるテーマ設定もある • 例)Garland テーマの [コンテンツの幅] 設定 – 固定幅か可変幅(フルード)かを指定する
  36. 36. 5. テーマの追加インストール • テーマのインストール場所: – themes フォルダ • コアのテーマのインストール場所 • サイト固有のカスタムテーマはここにインストールしないこと – インストールするとコアの更新で削除されたり上書きされる恐れがある – sites/all/themes フォルダ • Drupal のインストール環境すべてで共用されるテーマはここにインストールする • 管理画面からテーマをダウンロードした場合もここにインストールされる – sites/<サイト名>/themes フォルダ • マルチサイトにおける特定サイト固有のテーマはここにインストールする – <サイト名> にはサイトのドメインが入る • テーマインストーラの利用 – UI にテーマの tar.gz ファイルの URL を指定して実行する • http://example.com/admin/appearance/install • sites/all/themes の下にインストールされる
  37. 37. Drupal 7 テーマを構成するファイル (1) 出典(図)https://drupal.org/node/171194 リージョン コンテンツの出力先となる ページ内の区画領域のこと
  38. 38. Drupal 7 テーマを構成するファイル (2) • .info ファイル(必須) – テーマのメタデータ、スタイルシート、JSファイル、リージョン等を定義 – .info ファイルの名前がテーマの内部名を定義する • テンプレート(.tpl.php)ファイル – 動的に生成される特定部分のマークアップ コンテンツを定義する • HTML、RSS (XML)、・・・ – 既定のファイルを独自のバージョンで置き換えることができる • 既定のファイルと同名ファイルをテーマのディレクトリ配下に配置するとそちらが優先して使用される • suggestion:テンプレートファイルの適用対象を絞り込む命名規則 • template.php – ロジックやデータ処理を行うコードを記述するファイル • 出力前の前処理、テーマ関数(後述)のオーバーライド 等 • その他 – ロゴ、スクリーンショット – theme-settings.php
  39. 39. リージョンについて • リージョンとは? – コンテンツの出力先となる、ページ内の区画領域のこと • テンプレート内の該当する位置にコンテンツ出力コードを埋め込んで実装する – HTML マークアップの高レベルの構造定義に用いられる • リージョンに出力されるひとまとまりのコンテンツをブロックと呼ぶ – コアの UI を利用してリージョンにブロックを割り当てる • パス: admin/structure/block • 出力先のリージョンを変更することで ブロックの表示位置を自由に変更できる – テーマとの関係 • リージョンの配置、表示、スタイル等は テーマによって定義される
  40. 40. コアのデフォルト リージョン (1) • Drupal コアが定義するリージョン – プログラムから利用できる9つのデフォルト リージョンが用意されている • .info ファイルの書式で記述すると次のようになる: • regions[] の記述がなければ、このデフォルト リージョンが適用される • regions[] の記述を(1つでも)すると .info に従ってリージョンが設定される regions[page_top] = Page Top regions[header] = Header regions[highlighted] = Highlighted regions[help] = Help regions[content] = Content regions[sidebar_first] = Sidebar First regions[sidebar_second] = Sidebar Second regions[footer] = Footer regions[page_bottom] = Page Bottom
  41. 41. コアのデフォルト リージョン (2) page_top page_bottom footer header sidebar_secondsidebar_first highlighted content help
  42. 42. コアのデフォルト リージョン (3) • 主要リージョンの解説 – page_top、page_bottom • サイトが正常に動作するために必要な必須リージョン • ブロック設定の UI には表示されない非表示リージョン(後述) – highlighted • 旧バージョンの Site Mission に対応する – Site Mission とはサイトの目的や短い説明文を出力するもの – 従来の設計では、フロントページに限定される等の制約が多かったため、 Drupal 7 から専用のリージョンに出力する設計に変更された。 – help • エラーやステータスメッセージ用のリージョン – "システム ヘルプ" ブロックとして出力され、その出力先として用意されている。 – content • "メインページ コンテンツ" ブロックを出力するためのリージョン – このブロックは特別扱いされ、ブロックの管理 UI で無効にしても必ず表示される
  43. 43. (参考)html.tpl.php の内容 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>> <head profile="<?php print $grddl_profile; ?>"> <?php print $head; ?> <title><?php print $head_title; ?></title> <?php print $styles; ?> <?php print $scripts; ?> </head> <body class="<?php print $classes; ?>" <?php print $attributes;?>> <div id="skip-link"> <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a> </div> <?php print $page_top; ?> <?php print $page; ?> <?php print $page_bottom; ?> </body> </html> 出力されるコンテンツのマークアップ全体構造を定義するテンプレート。 page_top、page_bottom の各非表示リージョンは、hook_system_info_alter() を 使用して宣言されている。詳細については下記を参照: http://api.drupal.org/api/function/system_system_info_alter/7
  44. 44. リージョンへのコンテンツ割り当て • ブロック リージョン – テンプレート内に設けられる、コンテンツの出力先となる区画 • .info における定義構文 – 内部名:処理系が使用する識別名 – 表示名:ブロックの管理 UI に表示される表示名(人間のための識別名) • この定義がない場合はデフォルトのリージョンが使用される • リージョンのコンテンツを出力するコードをテンプレートファイルに埋め込む – リージョンを出力するコードは – page_top、page_bottom の各リージョンは html.tpl.php テンプレートファイルに – それ以外のデフォルト/カスタム リージョンは page.tpl.php テンプレートファイルに regions[<内部名>] = <表示名>
  45. 45. サブテーマ • サブテーマとは – 既存のテーマを継承して作成するカスタマイズ版テーマのこと • 詳細はこちら ⇒ https://drupal.org/node/225125 • サブテーマを作るには – 新しいテーマを作る • sites/all/themes 等の下にテーマ名のフォルダを作成する – .info ファイルを作成して base theme を指定する • ベーステーマとして使用するテーマの name の値を指定する – 継承されない要素の設定 • リージョン、coreバージョン、color モジュール関連の設定 – 継承される要素の設定 • スタイルシート、JavaScript、template.php、テンプレートファイル
  46. 46. テーマを利用した出力のカスタマイズについて • ほとんどそのまま使えるが、一部どうしても変更したい・・・ – という場合にどうするか?
  47. 47. テーマ関数について • テーマ関数とは? – モジュールが提供する、オーバーライド可能なコンテンツ生成用の関数 • モジュール内の各部から必要に応じて呼び出されるマークアップ生成処理 – 目的: • テーマ側でカスタマイズ可能な HTML マークアップ生成処理を実装する • 本質的にはテンプレートファイルと同じ目的を持つ – テンプレートとテーマ関数、使い分けの判断基準は? • 再利用の頻度 • カスタマイズするのはどんな人?(PHPコードをいじれる人かそうでないか) • パフォーマンス – テーマ関数として実装した方がテンプレートより若干速度は向上する • まとまったサブコンテンツか、コンテンツの一部として埋め込みまれる断片か – 前者はテンプレート、後者はテーマ関数を使用して生成する場合が多い
  48. 48. テーマ関数のオーバーライド • テーマ関数をオーバーライドする手順 1. 目的のテーマ関数をソースやドキュメントで探して オリジナルのソースを見つけ出す 2. 入手したソースをテーマの template.php に貼り付ける 3. テーマ関数名の先頭部分の theme_ を <テーマ名>_ に置換する • 必要に応じて実装の中身をカスタマイズする 4. template.php ファイルを保存してキャッシュをクリアする 5. 再読み込みすると、モジュールのテーマ関数の代わりに template.php 内の実装を呼び出して出力が行われる 注)template.php ファイルを最初から自作する場合は、 先頭に <?php は書く一方、末尾の閉じタグ(?>)は書かない (詳しくは、http://drupal.org/node/1424 を参照)
  49. 49. サンプル:サブテーマの作成例 • 例)Bootstrap テーマ – Bootstrap を利用したテーマの作成用に用意されたベーステーマ • https://www.drupal.org/project/bootstrap – サブテーマを作成するためのスターターキット(ひな型)が付属する – サブテーマ作成手順: • starterkit サブフォルダの cdn フォルダを theme フォルダにコピーする • cdnstarterkit というファイルが .info ファイルのひな型になっている • このファイルを、<作るテーマ名>.info ファイルに変更する • この .info を適宜編集する – テーマ名、説明の編集 – スタイルシートの追加/オーバーライド – JavaScript の追加/オーバーライド – デモ:hoge テーマの作成例
  50. 50. サンプル:テーマ関数のオーバーライド例 • 要求 – 動画コンテンツタイプの作成者欄にユーザー名が表示される。 – これを先にユーザーに追加した 「ハンドル名」 フィールド」に変えたい・・・ • 対応方法 – ノードの作成者欄のユーザー名出力のテーマ関数を探す → theme_username() – (1) カレントの hoge テーマの template.php ファイルを開き、 (2) theme_username() のソースを丸ごとコピー、 (3) 関数名を hoge_username() に変更して、 (4) 処理に必用な変更を加える。 – (5) キャッシュ(テーマレジストリ)をクリアする
  51. 51. 結果
  52. 52. contributed モジュールによる システム機能の実装 さまざまな機能を提供するモジュールの活用
  53. 53. 拡張/contributed モジュール • コア API に基づいて作られるアドオン機能 • コアにない機能を追加する • コアの動作を再定義する • さまざまな機能を組み込める 膨大な数の資産があります
  54. 54. 例)Panels モジュール • ページ内のレイアウトを自在に定義 • コンテキストに応じてレイアウトを変更
  55. 55. 例)Context モジュール • 前後関係に基づく条件に 応じてサイトの要素を 多様に変化させる
  56. 56. 例)Rules モジュール • イベント、条件、アクションを定義 • サイト上で発生するイベントに基づき さまざまなサイト挙動を実現する
  57. 57. 例)Feeds モジュール • フィードを読み込んでサイトの データベースに取り込む – https://www.drupal.org/project/feeds
  58. 58. サンプル:Feeds を使ってみる • YouTube のフィードを読み込んでみる – 動画フィードのURL: • https://www.youtube.com/feeds/videos.xml?channel_id=[チャンネルID] • https://www.youtube.com/feeds/videos.xml?user=[ユーザ名] • 追加モジュール – Feeds XPath Parser • https://www.drupal.org/project/feeds_xpathparser • XPath で指定したフィード内の要素を 作成されるノードのフィールドにマッピングするパーサーを提供する
  59. 59. フィードの内容 <feed xmlns:yt="http://www.youtube.com/xml/schemas/2015" xmlns:media="http://search.yahoo.com/mr ss/"xmlns="http://www.w3.org/2005/Atom"> ・・・ <entry> <id>yt:video:s8i-0o2Vni0</id> <yt:videoId>s8i-0o2Vni0</yt:videoId> <yt:channelId>UC9GCvu_7acOTqOAAYpCRmpw</yt:channelId> <title>被災地の「今」を伝える 全国の中学生が石巻市訪問</title> <link rel="alternate" href="http://www.youtube.com/watch?v=s8i-0o2Vni0"/> <author> <name>最新ニュース</name> <uri> http://www.youtube.com/channel/UC9GCvu_7acOTqOAAYpCRmpw </uri> </author> <published>2013-08-16T12:52:37+00:00</published> <updated>2015-11-05T16:09:01+00:00</updated> <media:group> <media:title>被災地の「今」を伝える 全国の中学生が石巻市訪問</media:title> <media:content url="https://www.youtube.com/v/s8i-0o2Vni0?version=3" type="application/x- shockwave-flash" width="640"height="390"/> <media:thumbnail url="https://i4.ytimg.com/vi/s8i- 0o2Vni0/hqdefault.jpg" width="480" height="360"/> <media:description/> <media:community>...</media:community> </media:group> </entry> <entry> ・・・
  60. 60. パーサーの設定 entry 要素の下の・・・ id 要素は GUID (一意識別ID)にマップ title 要素はタイトルにマップ link 要素の href 属性は 動画フィールドの URL にマップ media:group/media:descrdiption 要素を 紹介文(本文)にマップ
  61. 61. Drupal 8 について
  62. 62. 最新の Drupal リリース • 2015年11月にリリースされた Drupal の最新版 – https://www.drupal.org/8 • 特徴 – インプレース編集 – 構成情報をコンテンツデータベースと分離 – 多言語機能の強化 – Views モジュールがコアに – Symfony2 ベースとなりオブジェクト指向型の API に – コアの REST サポート • Restful service in core
  63. 63. REST と "Headless Drupal" • REST (REpresentational State Transfer) – HTTP をそのまま利用したリソース公開手法 • URL でリソースを識別する • HTTP メソッドで処理の種類を識別する – GET、POST、PUT、PATCH、DELETE、・・・ • Content-Type ヘッダーでデータの形式を識別する • "Headless Drupal" – クライアントサイド MVC フレームワークから利用できる サーバー機能としての Drupal – REST を通じて種々のサービスを提供できる CMS • 参考 – http://buytaert.net/the-future-of-decoupled-drupal
  64. 64. HTTP メソッド メソッド HTTP 説明 1.0 1.1 GET ◎ ◎ URIで指定したリソースを取得する。 HEAD ◎ ◎ GET と同じだがヘッダーのみを取得する。 POST ○ ○ クライアントから名前と値のペアの集合としてデータをサーバーに渡す。 PUT ○ ○ URI で指定したサーバー上のリソースを置き換える。 DELETE ○ ○ URI で指定したサーバー上のリソースを削除する。 PATCH × ○ PUT と同じだがサーバー上のリソースの CONNECT × ○ プロキシサーバを経由して SSL 通信する際などに使用する。 OPTIONS × ○ サーバがサポートしているメソッドやオプションを調べる際に用いる。 TRACE × ○ HTTP要求がどのプロキシサーバを経由して送信されるかなど、HTTP の動作をト レースする際に用いる。このメッセージを受け取った最後のサーバは、要求メッセージ に含まれるエンティティ(通常はヘッダ+メッセージボディ)をそのまま返す。 LINK ○ × 指定した URL とリソースにリンク関係を結ぶ。HTTP/1.1 で廃止。 UNLINK ○ × 指定した URL とリソースの間のリンク関係を解除する。HTTP/1.1 で廃止。
  65. 65. Drupal 7 の REST 実装 • Services モジュール – https://www.drupal.org/project/services • Services Views モジュール – https://www.drupal.org/project/services_views • RESTful モジュール – https://www.drupal.org/project/restful • RESTful Web Services モジュール – https://www.drupal.org/project/restws
  66. 66. REST in Drupal 8 Core • RESTful Web Services (rest) – エンティティやその他のリソースを RESTful API で公開する • Serialization (serialization) – JSON/XML ⇔ データ間のシリアライズ/デシリアライズを行う • Hypertext Application Language (hal) – HAL を使用してエンティティをシリアライズする • HAL = Hypertext Application Language – Web API でやり取りされるリソースを ハイパーメディアとしても扱えるようにするための仕様 • HTTP Basic Authentication (basic_auth) – HTTP ベーシック認証プロバイダを提供する
  67. 67. Drupal 8 サイトの REST 構成管理 • Drupal 8 の構成管理 – Configuration Management in Core • 種々の構成設定を .yml ファイルとしてインポート/エクスポートできる • [環境設定] > [開発] > [設定の同期] RESTful サービスの設定をエクスポート (rest.settings.yml ファイル)した後、 そのファイルを適宜編集してインポートし直す ことでサイトの REST 構成を変更できる
  68. 68. REST UI モジュール • REST の構成管理 UI を提供する (not Core) – https://www.drupal.org/project/restui – [環境設定] > [ウェブサービス] > [REST] • できること – 特定のリソースを有効または無効にする – 有効なリソースの形式(json/hal_json/xml)を指定する – 有効な認証の方式(ベーシック認証/Cookie認証)を指定する YML ファイルの編集(とインポート)をすることなく REST の構成管理ができる
  69. 69. REST リソースの設定
  70. 70. HTTP メソッド・データ形式・認証 • HTTP メソッド – GET:リソースの取得 – POST:リソースの新規追加 – DELETE:リソースの削除 – PATCH:リソースの更新 • データ形式 – HAL-JSON(Hyper Application Language:JSON拡張) – JSON – XML • 認証 – Basic 認証、Cookie 認証
  71. 71. 各メソッドのリクエスト仕様 • 参照 – JavaScript and Drupal 8 RESTful Web Services • https://www.drupal.org/node/2405657 • 例) – Retrieve(取得) • GET: http://localhost/user/1?_format=json Content-type: * Accept: application/json 200 - OK – Create(新規作成) • POST: http://localhost/entity/node Content-type: application/hal+json Accept: application/json {"type":[{"target_id":"page"}],"title":[{"value":"Hello world"}],"_links":{"type":{"href":"http://localhost/rest/type/nod e/page"}}} • 201 - Created 既存ノードを REST で取得するには クエリパラメータ _format=json を 指定して GET リクエストを発行 新規追加の場合は パス /entity/node に hal_json 形 式でノード情報を POST 送信
  72. 72. 注意点:CSRF対策と権限設定 • CSRF 対策 – POST/PATCH/DELETE では X-CSRF-Token ヘッダが必要 • X-CSRF-Token:CSRF 攻撃を防ぐために必要 – 下記のパスから得られるトークンをリクエスト ヘッダーに含めないと 403 になる » http://example.com/rest/session/token • 権限設定 – アクセスするユーザーの役割に権限設定で REST 関連のアクセス権を与える必要がある(認可) • 匿名アクセスを可能にするには ANONYMOUS USER に権限を与える
  73. 73. 認証について • 匿名アクセスでない場合は認証への対応が必要 • 例)Basic 認証の場合 – Authorization リクエストヘッダーが必要 – 値は次のとおり: • 先頭に "Basic " • 続けて 「<ユーザー名>:<パスワード>」 形式の文字列の Base64 • 例)Authorization: Basic aG9nZTpmdWdh – DHC REST/HTTP API Client には ユーザー名とパスワードを入力して 基本認証のヘッダーを生成する機能がある » "set authorization" 機能 <ユーザー名>:<パスワード> の形式の 文字列を Base64 エンコードしたもの
  74. 74. コンテンツ一覧を REST で取得するには • Views の "REST export" ディスプレイ – フォーマットに "Serializer" を指定 – フィールドの環境設定のエイリアス • JSON の key 値をカスタマイズできる(必要な場合)
  75. 75. AngularJS と組み合わせたサンプル Drupal 8 Restful servivce endpoint endpoint endpoint endpoint JSON GET PUT POST DELETE
  76. 76. まとめ • Drupal のデータ管理 – 構造データをエンティティとして一般化 • コンテンツに限らない種々の構造化データを統一された API で扱える • Views = クエリビルダ – コーディング不要で高度なデータクエリを UI で対話的に作成できる – サイト内/外の様々な出力先を指定できる • ページ、ブロック、フィード・・・ • ブロックシステムとテーマ – テーマのリージョンとブロックシステムで基本的なレイアウト機構を提供 – テーマ関数を利用するとコアの出力を部分的に再定義できる • Drupal 8 – REST in core と Headless Drupal
  77. 77. ありがとうございました • 興味をお持ちいただけたらぜひ使ってみてください • 勉強会もやっていますのでお気軽に遊びに来てください – http://drupalsapporo.net/

×