«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/08/06 09:11:54  №1448828
>>1448812

Заголовок таблицы делается ссылкой, содержащей нужные параметры. Вот старый пост, где это обсуждалось: https://phpclub.tech/pr/res/1331378.html#1351739

Еще можно поискать в архиве по словам "ссылка сортировка", может что-то полезное найдешь? https://phpclub.tech/search/?q=%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0+%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

Аякс ту не нужен, хотя с ним можно было бы сделать сортировку без перезагрузки страницы. Аякс желательно прикручивать поверх обычных ссылок (по принципу progressive enhancement), чтобы по-прежнему можно было скопировать и сохранить ссылку на страницу в определенном состоянии. Есть (была) библиотека pajax , которая большую часть работы берет на себя.

Задавай уточняющие вопросы, если что-то непонятно.
Ответы: >>1448829
Аноним 2019/08/06 09:08:20  №1448826
>>1448823
>Сортировка делается по ссылке
Понял, спасибо
Аноним 2019/08/06 08:53:24  №1448823
>>1448812
На этом задании джаваскрипт вообще не нужен. Только вёрстка и бэкенд. Сортировка делается по ссылке.
Просто посмотри как у других сделано.
Ответы: >>1448826
Аноним 2019/08/06 08:32:43  №1448812
Аношки, тоже взялся за студентов, как анины выше, но пока читаю условие и обдумываю. Возник вопрос:
>Список абитуриентов — выводит имя, фамилию, номер группы, число баллов. Выводятся по 50 человек на страницу, сортировка по любому полю делается кликом на заголовок колонки таблицы
а как вообще это реализуется? Мне это делать джаваСкриптом/джиКверри, типа перестраивать ячейки таблицы по клику, или силами пшп-скрипта - по клику отправлять новую ссылку на эту же страницу с новыми параметрами сортировки и перезагружать результат?
Как обычно это делается? Я с аяксом пока не очень знаком
Ответы: >>1448823 >>1448828
Аноним 2019/06/03 05:50:24  №1411154
>>1408224

По моему, ты вместо содержимого файла отдаешь просто его название в теле ответа. А надо отдавать содержимое.

Если ты используешь класс ответа из PSR-7, то там есть метод withBody, в который передается "поток", соответствующий файлу.

Также, обрати внимание на то, что надо передавать имена и пути к файлам по-разному:

- в заголовок Content-Disposition - только имя и символы ASCII без кириллицы. Есть также новый стандарт, который позволяет дополнительно к латинице передавать имя в utf-8 для новых браузеров. Изучить его было бы полезно.
- в X-Send-File - надо смотреть документацию, может полный путь от корня, а может относительно какой-то папки

Также, я не понял, зачем ты вызываешь $file->save(). Что ты хочешь сохранить в БД?

Синтаксис у тебя нормальный. Но я бы добавил отступ там, где длинная колбаса вызовов переносится. Я сам не очень люблю method chaining и предпочитаю обычный вызов методов.

>>1408250

Там скорее всего используется PSR-7, с которым ты можешь ознакомиться, если названия методов тебе ничего не говорят.

>>1407003

Сортировку проще всего сделать ссылкой. Например, ссылкой вида:

/list?search=Ivan&sort=-name&page=3

Про генерацию таких ссылок было написано в старых тредах, например:

- https://phpclub.tech/pr/res/1331378.html#1351739
Аноним 2019/05/28 16:53:09  №1408166
>>1407629

А ты вообще понимаешь, чем POST отличается от GET? Формально методы определены в одном из RFC: https://tools.ietf.org/html/rfc7231#section-4

> The GET method requests transfer of a current selected representation for the target resource. GET is the primary mechanism of information retrieval and the focus of almost all performance optimizations.
Hence, when people speak of retrieving some identifiable information via HTTP, they are generally referring to making a GET request.

> The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics.

Обычно GET используется для получения каких-то данных, а POST - для сохранения каких-то изменений на сервер. Очевидно, что для получения списка логичнее всего использовать именно GET. Например:

/students?search=Ivan&sort=-name&page=2

Я не очень понимаю, зачем тут POST вообще. Если ты хочешь использовать форму, то формы можно отправлять методом GET.

Как написали выше, GET имеет другие преимущества:

- возможность сохранить или переслать ссылку на результат
- возможность перемещаться назад/вперед по истории
- возможность кешировать ответ (тут, впрочем, это вряд ли нужно)

Обычно сортировку просто делают через ссылки в заголовке. Но, конечно, возможны другие варианты, например:

- яваскрипт перехватывает клик по заголовку и формирует ссылку нужного вида (минус: у обычных ссылок есть опции вроде "открыть в новой вкладке", "скопировать ссылку", а у кнопки - нет)
- яваскрипт перехватывает клик по заголовку, аяксом запрашивает данные и вставляет на страницу без перезагрузки. Минус - перестают работать многие из возможностей выше.
- использовать традиционные ссылки, сохраняя все их преимущества, но добавить библиотеку pajax, которая позволит подгружать данные аяксом

Аноним 2019/05/26 22:17:17  №1407133
>>1407119
Я просто заголовки таблицы делал ссылками с параметрами, ссылки эти функцией создаются, чтобы в шаблоне логики не было, параметры такие; по какому столбцу сортирую и в каком порядке, если не выбран никакой или выбран другой заголовок, то asc, если этот выбран был уже, то desc. Ну и поиск текущий тоже в параметры надо вставить, чтобы сортировка не дропалась.
Ответы: >>1407312
Аноним 2019/05/06 06:02:15  №1394737
>>1380690

> Так ведь там весь массив гет из реквеста, а не просто место для сохранения.

А это неправильно и говорит о том, что ты не понимаешь разделение ответственности. Задача генератора ссылок - генерировать ссылки, а откуда пришли данные, из GET или из базы данных, или еще откуда-то - он знать не должен. Потому в нем не должно быть упоминания массива GET. Ты не разделяешь зоны ответственности в коде.

> Вообще, задумка была такой, что замыкание передаётся в шаблон под каким-то именем, где просто вызывается как на пикрелейтед. Меняются только запрошенные параметры, остальные не остаются как были. Ну и пустой писанины чтоб поменьше.

Ну так можно сделать нормально, так что можно сделать несколько анонимных функций и они не влияют друг на друга.

> Зачем? Количество записей ведь не изменилось.

Я вроде писал, так везде делают. Когда ты жмешь сортировку, ты хочешь увидеть САМЫЕ большие или маленькие значения, а для этого надо перейти на первую страницу. Иначе ты оказываешься где-то в середине.
Аноним 2019/04/14 08:29:05  №1380690
tmp23.jpg (125, 1173x382)
382x1173
Продублирую в новом ИТТ треде:


>>1380456
>У тебя как-то странно сделано, что параметры сохраняются в $this->get. Это значит, что если ты с помощью функции linkMaker() создашь 2 анонимных функции, то одна будет влиять на другую (параметры, переданные в одну, отобразятся в другой). Это неправильно.

>$this->get
Так ведь там весь массив гет из реквеста, а не просто место для сохранения. Параметры не столько сохраняются, сколько апдейтятся - меняется только один, за который отвечает ссылка, и она пересобирается с новым значением.
Ну и разные функции нет смысла создавать - всегда один гет-массив приходит в запросе и с ним работаем.
Вообще, задумка была такой, что замыкание передаётся в шаблон под каким-то именем, где просто вызывается как на пикрелейтед. Меняются только запрошенные параметры, остальные не остаются как были. Ну и пустой писанины чтоб поменьше.

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

>если мы меняем сортировку, то надо сбрасывать пагинацию
Зачем? Количество записей ведь не изменилось. Я вот со своей этой функцией поигрался - вполне юзабельно вроде. Страницы жмёшь - меняет страницы, сортировку меняешь - сортировка только и меняется, что нажали - то и выводит.
Ответы: >>1394737
Аноним 2019/04/14 08:24:17  №1380688
tmp23.jpg (125, 1173x382)
382x1173
>>1380456
>У тебя как-то странно сделано, что параметры сохраняются в $this->get. Это значит, что если ты с помощью функции linkMaker() создашь 2 анонимных функции, то одна будет влиять на другую (параметры, переданные в одну, отобразятся в другой). Это неправильно.

>$this->get
Так ведь там весь массив гет из реквеста, а не просто место для сохранения. Параметры не столько сохраняются, сколько апдейтятся - меняется только один, за который отвечает ссылка, и она пересобирается с новым значением.
Ну и разные функции нет смысла создавать - всегда один гет-массив приходит в запросе и с ним работаем.
Вообще, задумка была такой, что замыкание передаётся в шаблон под каким-то именем, где просто вызывается как на пикрелейтед. Меняются только запрошенные параметры, остальные не остаются как были. Ну и пустой писанины чтоб поменьше.

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

>если мы меняем сортировку, то надо сбрасывать пагинацию
Зачем? Количество записей ведь не изменилось. Я вот со своей этой функцией поигрался - вполне юзабельно вроде. Страницы жмёшь - меняет страницы, сортировку меняешь - сортировка только и меняется, что нажали - то и выводит.
Ответы: >>1388215 >>1388213