Drupal7基本の使い方

#Drupal

## 参考サイト
https://drupal.studio-umi.jp/blog/Drupal-directory-structure

## Drupal基本用語
Drupalでは下記の仕組みが大事になる
・コンテンツタイプ　・・・　入力投稿画面のひな形のこと（WordPressでいうカスタム投稿みたいな感じ）
・フィールド　・・・　コンテンツタイプ内の入力項目のこと
・ノード　・・・　コンテンツの１ページ単位のこと
・タクソノミー　・・・　タグのこと
・ブロック　・・・　WordPressのウィジェットみたいなもの
・メニュー　・・・　メインメニューなど
・モジュール ・・・　ロジックを書くとこ
・リージョン　・・・　ビュー内のエリア定義？みたいなもの
・テンプレート　・・・　ビューファイル

## コンテンツタイプとは
コンテンツタイプは、コンテンツを作るための入力画面（ひな形）です。
Drupalではコンテンツ入力する項目を自由に定義することができ、コンテンツの内容や表示の管理が柔軟にできます。
![6c36c26fd679a28469e4de417b09d846.png](https://qiita-image-store.s3.amazonaws.com/0/31304/e4a25fd8-dc9b-a1de-6da0-945bf142b792.png)
この表示画面では、「Title, Tags, Body, Image」の４つの入力項目があります。この４つそれぞれを`フィールド`と呼ぶ。
「メニューの設定」以下のメニューが、各コンテンツ毎のオプション設定。
例えば、Wordなどで文書を作成する場合、テンプレートを使ってひな形を選んでから、必要な部分のみ入力するようにそういったテンプレートがDrupalではコンテンツタイプと呼んでいる。
逆に、コンテンツタイプを作成しないとコンテンツの入力ができない。
コンテンツタイプは複数作成でき、作成するコンテンツの種類(お知らせ、ニュース、ブログ、リンク集ページ、マニュアルページ、写真表示ページなどなど)に応じてコンテンツタイプを作成する。

「 管理 → サイト構築 」でコンテンツタイプの一覧が見れる。
![5e0445a24d8938d812765602388a075f.png](https://qiita-image-store.s3.amazonaws.com/0/31304/231620d3-3a0d-6672-5cff-e88623dd6207.png)
一覧横の「フィールド管理」からコンテンツタイプ内で入力できる項目が表示される。
![36b760830d7cf69ae0607ead0d4697b7.png](https://qiita-image-store.s3.amazonaws.com/0/31304/80cd7677-10fe-04ce-bb5e-90526f69d315.png)
※「フィールド管理」で「フィールドの追加」をしてみるといい

コンテンツタイプで注意する点は、各フィールドを登録する場合、他のコンテンツタイプですでに登録しているフィールドを引用することができます。この引用したフィールドは、コンテンツタイプにまたがって同じフィールドとして扱われる。
例えば、記事で引用したImageのフィールドの「値の数」を変更しましたが、変更すると利用しているコンテンツタイプすべてに反映されます。現在編集しているコンテンツタイプのみ反映されるわけではないので、注意が必要。

## ノードとは
Drupalでは各入力したコンテンツのページのことをノード(node)という単位で管理しています。今後、説明ではノードという言葉で使っています。コンテンツの１件毎をノード

## タクソノミーとは
タクソノミーはコンテンツを分類するもの。タームはボキャブラリーで分類されます。例えば、「フルーツ」というボキャブラリーには、「リンゴ」や「バナナ」というタームが含まれる。
タクソノミーとタグは別物。タクソノミーという概念に「タグ」というボキャブラリーがあり、その中に各タグが入るイメージ。
タクソノミーは、タグの意味で使うだけではなく、タグ自体が一つのノードとしての機能を持たせることもできます。
コンテンツタイプと同じようにタグの内容をページとして説明文を入力したり画像を表示したりできます。
例えば、ブログなどでタグを入力した場合、タグの名称だけではなくて、アイコンも付与してデザイン性を良くしたいことがあります。この場合は、タクソノミーの内容に画像を追加して、タグ毎にアイコンを登録することで、タグに応じたアイコンも表示することが可能。
「サイト構築」->「タクソノミー」で一覧が見れる。

## ブロック
WordPressでいうところの「ウィジェット」で、「リージョン」で指定したエリアにブロックを指定してコンテンツを表示させる機能のことをDrupalではブロックと呼んでいる。
ブロックは各種メニュー、コンテンツ、バナー、キービジュアル、ヘッダ、フッタなどをどこに配置するかを決める機能。
また、配置だけではなく、どのURLの時にそのブロックを表示する制御が可能。
「サイト構築」->「ブロック」を選択した画面で、画面上部のリンク「ブロックリージョンを仮表示する」でブロックを配置できる場所（リージョン）が見られる。
![5262f9c6711b8eb933e676fffc81036c-440x383.png](https://qiita-image-store.s3.amazonaws.com/0/31304/9a311083-6534-3a6f-886b-efec252cae31.png)
黄色の背景色部分が、各種部品を配置できる場所。

### ブロックを追加する
ブロックの例として、フッタ行に常に固定の文字を入れてみましょう。「ブロックを追加」を選択します。
![91429b5bf60977aa5b009113685e4d44.png](https://qiita-image-store.s3.amazonaws.com/0/31304/a89d6e5f-7d6e-ad90-1eba-8075d0da5079.png)
ブロックの説明に「Copyright」、ブロック本文に「Copyright 2014. All Rights Reserved.」を入力します。リージョンの設定の中で、Bartikのリストボックス内で「フッター」を選択し「ブロックを保存」を選択します。
![0fdc77647b6a7ce314eae57bdac5ab0c.png](https://qiita-image-store.s3.amazonaws.com/0/31304/8f2a809d-6f9d-4d09-34d8-042a7c19c831.png)

以上で、フッタにCopyrightが表示されます。固定の文字を入力して、フッターに表示するのは簡単に実現できます。

## メニュー
メニューは複数登録可能で、各メニューをどこに表示するかはブロックで設定する。
トップページのみ表示するメニュー、下層の特定ページのみに表示するメニューなど、ブロックの機能で表示する位置と表示するタイミングが制御できる。
「サイト構築」->「メニュー」を選択すると登録されているメニューの一覧が表示される。

## モジュール
Drupal では、特定の機能を実現するパーツの集まりのことを「モジュール」と呼んでいます。 モジュールには PHP ファイルはもちろんのこと、 CSS 、 JavaScript 、ときには画像なんかも含まれます。
他のフレームワークや CMS では「パッケージ」「バンドル」「プラグイン」「エクステンション」などなどモジュールと同様の概念にさまざまな呼び名がついていますが、 Drupal の場合はコア本体も含めて「モジュール」という呼び方で統一されています。
※WordPressでいうところのプラグイン。実際のロジック処理はこのモジュールに基本書く。

### モジュールの作り方
1.基本はsites/all/modules内に作る。（Drupalのトップディレクトリに作ることもできるが、コアモジュールなのか、自作モジュールなのか判別がつきにくくなる）
2.サブディレクトリを切る場合は、英数小文字で任意のモジュール名でディレクトリ作成。
3.ディレクトリ内に下記２ファイルが最低限必要
　・モジュール名.info
　・モジュール名.module
#### infoファイルについて
infoファイルは管理画面からモジュールを識別して一覧に表示する時などに使用。
モジュールについての説明とか他モジュールとの依存関係とかを書くファイル
#### moduleファイルについて
moduleファイルは実際の処理を書くファイルで、phpでゴリゴリ書く

「モジュール名_」から始まる名前の関数を延々と書いていく。
この関数が「フック」と呼ばれているもの。
フックはDrupal本体から様々なタイミングで呼び出されて実行される。

```helloworld.info
name = Hello World
description = Says hello world in a page.
core = 7.x
package = "Demo"
```

```php:helloworld.module
<?php

//helloworld_menu()関数はメニューのフックです。Drupalがメニューを表示する際に呼ばれます。
//ルーティング設定するための関数
function helloworld_menu() {
//外側の連想配列はURLをキーに、メニュー項目を値に持つようにします。
// 配列['任意のurlを指定']
  $item['helloworld']= array(
    //内側の連想配列はメニュー項目を表す連想配列
    //title	メニューに表示される文字列
    //page callback	リンクをクリックすると呼ばれる関数
    //access arguments	このメニュー項目を選択することのできる権限

    'title' => 'ハローワールド',
    'page callback' => 'helloworld_helloworld', // コールバック関数を指定
    'access arguments' => array('access content'),
  );
  $items['my_challenge_before'] = array(
    'type' => MENU_CALLBACK, //?
    'title' => 'マイページ',
    'access callback' => 'codeiq_access_callback_member_only_page', // true,falseを設定する
    'page callback' => 'codeiq_mypage_my_challenge_before', // それ以外の通常コールバック関数
    'file' => 'codeiq_mypage.php', // file項目でコールバック関数のある外部ファイルを指定できる
  );
  return $item;
}
//コールバック関数（MVCのコントローラのようなもの）
function helloworld_helloworld() {
  return '<p>Hello World !</p>';
}
```
access argumentsに指定した権限access contentは、「コンテンツを見ることができる」権限で、これは匿名ユーザーにも与えられている権限です。これにより我らがハローワールドモジュールは、誰でもアクセスできるメニュー項目としてメニューに追加されます。

各項目に関しては下記参照
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

## Viewsモジュール
Viewsは「入力されたコンテンツを自由自在に抽出して、かつ柔軟に表示する機能」と言いました。
まず、その表示する方法が、大きく２つあります。それは、ページとして表示する方法とブロックとして表示する方法の２つのパターン。
ページとして表示した場合は、Viewsで取得したコンテンツ自体がコンテンツを表示するページとして表示されます。
ページとして表示するとそれ自体にURLを持つことができ、また表示される場所は、「コンテンツ」を登録した時と同じ位置に表示されます。
（Drupalでは、表示する位置はテーマのリージョンで決まります。リージョンのコンテンツの箇所に表示されます）
また、Viewsをコンテンツとして表示することで、コンテンツとして表示するフィールドやフィールドの配置が柔軟に対応することができます。Viewsを使わないDrupal標準のコンテンツ表示より使いやすい反面、Drupal標準でのコンテンツの機能が使えないというデメリットがあります。例えば、コンテンツを表示している画面から、そのまま内容を編集する機能などあります。




## ブロック
ブロックとは、サイトのサイドバーなどの中で、コンテンツが表示されるボックスを指します。 これらは通常、モジュールによって自動的に作成（例えば、「最近のコメント」など）されますが、管理者が独自に定義して作成することもできます。

各ブロックが表示される位置は、ブロック管理での設定と、使用するテーマのそれぞれに依存します。 一般的に設定できる配置は、左右のサイドバー、ヘッダやフッタ、コンテンツですが、使用するテーマによってはこれより多い場合も少ない場合もあります。。

※WordPressでいうところのウィジェット。WordPressではドロップするためのウィジェットエリアを作るのとウィジェット自体を作る。

### ブロックのポイント
1.モジュールとしてソースいじって裏から作れる
2.管理画面から[管理セクション]→[サイトの構築]→[ブロック]でブロックを作ることもできる
3.ブロックを作ったら、管理画面からそのブロックをどのリージョンに表示するか指定することで初めて画面上に表示される

詳しくはコチラ→http://drupal.jp/node/301