«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/10/07 21:39:27  №1491406
bug2.png (23, 633x158)
158x633
bug3.png (35, 602x365)
365x602
>>1490764

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

Вместо "выберите файл..." логичнее писать "нажмите, чтобы выбрать файл (или открыть диалог выбора файла) или перетащите файл сюда".

При наведении на кнопку "загрузить" у нее анимируется фон и цвет текста и мне не нравится, что при этом есть момент, когда они сливаются, но это мое личное, я не люблю такой эффект. Но это не проблема в общем.

Ты пишешь "размер 107.9 KB", но в России числа пишутся через запятую, а "килобайт" как "Кб". Нелогично смешивать российский и западный стиль в одной фразе.

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

Еще один баг - кривая дата загрузки на пикрелейтеде.

В списке файлов у файла есть крестик, но нет подсказки при наведении на него и непонятно, что он делает.

Выпадающее окно "фильтры" сделано неудачно, так как оно визуально не отделено от остальной страницы и сливается с ней. Непонятно, что это попап. Тебе надо бы сделать ему тень или четкие границы, чтобы было видно, что это попап над страницей, а не ее часть. Списки тоже нарисованы неудачно:

- справа нет линий (картинка bug3.png)
- непонятно, что значит пунктирная линия и что сплошная. Лучше было не выпендриваться и выделять выбранный пункт подсветкой. Также, имхо, толстые линии неудачно смотрятся.
- кнопка Фильтры не становится выделенной, когда попап раскрыт
- если открыть фильтры, а затем кликнуть в поле поиска, они не скрываются. Если сделать поиск, то попа фильтров перекрывает надпись "ничего не найдено". Нужно скрывать фильтры при перемещении фокуса табом или клике за их пределы.

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

Показать: [ мои файлы | все файлы ] Сортировка: [ дата ^ ]

То есть думай не только о красивости, но и об удобстве. Раскрывающаяся панель экономит место (которого вообще-то достаточно), но взамен требует лишние 2 клика на раскрытие/скрытие и не позволяет увидеть, что спрятано, без клика по ней.

Не очень понятно, зачем кнопка "найти", если поиск работает без нее.

Нет ссылки на страницу одного файла, а как тут поделиться ссылкой-то? Прямой ссылкой на файл делиться?

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

Не выполняются правила работы с аяксом: https://github.com/codedokode/pasta/blob/master/js/ajax.md

Например, я отключил вайфай и попробовал поменять фильтр. Никакой реакции, нет сообщений об ошибке связи с сервером. Как я должен догадаться, что произошла ошибка?

Протестировал ли ты поддержку картинок с анимацией (gif), с полупрозрачностью (png)? Хотя, вроде как вижу такие картинки.
Ответы: >>1491422
Аноним 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