web-dev-qa-db-ja.com

モジュールのインストール時にプログラムでノードを作成する

インストール時に新しいノード(ページ)を作成し、アンインストール時にこれらのページを削除するモジュールを用意したいと思います。

Mymodule.installファイルで次のことを試みましたが、成功しませんでした。

<?php

function mymodule_install() {

  $node = new stdClass(); // We create a new node object
  $node->type = "page"; // Or any other content type you want
  $node->title = "Your title goes jere";
  $node->language = LANGUAGE_NONE; // Or any language code if Locale module is enabled. More on this below *
  $node->uid = 1; // Or any id you wish
  $node->path = array('alias' => 'your_node_path'); // Setting a node path
  node_object_prepare($node); // Set some default values.

  // Let's add standard body field
  $node->body[$node->language][0]['value'] = 'This is a body text';
  $node->body[$node->language][0]['summary'] = 'Here goes a summary';
  $node->body[$node->language][0]['format'] = 'filtered_html'; // If field has a format, you need to define it. Here we define a default filtered_html format for a body field

  $node = node_submit($node); // Prepare node for a submit
  node_save($node); // After this call we'll get a nid  

}

このコードは このページ からカットアンドペーストされます。

モジュールを無効/有効にしても、ページは作成されません(少なくとも、コンテンツとデータベースのノードテーブルには表示されません)。

どうすればいいですか?

6
Pascal

問題は、Drupalでは、インストール/アンインストールと有効化/無効化が2つの別個のものであることです。

モジュールを有効または無効にすると、それぞれ hook_enable() および hook_disable() が呼び出されます。

モジュールをインストールまたはアンインストールすると、それぞれ hook_install() および hook_uninstall() が呼び出されます。

コードをhook_install()/hook_uninstall()に残したい場合は、モジュールを無効にしてから、アンインストールする必要があります http://mysite.com/admin/modules/uninstall 。再インストールすると(これも有効になります)、コードが実行されます。

このコードがhook_enable()/hook_disable()でより適切に提供されるかどうかを検討する価値はありますが、特定の状況によって異なります。

5
Clive