From 626770ef0cc9e0abcce99cec84406fb532015c5d Mon Sep 17 00:00:00 2001 From: mrilyew <99399973+mrilyew@users.noreply.github.com> Date: Sat, 24 May 2025 21:47:11 +0300 Subject: [PATCH] feat: add comments sort --- Web/Models/Entities/Postable.php | 4 ++-- Web/Presenters/WallPresenter.php | 6 +++++- Web/Presenters/templates/Wall/Post.xml | 3 ++- .../templates/components/comments.xml | 15 ++++++++++++- Web/static/css/main.css | 20 ++++++++++++++++++ Web/static/img/wall.png | Bin 2161 -> 2561 bytes locales/en.strings | 3 +++ locales/ru.strings | 3 +++ 8 files changed, 49 insertions(+), 5 deletions(-) diff --git a/Web/Models/Entities/Postable.php b/Web/Models/Entities/Postable.php index 75d774b5..b9309c45 100644 --- a/Web/Models/Entities/Postable.php +++ b/Web/Models/Entities/Postable.php @@ -75,9 +75,9 @@ abstract class Postable extends Attachable return new DateTime($edited); } - public function getComments(int $page, ?int $perPage = null): \Traversable + public function getComments(int $page, ?int $perPage = null, string $sort = "ASC"): \Traversable { - return (new Comments())->getCommentsByTarget($this, $page, $perPage); + return (new Comments())->getCommentsByTarget($this, $page, $perPage, $sort); } public function getCommentsCount(): int diff --git a/Web/Presenters/WallPresenter.php b/Web/Presenters/WallPresenter.php index 89b1915d..dbdfdde0 100644 --- a/Web/Presenters/WallPresenter.php +++ b/Web/Presenters/WallPresenter.php @@ -469,7 +469,11 @@ final class WallPresenter extends OpenVKPresenter } $this->template->cCount = $post->getCommentsCount(); $this->template->cPage = (int) ($_GET["p"] ?? 1); - $this->template->comments = iterator_to_array($post->getComments($this->template->cPage)); + $this->template->sort = $this->queryParam("sort") ?? "asc"; + + $input_sort = $this->template->sort == "asc" ? "ASC" : "DESC"; + + $this->template->comments = iterator_to_array($post->getComments($this->template->cPage, null, $input_sort)); } public function renderLike(int $wall, int $post_id): void diff --git a/Web/Presenters/templates/Wall/Post.xml b/Web/Presenters/templates/Wall/Post.xml index 126d12b1..be8b391c 100644 --- a/Web/Presenters/templates/Wall/Post.xml +++ b/Web/Presenters/templates/Wall/Post.xml @@ -36,7 +36,8 @@ count => $cCount, page => $cPage, model => "posts", - parent => $post } + parent => $post, + sort => $sort}

{_actions}

diff --git a/Web/Presenters/templates/components/comments.xml b/Web/Presenters/templates/components/comments.xml index 53253b5f..3c9a858e 100644 --- a/Web/Presenters/templates/components/comments.xml +++ b/Web/Presenters/templates/components/comments.xml @@ -1,5 +1,18 @@ -

{_comments} ({$count})

+
+

{_comments} ({$count})

+ {if !is_null($sort) && $count > 5} + + {if $sort == 'desc'} + {_new_first} + {else} + {_old_first} + {/if} + +
+
+ {/if} +
{var $commentsURL = "/al_comments/create/$model/" . $parent->getId()} {var $club = $parent instanceof \openvk\Web\Models\Entities\Post && $parent->getTargetWall() < 0 ? (new openvk\Web\Models\Repositories\Clubs)->get(abs($parent->getTargetWall())) : $club} diff --git a/Web/static/css/main.css b/Web/static/css/main.css index 389134a1..8dd47fd7 100644 --- a/Web/static/css/main.css +++ b/Web/static/css/main.css @@ -4314,3 +4314,23 @@ hr { .deleted_mark_average { padding: 5px 61px; } + +.sort_link { + padding: 5px 2px; + display: inline-block; +} + +.sort_link_icon { + background: url(/assets/packages/static/openvk/img/wall.png?v=3) no-repeat; + display: inline-block; + height: 11px; + width: 9px; +} + +.sort_link_icon_desc { + background-position: 0px -15px; +} + +.sort_link_icon_asc { + background-position: -11px -15px; +} diff --git a/Web/static/img/wall.png b/Web/static/img/wall.png index 197dca8d39ae2bce46709d3f264ab181353c787e..e8577b9c46829845f4a7e18c3da9172dce9b199e 100644 GIT binary patch delta 2514 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