Рейтинг:1

Как заставить пейджер обновиться?

флаг pl

У меня есть пользовательская форма, созданная с помощью Form API. Общий поток таков:

  1. Создание и отображение формы
  2. Получить пользовательский ввод
  3. Восстановить и сформировать
    • запрос на основе пользовательского ввода с добавлением

      $запрос = $запрос
        ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
        ->limit($values['items']);
      

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

Итак, если первый запрос (например, «утка») привел к 14 страницам результатов, а я нахожусь на 3-й странице результатов утки, когда я изменяю поле запроса на «курица» и отправляю, фактические результаты показывают правильные вещи, но пейджер по-прежнему показывает 14 страниц вместо 35 для курицы, и он удерживает меня на 3-й странице, а не на первой странице).

Как заставить пейджер обновиться?

Рейтинг:2
флаг pl

Я понял это, надеюсь, это поможет кому-то еще с подобным вопросом.

Вместо того, чтобы делать $formstate->setRebuild(); в представить форму метод, я изменил его на

$form_state->setRedirect(
    'sliker_drupal_backend.browser',
    [],
    [
      'запрос'=>[
        'логика'=>$form_state->getValue('логика'),
        'items'=>$form_state->getValue('items'),
        'фраза'=>$form_state->getValue('фраза'),
        'видимость'=>$form_state->getValue('видимость'),
        'ids'=>$form_state->getValue('ids'),
      ],
    ]);

в установитьПеренаправление() метод принимает три аргумента:

  • Имя машины маршрута
  • Аргументы (для заполнения «заполнителей» в пути маршрута)
  • Параметры, которые представляют собой любые параметры, которые могут быть переданы \Друпал\Ядро\URL

При поиске кода найденные параметры представляют собой ассоциативный массив, а ключи могут быть любыми из:

  • «запрос»: массив пар ключ/значение запроса (без какой-либо кодировки URL) для добавления к URL-адресу.
  • «фрагмент»: идентификатор фрагмента (с именем привязки) для добавления к URL-адресу. Не включайте начальный символ «#».
  • 'absolute': по умолчанию FALSE. Должен ли вывод быть абсолютной ссылкой (начинающейся с http:). Полезно для ссылок, которые будут отображаться за пределами сайта, например, в RSS-канале.
  • 'attributes': Ассоциативный массив атрибутов HTML, который будет добавлен к тегу привязки, если вы используете класс \Drupal\Core\Link для создания ссылки.
  • 'language': необязательный языковой объект, используемый для поиска псевдонима для URL-адреса. Если $options['language'] не указан, по умолчанию используется текущий язык для языкового типа LanguageInterface::TYPE_URL.
  • «https»: должен ли этот URL-адрес указывать на безопасное место. Если не определено, используется текущая схема, поэтому пользователь остается на HTTP или HTTPS соответственно. TRUE принудительно использует HTTPS, а FALSE принудительно использует HTTP.

Затем я обновил свою логику в построении формы, чтобы искать параметры запроса и использовать эту информацию, если она присутствует.

Видеть https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Form!FormState.php/function/FormState%3A%3AsetRedirect/8.9.x для получения дополнительной информации о установитьПеренаправление().

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

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