使用API向Drupal添加节点


Add nodes to Drupal using API

我正在构建一个小系统,它将从API中提取产品,并在脚本运行时将每个产品作为节点放入drupal db中。我是Drupal的新手,所以我希望你能原谅我的愚蠢。下面是我到目前为止所做的一个非常简单的分解。

  1. 使用php simplexml通过API提取产品。

2。在php变量中存储产品名称、描述、url等。

  1. 现在我需要将它们作为节点添加到Drupal中。我得到了这个代码从web这正是我需要的(我认为)

    $node = new stdClass(); 
    $node->type = "page"; 
    $node->title = "Title";
    $node->language = LANGUAGE_NONE; 
    $node->path = array('alias' => 'your node path'); // Setting a node path
    node_object_prepare($node); // Set some default values.
    $node->uid = 1; 
    
因此,只需将我的PHP变量放入上述每个变量中就可以了。但是我被困在哪里把所有这些和我的代码?我是说我要在drupal根目录下创建新的php文件吗?要包含哪些文件。怎么做。

任何帮助都将不胜感激。

问候,艾哈迈德。

ghomey说的方式确实有效,但是如果您不想通过创建模块然后转到页面来完成它,您可以使用drupal_bootstrap()允许您将drupal包含到。php文件中。下面是一个代码示例:

define('DRUPAL_ROOT', '/path/to/drupal');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//add create node object here
node_save($node);

Drupal有一个模块系统,允许你添加自己的php代码。

一个模块至少需要两个文件:a .module和a .info文件

因此,要创建一个名为myimporter的模块,您必须相对创建两个文件到Drupal根目录:

sites/all/modules/custom/myimporter/myimporter.module
sites/all/modules/custom/myimporter/myimporter.info

.module文件将包含php代码,.info文件将包含模块元信息。

关于info文件的更多细节可以在这里找到:http://drupal.org/node/1075072

创建模块后,必须通过导航到/admin/modules来启用它。

你的模块必须包含一个使用menu钩子的菜单声明:http://api.drupal.org/api/drupal/modules系统! system.api.php/功能/hook_menu/7

那么你的myimporter.module文件可能看起来像这样:

  <?php 
  function myimporter_menu() {
    // Register myimporter/demo
    $items['myimporter/demo'] = array(
      'page callback' => 'myimporter_demo',
    );
    return $items;
  }
  function myimporter_demo() {
    // add your node import code here
    return "Hello world";
  }

添加新的菜单钩子元素时,必须清除Drupal缓存。然后打开浏览器,导航到http://localhost/myimporter/demo