сортировка через get

170
26 февраля 2018, 02:31

Есть таблица с пагинацией, которая работает параметром get значение которого подставляется в ссылки ( снизу на картинке )

Как сделать сортировку(гет запросом)по полям, из шапки таблицы, с земеной ask desc при двойном нажатии (с js совсем все печально , но если ни как средствами php ,постараюсь понять)

Проблемы которые возникают при такой же реализации(как в пагинации): 2 одинаковых гет параметра по типу (&sortBy=id&sortBy=id&...)при неоднократном нажатии

смена ? и & по ситуации ,если добавлять к url &sortBy=id может получиться так : localhost/index.php&.....

PS нагуглил, что можно убрать все строки из таблицы отформатировать jsом и вернуть в таблицу подскажите как по проще это реализовать? Если без js не обойтись

Answer 1

Чтобы сделать сортировку передавайте параметры сортировки в свой скрипт. В php есть отличная функция http_build_query. Воспользуйтесь ей:

index.php?<?= http_build_query(['sortBy' => 'id', 'sortDirection' => 'asc']) ?>

В таком случае get-параметры у вас будут ровно те, что вы укажите. И проблем с ? и & не будет.

Правильные наборы параметров сформировать довольно просто:

<?php
function makeSortLinks($columns, $currentQuery) {
    $currentSortBy = $currentQuery['sortBy']?? '';
    $currentSortDirection = $currentQuery['sortDirection']?? '';
    $links = [];
    foreach ($columns as $column) {
        if ($currentSortBy === $column) {
            $sortDirection = ($currentSortDirection === 'desc')? 'asc' : 'desc';
        } else {
            $sortDirection = 'asc';
        }
        $links[$column] = http_build_query([
            'sortBy' => $column,
            'sortDirection' => $sortDirection,
        ]);
    }
    return $links;
}
$links = makeSortLinks(['id', 'userName', 'email'],  $_GET);
var_dump($links);

Затем просто используете этот набор:

<a href="/index.php?<?= $links['id'] ?>">id</a>

С пагинацией поступайте так же:

index.php?<?= http_build_query(['page' => $page] + $_GET) ?>
READ ALSO
Не считывает двумерный масив с формы

Не считывает двумерный масив с формы

Часть программы должна считывать двумерный массив и искать количество элементов равным 0Но, как я понял, оно даже полностью не считывает...

166
Реализация аутентификации через SMS (Laravel)

Реализация аутентификации через SMS (Laravel)

Всем приветДелаю систему аутентификации на Laravel через SMS

164
Как удалить конкретную версию php-fpm

Как удалить конкретную версию php-fpm

Обновился до PHP 72, а вместе с ним обновились и все модули, включая php-fpm

174