Drupalのノードテーブルを見ると驚くでしょう。これは、コンテンツを保存するために使用されるコンテンツ フィールドが見つからないためです。実際、Drupal はフィールド API を使用してコンテンツを保存します。率直に言って、これは優れた設計であり、Drupal の利点の 1 つです。ノードをベーステーブルとして理解でき、他のテーブルに拡張できます。
以下では、ブログモジュールを使用して詳しく説明します
1.ブログノードタイプを宣言します
[html]
関数 blog_node_info() {
配列を返します(
'ブログ' =>配列(
'名前' => t('ブログエントリー'),
'ベース' => 「ブログ」、
'説明' => t('マルチユーザー ブログに使用します。すべてのユーザーが個人ブログを取得します。'),
)
);
}
ノード API から、hook_node_info がモジュール提供のノード タイプを定義するものであることがわかります。配列内の基本キーと値のエントリは、ノード操作コールバックの最優先でブログ プレフィックス フックを使用することを意味します。
2. bodyフィールドをブログノードタイプにアタッチします
[html]
関数 blog_install() {
// ブログ ノード タイプが利用可能であることを確認します。
ノードタイプ_リビルド();
$types = node_type_get_types();
node_add_body_field($types['blog']);
}
node_types_rebuild メソッドのタスクは、hook_node_info を実装するモジュールからデータを収集し、そのデータをテーブル node_type に保存し、すぐに使用できるようにキャッシュに入れることです。
関数node_add_body_fieldについては、その関数本体を確認する必要があります。
[html]
function node_add_body_field($type, $label = 'Body') {
// 必要に応じて、本文フィールドを追加または削除します。
$field = field_info_field('body');
$instance = field_info_instance('node', 'body', $type->type);
$instance を返します。
}
コードステートメントから、それらは明らかに自明です。フィールド本体の情報をロードしてインスタンスを作成し、そのインスタンスをブログ ノード タイプにアタッチします。次回はフィールド API とノード タイプ UI (ファイルとノードのレンダリング) を探索して、完全なストーリーとしてまとめていきます。