Рейтинг:0

How to create a custom Views filter to filter nodes on a field value (string) if it's in multi-value field on the user's profile?

флаг ng

We have a Drupal 9 site where we need to filter a view showing nodes where their "US State" field value is contained in the user's "Assigned States" multi-value field.

Node: "US State" field is a plain text list single value field: "node__field_state_new"

User: "Assigned State(s)" is a multiple value check box field: "field_assigned_state"

We've created a custom filter but are stuck on getting it to work correctly. I suspect we may need to create joins in the query but not sure.

MODULE.views.inc:

function MODULE_views_data() {
  $data['views']['state_admin_filter'] = [
    'title' => t('Is State Admin'),
    'filter' => [
      'title' => t('Is State Admin'),
      'group' => t('Custom'),
      'help' => t('Provides a custom filter to filter state admins.'),
      'id' => 'state_admin_filter',
    ],
  ];
  return $data;
}

/src/Plugin/views/filter/StateAdminFilter.php

class StateAdminFilter extends StringFilter  {

  public $operator = 'IN';

  public function query() {
    $user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
    $assigned_states = $user->field_assigned_state->getValue();
    $this->query->addWhere('AND', 'node__field_state_new.field_state_new_value', serialize($assigned_states), 'IN');
  }

}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.