0

几年前,我创建了一个 Drupal 7 站点。我想用 Drupal 9 重新制作网站。

在 Drupal 7 中,我使用以下 PHP 代码以编程方式添加了节点:

<?php
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$data = $_GET['d'];

AddNewNode($data);

function AddNewNode($data)
{
        list($installlanguage, $playerid) = explode('|', $data);
        $node = new stdClass();
        $node->type = 'new_install';
        node_object_prepare($node);
        $node->language = LANGUAGE_NONE;
        $node->field_hm_new_installlanguage[$node->language][0]['value'] = $installlanguage;
        $node->field_hm_new_install_playerid[$node->language][0]['value'] = $playerid;
        node_save($node);
}
?>

此代码不适用于 Drupal 9。

我试图在 Google 上搜索“drupal 9 add content programmatically”,但似乎没有得到任何有用的结果。大多数链接都是关于 Drupal 8 的。

有人可以指出我正确的方向吗?

谢谢!

4

1 回答 1

1

如果你真的想要,你仍然可以这样做。然而,现在有更好的方法来管理内容创建(查看“迁移”模块的示例,例如 JSON 或 CSV 文件)。

相当于你以前的东西是这样的;

<?php

use Drupal\Core\Database\Database;
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

$autoloader = require_once 'autoload.php';

$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
$kernel->boot();

defined('DRUPAL_ROOT') or define('DRUPAL_ROOT', getcwd());

$node = \Drupal::entityTypeManager()->getStorage('node')->create([
  'type'        => 'article',
  'title'       => 'something something',
  'langcode'    => 'en',
  'field_something' => ... // Check the structure as it differs between fields.
]);
// You don't have to do it all in one array.
$node->set('field_something_2', 'something');
$node->save();

在这里查看更多信息https://drupalbook.org/drupal/9111-working-entity-fields-programmatically

于 2021-03-23T18:25:54.213 回答