これはかなり難しいと思いましたが、結局のところ、それはかなり簡単です。
インストール時にノードテーブルに列を追加するカスタムモジュールを作成し、hook_schema_alter()
Drupalが新しい列を認識できるように実装して、ノードが保存される前に値を提供するロジックを追加するだけです。
これはトリックを行う小さなモジュールです:
ファイル:node_table_alter.info
name = Node Table Alter
core = 7.x
ファイル:node_table_alter.install
function node_table_alter_install() {
// Add the new field to the node table
$field = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
db_add_field('node', 'changed_by', $field);
}
ファイル:node_table_alter.module
function node_table_alter_schema_alter(&$schema) {
// Add the new field to the schema cache
$schema['node']['fields']['changed_by'] = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
}
function node_table_alter_node_presave($node) {
// Populate the changed_by column with current user's id
$node->changed_by = $GLOBALS['user']->uid;
}
アンインストール時にフィールドを再度削除するロジックを追加し、changed_by
列のテーブルにインデックスを追加することもできます(を参照db_add_index()
)。ただし、これは開始するのに適した場所になるはずです。
このメソッドの優れている点は、ノードに新しいプロパティを効果的に追加したことです。ノードの他の標準プロパティのようにnode_load()
、やEntityFieldQuery
sなどを使用できます。
神はDrupalをとても拡張可能であることを祝福します!