如何解决Drupal 9:以编程方式添加节点PHP
几年前我创建了一个 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 的。
有人能指出我正确的方向吗?
谢谢!
解决方法
如果你真的愿意,你仍然可以这样做。但是,现在有更好的方法来管理内容创建(查看“迁移”模块的示例,例如 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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。