Ответы пользователя по тегу PHP
  • Есть ли решение для пагинации древовидных комментариев?

    saDam
    @saDam
    Microservices, .NET Core, EF Core, SQL, RabbitMQ,
    Во первых ну нужны две таблицы это бред, все что вам нужно это поле ParentId, это поле внешнего ключа на Id комментария выше стоящего уровнем.
    У вас в базе получается примерно такие строки:
    Id: 1 ParentId: null,
    Id:2 ParentId: 1,
    Id:3 ParentId: 1,
    Id:4 ParentId: null,
    Id:5 ParentId: 4

    Что видно из данной структуры:
    1. Что все сообщения 1 -го уровня имеют ParentId == null.
    2. В каждом сообщении нужно ввести поле CreateDate, в которое будет писаться время создания сообщения(НЕ ПУТАТЬ С ВРЕМЕНЕМ РЕДАТИРОВАНИЯ, если такое возможно). Это поле вам пригодится чтобы сортировать самые свежие сообщение (ORDER BY DESC и TOP 3 вам в помощь).
    3. При первой прогрузке страницы вам нужен запрос в бд ТОП 10 где ParentId == null, и для каждой такой взять TOP 3 предварительно отсортированных ORDER BY DESC CreateDate.

    Что делать с кнопкой подгрузки комментариев:
    Вам нужен бекэнд метод, который будет принимать ParentId и номер страницы, если вы подгружаете комментарии первого уровня то ParentId будет null, если второго уровня, то у вас будет приходить Id базового комментария. Ну и второй момент это номер страницы, тут ничего сложного.

    Что нужно не забыть в бекэнде такого метода:
    Пропуск уже отображенных комментариев при первой прогрузке, если идет речь о комментариях первого уровня(ParentId == null), то вам нужен Skip(10), если второго уровня то Skip(3).

    На что стоит обратить внимание:
    Не забывайте что у вас все время добавляются комментарии, если вы на момент прогрузки брали 3 самых свежих коммента, то нужно учитывать, что к моменту нажатия прогрузки еще 10 новых комментариев, уже могли накомментировать новых три и тогда вы возможно опять прогрузите эти же три сообщения в какой то момент. Как проблему решать? Тут зависит от того как у вас должно все работать, вы можете в метод передавать дополнительную Id последнее сообщения и брать TOP(10) где дата < комментария найденного по Id. Либо если вам нужно прогружать и новые, то тут уже посерьезней нужно что то думать, либо кнопкой подгрузки новых сообщения, либо проверить при прогрузке есть ли новые итп... Тут нужно ваше решение.
    Ответ написан
    1 комментарий
  • Скрипт на js для смены города как на Biglion(сам принцип) как сделать?

    saDam
    @saDam
    Microservices, .NET Core, EF Core, SQL, RabbitMQ,
    Вам нужны два списка:
    - Список стран
    - Список городов

    При первой прогрузке страницы когда вы определили город пользователя по ip делаете следующее:
    1. В первом списке стран делаете selected страны к которой относится город пользователя.
    2. Во второй список прогружаете доступные города по выбранной стране из первого списка.
    3. Ставите selected городу пользователя.

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

    Что может сделать пользователь:
    - Выбрать соседний город, тут проблем нет, из вашего прогруженного второго списка он делает selected другому городу.
    - Выбрать другую страну, пользователь из первого списка выбирает соседнюю страну, вы делаете ajax запрос по CountryId на свой сервис для обновления второго списка(доступные города в выбранной стране), пользователь выбирает город.

    После выше упомянутых действий вы имеете подтвержденный CityId, как обновлять контент уже зависит от вашей архитектуры и работы сайта. Тут либо вы куда-то пишете выбранный Id города и обновляете страницу(если пользователь поменял свой CityId), либо если у вас все красиво, то просто перезапрашиваете контент у вашего бекэнд сервиса по нужному CityId.
    Ответ написан
    Комментировать