为表中的每一行动态生成一个Drupal页面

时间:2019-07-09 18:03:43

标签: drupal

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,因此此解决方案应包括排除某些列的功能。

我尝试使用“视图”模块创建新的页面类型,但是在那儿看不到要指定表格或类似内容的地方。

1 个答案:

答案 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”的捆绑包,并仅在有捆绑包时运行。