Как изменить одно значение в _ $ GET [], щелкнув ссылку (или кнопку) из Twig без изменения других значений? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть другие поисковые запросы, такие как запрос от поиска, из тегов и т. Д. c. Я не хочу их менять. Значение pageno будет использоваться для нумерации страниц.

Поэтому я хочу изменить 'pageno', не меняя и не снимая другие.

Вот что я сделал в Twig:

<a href=?{{ request.server.get('QUERY_STRING')|replace({"&pageno=" : ""}) }}&pageno={{ page }}>{{ page }}</a>

Но это дает такой результат:? Query = & from-date = & to-date = & search = search413 & pageno = 5

Сбор прежних номеров страниц "413" при переходе от страницы к странице, и это всегда добавляет «&».

Другой метод, который я попробовал, состоит в том, чтобы создать строку в php и передать ее в шаблон Twig:

$queryStr = $request->server->get('QUERY_STRING');
$queryStr = preg_replace("/pageno=\\w+/", "", $queryStr); // Remove pageno=???
$queryStr = $queryStr == "" ? "" : ($queryStr . "&");  // ad a & if there's already other $_GET values
$queryStr = str_replace("&&","&", $queryStr); // replace && so it doesn't look bad

В Twig:

<a href=?{{ queryStr }}pageno={{ page }}>{{ page }}</a>

Это выглядит слишком сложно, слишком много проделанной работы, и я передаю множество значений Twig.

Есть ли более простой способ сделать это без необходимости передавать так много значений в Twig?

1 Ответ

0 голосов
/ 24 апреля 2020

Просто создайте функцию twig следующим образом:

$twig->addFunction(new \Twig\TwigFunction('get_page_url', function($query = [], $append = true) {
    $tmp = $append ? $_GET : [];
    foreach($query as $key => $value) $tmp[$key] = $value;

    return '?' . http_build_query($tmp);
});

Используйте ее в twig как

<a href="{{ get_page_url({ 'pageno': 42, }) }}">next</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...