【问题标题】:Drupal 8 getting data from databaseDrupal 8 从数据库中获取数据
【发布时间】:2020-07-07 13:07:10
【问题描述】:

我的任务是在 drupal 的管理面板中制作一些电影内容

https://imgur.com/a/5eJp9ZQ

然后使用自定义模块和控制器将这些电影显示到我的自定义树枝上。 我无法找到解决方案或提示如何做到这一点,也许我什至确实找到了一些东西,但由于我对 drupal 的了解很少,我不知道我必须做什么才能实现这一目标。 我在遵循 drupal 文档的 hello world 部分的同时创建了一个自定义模块、控制器、路由和所有内容,但在那之后我只是僵住了,我无法继续前进

有人可以帮助我完成这项任务,将不胜感激,因为我已经坚持了 2 天了

【问题讨论】:

    标签: drupal drupal-8 drupal-modules


    【解决方案1】:

    Drupal 获取内容的方式是使用视图。您应该创建一个视图(来自管理菜单的Structure -> Views -> Add view)来获取该数据。它类似于用于创建数据库查询的可视化界面,乍一看并不难。

    那么,有几种方法可以使用该视图。

    1. 视图可以创建一个页面,也可以创建一个块,所以页面上会出现内容
    2. 您可以从控制器执行视图并收集视图返回的数据并将其传递给 twig 模板以呈现数据。
    3. 您可以直接从 twig 嵌入视图,因此无需在页面控制器内进行任何类型的编码。

    带有“页面视图”的选项1(它的显示类型是“页面”)可能是最简单的一个,但不满足自定义控制器的要求。

    使用选项 2,您可以使用:views_get_view_result() 调用来获取结果:

    https://api.drupal.org/api/drupal/core%21modules%21views%21views.module/function/views_get_view_result/8.2.x

    它应该看起来像:

    $view = Views::getView('view_machine_name');
    $view->execute();
    foreach ($view->result as $row) { // iterating trough rows of results
      // Do something with $row
    }
    

    此选项最符合您的要求。

    对于选项 3,您必须使用 Twig Tweak 模块从 twig 嵌入视图:

    https://www.drupal.org/docs/8/modules/twig-tweak/twig-tweak-and-views

    除此之外,您当然可以创建自定义数据库查询,但这不是“drupalish”方式,而且查询可能非常复杂,因为 drupal 的数据库结构不是最简单的,您可能会迷路。

    【讨论】:

    • 是选项 2 是我需要做的类似的事情,除了我需要涉及 entity_query 和 entity_type.manager 并使用它从我的内容类型(电影)中获取节点,因为稍后我会向控制器添加更多功能
    • 视图可以返回几乎任何东西,即它们可以返回实体 ID(节点 ID),您可以使用实体管理器通过该 ID 加载完整的实体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2023-03-13
    相关资源
    最近更新 更多