DigitalKwarts / classy

Light, well-structured WordPress theme framework based on “Laravel Blade” template engine
GNU General Public License v3.0
76 stars 14 forks source link

class Comment #16

Open LehaMotovilov opened 8 years ago

LehaMotovilov commented 8 years ago

Сегодня решил посмотреть класс Comment. Если не смотреть на get/set методы то его функционал в основном заключается в формировании структуры комментариев parent->child. Так же в текущей реализации класс Comment не поддерживает вложеность больше одного уровня.

Я предлагаю в данном случае использовать родной WordPress API для отображения комментов. Убрать логику формирования структуры parent->child из Comment и добавить метод classy_comments для обработки вывода. В общем сделать Comment больше как Helper а не как wrapper для WP_Comment.

Вариант вывода комментариев: views/layouts/comments.blade.php

<h4>{{ get_comments_number_text(); }}</h4>
{{ wp_list_comments( [ 'callback' => [ '\Classy\Comment', 'render_comments' ] ] ); }}

Что думаешь?

anrw commented 8 years ago

У wp_list_comments существует проблема в том, что она привязана к The Loop и с этим ничего не сделаешь. На мой взгляд в теме важно сохранить то, чтоб все выполнялось относительно родительских объектов, в нашем случае - \Classy\Post. Глобальные состояния - болезнь WordPress, которую нужно лечить, пускай и макаронным переписыванием дефолтной функциональности.

LehaMotovilov commented 8 years ago

На счет wp_list_comments() не согласен.

Пример, у меня есть WP_Post с ID 30 и у него есть какие-то комменты. В любом месте проекта я могу сделать вот так:

$post_id = 30;
wp_list_comments(
    [ 'callback' => [ '\Classy\Comment', 'render_comments' ] ],
    get_comments( [ 'post_id' => $post_id ] )
);
comment_form( [], $post_id );

На счет определенных проблем с WordPress - согласен, однако если переписать все и вся - то зачем тогда вообще использовать WordPress? Можно тот же Laravel/Yii/Symphony/(любой другой) фреймворк рядом поставить и в WordPress WP_USE_THEMES false. Хотя пожалуй этот вопрос может легко перерости в холивар 😄

anrw commented 8 years ago

Ага 😄 Но ты меня все равно не убедил :)

Получается в этом случае, вместо того, чтобы во вьюшке верстать непосредственно вывод необходимо будет выполнять функцию, вывод которой будет определен в \Classy\Comment::render_comments(), что как мне кажется не очень удобно. Конечно же это можно заврапить все в отдельный метод относительно \Classy\Post и вьюшку тянуть откуда угодно, но тогда возникает другая проблема: а что делать когда на проекте необходимо иметь несколько вьюшек для комментариев? Писать для каждого варианта отображения отдельный метод?