Drupal 8中是否可以为数据库表中的每一行动态生成一个页面?
如果我有一个名为School的数据库,其中有一个Student表,这些列和行如下:
ID |FirstName |LastName |Email |User |HiddenField
-------------------------------------------------------------------------
1 |Adam |Johnson |ajohnson@example.com |ajohn1 |Blah
2 |Bob |Smith |bsmith@example.com |bsmith0 |Foo
是否存在一个模块或设置来创建带有这些URL的简单页面,其内容如下:
http://mywebpage.com/students/1
First name: Adam
Last name: Johnson
Email address: ajohnson@example.com
Username: ajohn1
http://mywebpage.com/students/2
First name: Bob
Last name: Smith
Email address: bsmith@example.com
Username: bsmith0
请注意,没有显示HiddenField,因此此解决方案应包括排除某些列的功能。
我尝试使用“视图”模块创建新的页面类型,但是在那儿看不到要指定表格或类似内容的地方。
答案 0 :(得分:0)
要使用名为字段的键将数据提取到关联数组,可以编写以下内容:
$query = \Drupal::database()->select('students')
->fields('students', [
'id',
'firstname',
'lastname',
'email',
'user'
]);
$results = $query->execute()->fetchAllAssoc();
之后,您可以遍历$results
并创建页面:
foreach ($results as $result) {
// Create node object.
$node = Node::create([
'type' => 'page',
'title' => 'whatever you want',
'field_machine_name' => 'field_value',
'firstname' => $result['firstname'],
]);
$node->save();
}
请记住,请尽可能使用依赖项注入。您还可以检查是否有错误,例如是否有一个名为“ page”的捆绑包,并仅在有捆绑包时运行。