📜  drupal 9 修改视图查询 - PHP (1)

📅  最后修改于: 2023-12-03 15:14:48.315000             🧑  作者: Mango

Drupal 9 修改视图查询

在 Drupal 中,视图 (View) 是一种将节点、用户、评论等数据转换为 HTML 代码的工具。通过视图,我们可以方便地查询和显示数据。但有时候,视图查询的结果并不符合我们的需求,需要对视图进行自定义修改。

本篇文章将介绍如何在 Drupal 9 中通过主题代码修改视图查询的结果。

步骤一:复制视图模板

首先,我们需要复制视图模板,以便在主题中进行修改。

  1. 打开网站管理后台,进入“结构 > 视图”页面,找到需要修改的视图。

  2. 点击视图名称,进入编辑页面。

  3. 在“高级设置”区域中,找到“主题:信息”一栏,点击“模板文件”链接。

    View Template Files

  4. 在弹出的窗口中,勾选要编辑的模板文件,然后点击“复制选定的模板文件到主题”按钮。

    Copy View Template File

    这将在当前主题的 /templates 文件夹下创建一个与模板文件同名的文件,并将其内容复制到这个文件中。

步骤二:修改模板文件

接下来,我们可以在模板文件中对视图查询进行修改。以下是一些常见的修改方法:

修改 SQL 查询语句

Drupal 的视图模块使用 SQL 查询语句来查询数据。我们可以通过修改 SQL 查询语句来筛选或排序数据。

在 Drupal 9 中,视图模板文件的文件名格式为 view-[视图名称]-[机器名].html.twig。以一个名为 blog 的视图为例,模板文件名为 view--blog.html.twig。在模板文件中,我们可以使用 Twig 的 {{ output }} 语法来输出视图的 HTML 代码,使用 {{ rows }} 语法来输出视图的查询结果。

以下是一个示例,该示例将文章按发布时间倒序排列:

{% for row in rows %}
  {{ row.content }} {# 输出每一行数据 #}
{% endfor %}

{% if pager %}
  {{ pager }}
{% endif %}

我们可以将 SQL 查询语句放在模板文件中的 hook_views_pre_render 钩子中。该钩子会在视图结果渲染前被调用,这里我们使用 Drupal 的 db_query() 函数来执行 SQL 查询:

{% hook until="views_pre_render" %}
{% set query = "
SELECT nid, title FROM {node_field_data}
WHERE type = :type
ORDER BY created DESC"
%}

{% set results = db_query(query, {':type': 'article'}) %}

{% for row in results %}
  <div class="blog-listing">
    <h2><a href="/node/{{ row.nid }}">{{ row.title }}</a></h2>
  </div>
{% endfor %}

{% endhook %}

这个示例将查询所有类型为 article 的节点,并按照创建时间倒序排列。

修改查询结果

有时候,我们需要对查询结果做出一些单独的处理。在视图模板中,我们可以使用 Drupal 的 hook_views_post_render 钩子来对查询结果进行修改。

以下是一个示例,该示例将文章标题中的所有大写字母转换为小写:

{% hook until="views_post_render" %}
{% for row in rows %}
  {% set node = row.content['#node'] %}
  {% set title_lowercase = node.title|lower %}
  {% set row.content['#node'].title = title_lowercase %}
{% endfor %}
{% endhook %}

这个示例利用了 Twig 的 lower 过滤器,将节点标题转换为小写的。我们将新的标题赋值给视图的查询结果,这样就可以在模板中直接使用新的标题了。

更多关于修改视图的方法,可以参考 Drupal 官方文档。

步骤三:保存主题代码

完成修改后,我们需要将模板文件保存到主题的 /templates 文件夹下。如果主题中已存在同名的模板文件,则会覆盖原有文件,所以记得备份原有文件。

这时,我们就可以在网站前台查看视图的新结果了。

以上就是在 Drupal 9 中通过主题代码修改视图查询的方法。如果您有任何问题,请参考官方文档或在社区寻求帮助。