1

Drupal 9 具有内容类型文章。内容类型文章有一个布尔类型的字段,称为“需要进一步审查”。该字段不是必需的,默认值为 FALSE。文章的该字段的值为 TRUE、FALSE、NULL。TRUE:选择真 FALSE:选择假 NULL:之前的文章还没有这个字段的值。

有一个视图列出文章。过滤条件是该字段“需要进一步审查”,并且是公开的。它有选项:Any、TRUE、FALSE。当用户选择 TRUE 时,它将列出该字段值为 TRUE 的文章。当用户选择 FALSE 时,通常会列出该字段值为 FALSE 的文章。现在要列出该字段值为 FALSE 和 NULL 的文章。

Drupal 9 视图查询改变 https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_query_alter/9.0.x 使用 hook_views_query_alter

4

1 回答 1

0

在您创建文章时,该字段会获得一个值,TRUE 或 FALSE(默认值)。所以你的视图只需要对这些值有一个暴露的过滤器。

只有当您在不设置字段的情况下进行迁移时,您才没有任何价值。或者当您稍后添加此字段时,当已经有文章时。假设是这种情况,一种解决方案是通过 UI 手动将这些文章上的字段设置为 FALSE。

当文章太多时,如果您能够并且愿意在数据库中进行一些手动查询,您可以使用脚本在数据库中为这些文章添加行,类似这样(更改以适应您的情况,并且,当然,先备份;):

<?php
$link = mysqli_connect("localhost", "USERNAME", "PASSW", "DATABASENAME");

if($link) {
      // get node id's
    $nids = array();
    $q_nids = mysqli_query($link, "SELECT `nid`,`type` FROM `node` WHERE `type` = 'article' ORDER BY `nid`");
    $n_nids = mysqli_num_rows($q_nids);
    if($n_nids!=0) {
        while($l_nids = mysqli_fetch_assoc($q_nids)) {
            foreach($l_nids as $key => $value) {
                 // insert missing rows
                mysqli_query($link, "
                    INSERT INTO `TABLENAME`.`field_need_further_review`
                    (`bundle`,`deleted`,`entity_id`,`revision_id`,`langcode`,`delta`,`field_need_further_review_value`)
                    VALUES ('".$l_nids['type']."','0','".$l_nids['nid']."','0','nl','0','0');
                    ");
            }
        }
    }
}
于 2021-03-27T12:28:40.410 回答