Drupal 7 でのデータベース操作 - レッスン 12 - クエリ条件(WHERE、HAVING、LIKE)
クエリの WHERE 句を使うと、特定の条件を満たすレコードだけを選択できます――たとえば、2 週間前より後に作成されたノードや、「Drupal」という語を含むタクソノミー用語などです。SQL では、SELECT、UPDATE、DELETE クエリで条件を指定するために WHERE と HAVING を使います。Drupal の動的クエリには、クエリ条件を扱う組み込みの仕組みがあり、SELECT、UPDATE、DELETE の操作で同じように機能します。
条件式の概念
条件は、制約を定義する特別な式として表されます。
条件の結合
各条件は、論理演算子 AND と OR を使って組み合わせた複数の条件式で構成できます。
条件オブジェクト
Drupal は各条件フラグメントを QueryCondition クラスのインスタンスとして表します。すべての条件オブジェクトは QueryCondition インスタンスです。
SQL クエリの例:
Drupal でモジュールを作成する、クイックスタート
api.drupal.org から始めましょう。ノードが保存される前にトリガーされる hook_node_validate() フックのページを開きます:
http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_validate/7
フックを使うと、通常の Drupal の処理に独自のコードを注入できます――検証、データフィールド、フォーム要素などを追加できます。
カスタムモジュールを sites/all/modules ディレクトリに追加しましょう:
Drupal 7 モジュールは何で構成されているか?
モジュールの作成を始める前に、Drupal API の機能についてもう少しお話ししたいと思います。API は、タクソノミー、ノード、ユーザー、データベースの入出力を扱う強力なツールを提供します。モジュールと Drupal コアの間、あるいは異なるモジュール間の通信を可能にするために、Drupal はフックシステムを提供しています。フックはコールバックです:コードの実行がフックに達すると、モジュールの関数が実行フローに組み込まれます。これにより、ユーザーデータ、メニュー、タクソノミー、コンテンツタイプを処理できます。
こちらを訪れてください:
http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7
Drupal 7 hook_block_info() と hook_block_view() ブロックに情報を表示する
前のレッスンでは、Drupal 7 用のモジュールを作成しました。このレッスンでは、引き続きモジュールを強化していきます。hook_block_info() と hook_block_view() を使ってブロック出力を追加します。このブロックは、サイトの最新ユーザーを、それぞれのプロフィールページへのリンク付きで表示します。
まず、hook_block_info() の説明から始めましょう:
モジュールが作成するすべてのブロックを定義します。
このフックは、モジュールがどのブロックを表示するかを Drupal に伝え、ブロックの設定オプションを記述することもできます。
hook_block_info() では、各ブロックに「delta」と呼ばれる一意の識別子(返される配列のキー)が割り当てられます。delta の値はモジュール内で一意でなければならず、次の用途に使われます:
hook_menu Drupal 7 モジュールによるページ作成
前のレッスンでは、Drupal API、具体的にはフック hook_block_info() と hook_block_view() を使って、データベースから情報を表示する方法を見ました。このレッスンでは、hook_menu() フックを使ってページを表示し、ページをメニュー、翻訳モジュール、テンプレートなど Drupal の他の部分に接続します。
簡単なことから始めましょう:最新 10 件のニュース記事のタイトルと説明を表示します。これで小さなニュースフィードができます。hook_menu() フックを使います。まず説明し、続いて実装します。
hook_menu()
メニュー項目を定義し、ページを返します。
hook_permission Drupal 7 さまざまなロールのアクセス権限
これまでのレッスンで、さまざまな場所にページやブロックを表示し、また 'access arguments' と 'access callback' プロパティを使ってページのアクセス制限を設定しました。このレッスンでは、管理ページを通じて操作へのアクセス権をより柔軟に管理する方法を作成します。そのために、hook_permission()(Drupal 6 では hook_perm() でした)を使います。
hook_permission()
ユーザーの権限を定義します。
このフックは権限を追加でき、モジュールがユーザー権限ページでどれを選択可能にするかを指定できます。また、モジュールが実行するアクションへのアクセスを完全にまたは部分的に制御するのにも使われます。
権限は user_access() を使ってチェックされます。
戻り値
キーが権限名で、値が次のキーと値のペアを含む配列である、配列です:
Form API Drupal 7 Drupal でのフォーム作成
これまでのレッスンで、フック hook_block_info()、hook_block_view()、hook_menu()、hook_permission() に触れ、今ではプログラムで必要なだけのページやブロックを作成できるようになりました。このレッスンでは、フォームを作成するための Drupal 7 の Form API を探ります。モジュール機能を管理するためのフォームを構築し、これまで学んだフックをできるだけ多く使ってスキルを固めていきます。
手始めに、3 つのブロックを表示します。これはあなたにとって難しくないはずです。
Drupal テーミング(スタイリング、テンプレート)
drupalbook.org の Drupal チュートリアル の最初の 2 つのセクションでは、サイトのインストール方法、コンテンツタイプの追加、さまざまなコンテンツタイプのマテリアルの作成、そして Views を使ったそれらのマテリアルの表示について学びました。続くセクションでは、HTML/CSS について学んだかもしれません。さて、これらのマテリアルの見た目を CSS を使って変える方法についてお話しする時です。
Drupal 6/7 サイトのテーミング。テンプレートは何で構成されているか?
皆さん、こんにちは!
すでに HTML と CSS の簡単な入門を見終えていることと思います。これで、PSD モックアップをもとに Drupal テーマを作成し始める準備ができました。以下は HTML と CSS の「チュートリアル」へのリンクです:
次の動画は一見難しく思えるかもしれませんが、心配しないでください――今後のレッスンで、すべてを一歩ずつ説明していきます。必要なときはいつでもこの記事に戻り、リファレンスとして使ってください。
Zen テーマをベースに独自の Drupal テーマを作成する
既製の Drupal テーマを使わず、独自のテーマを作成したい、または WordPress や Joomla からテンプレートを移植したい場合は、テーマを一から構築する必要があります。幸い、テーマ作りを始めるのに役立つ既製のフレームワークがあります。
Zen - http://drupal.org/project/zen
Fusion - http://drupal.org/project/fusion