[TH] Post Comments

[TH] Post Comments 1.0.2 Patch Level 2

Нет прав для скачивания
TechSide, Возможно у тебя стоит плагин [MMO] Tag User, у меня также было пока не отключил и все заработало.
Блин, спасибо, а то я понять не мог что за фигня)
Тут, кстати, вышел переделанный чуть)
 
  • Мне нравится
Реакции: Len
На тестовом сайте форма комментария появляется через JS. Поставил на рабочем вроде все тоже, но форма открывается на новой странице. Почему так, может где-то надо что-то довключить?
 
Я чет не пойму... У меня почему-то не работают комментарии. Ошибок при установке не было. Нажима. "Ответить" - не пашет. В чем может быть проблема?

Из модификаций шаблона, не работает эта, но почему?
1575149546089.png

Заранее, спасибо!

Я чет не пойму... У меня почему-то не работают комментарии. Ошибок при установке не было. Нажима. "Ответить" - не пашет. В чем может быть проблема?

Из модификаций шаблона, не работает эта, но почему?
1575149546089.png

Заранее, спасибо!
Конфлик найден. Кофнликтует с аддоном - [SVG] Tag User Post and Conversation
По возможности, исправьте пожалуйста =) (Skaiman)
 
Последнее редактирование:
На тестовом сайте форма комментария появляется через JS. Поставил на рабочем вроде все тоже, но форма открывается на новой странице. Почему так, может где-то надо что-то довключить?
В чем может быть проблема??? Шаблоны дефолтный, поотключал другие плагины не помогать. На этом же VPS протестировал на другом домене и всё работает. На нужном не в какую, открывается комментарий только в новом окне.
screenshot298.png
 
гайсы и гайсесы кто-то знает плагин поддерживает уведомления о комментариях?
А то обидно, что твой пост комментят а ты даже не в курсах об этом.
 
На тестовом сайте форма комментария появляется через JS. Поставил на рабочем вроде все тоже, но форма открывается на новой странице. Почему так, может где-то надо что-то довключить?
Нашел проблему. Это плагин SEO (SEO2) 2.3.0 Beta5 XF21, отключаю его и комментария начинают работать через JS. Может кто подскажет как исправить?
 
Больше информации, что в консоли браузера, может просто что-то из модификаций не срабатывает.
 
Больше информации, что в консоли браузера, может просто что-то из модификаций не срабатывает.
Поставил на тестовый сайт SEO плагин и на нем комментарии работают как надо. Посмотрел модификации, вторе всё срабатывает. Дальше глянул консоль браузера и там ошибки:
screenshot299.png

Отключил на рабочем сайте DragonByte Credits 5.3.2 - стало работать нормально. Включил плагин SEO - тоже работает.
 
Это текстом обычно ошибки постятся, но судя по скрину как раз конфликт какой-то с дополнение кредитов.
 
Это текстом обычно ошибки постятся
Да, что-то тупанул, подумал, что из консоли текст не копируется. ?

На тестовом стоят оба этих плагина и всё работает. Сейчас буду смотреть настройки кредитов.
 
гайсы и гайсесы кто-то знает плагин поддерживает уведомления о комментариях?
А то обидно, что твой пост комментят а ты даже не в курсах об этом.
Меня тоже это не устраивает, но уведомления плагин шлет, только если кого-то цитируют или @упоминают в комментах. Поэтому мое решение смотри ниже :)

И так, модуль полезный, но слегка недоработанный:
  1. форма комментов "кривая" (кнопки "отправить", "прикрепить" расположены не в одном блоке);
  2. при нажатии на ссылку "ответить" форма комментов резко появляется непонятно под какими комментами, что при ответе сбивает с толку;
  3. не шлет уведомления при ответах на комменты.
Что мы получим после правок:
  1. форма будет иметь нормальный вид;
  2. при нажатии на "ответить" форма плавно появится под комментом, на который отвечаем;
  3. чтобы приходили уведомления будем добавлять в форму @ник. Если юзер удалит @ник из формы - он добавится автоматически.
  4. когда доходим до последнего уровня комментов, то кнопка "ответить" все равно будет отображаться и, при ее нажатии, появится форма комментов, но коммент отправится в этот же уровень.
post_comments.png

Поехали)

1. Чтобы запретить комментирование первого сообщения выполняем все по этой инструкции после строки Визуально мы скрыли, но по гет запросу нет. Для этого мы сделаем так:

2. В "модификациях шаблонов" (admin.php?template-modifications/)
1) ищем модификацию по описанию "Modify the reply button for comments" и отключаем ее.

2) добавляем модификацию:

Шаблон: thpostcomments_post_comment
Ключ модификации: thpostcomments_post_comment_fix1
Описание: Исправления формы комментариев (1)
Тип поиска: Регулярное выражение
Найти: #<xf\:formrow>.*?</xf\:formrow>#s
Заменить:
HTML:
<div class="message-cell" style="margin-top: -25px;">
    <div class="formButtonGroup">
        <div class="formButtonGroup-primary">
            <xf:button class="button--link u-jsOnly" data-xf-click="preview-click" icon="preview" />

            <button type="submit" class="button--primary button button--icon button--icon--reply">
                <span class="button-text">{{ phrase('thpostcomments_post_comment') }}</span>
            </button>
            <button type="button" class="js-cancelButton button">
                <span class="button-text">{{ phrase('button.cancel') }}</span>
            </button>
        </div>
        <xf:if is="$attachmentData">
            <div class="formButtonGroup-extra">
                <xf:macro template="helper_attach_upload" name="upload_block"
                          arg-attachmentData="{$attachmentData}"
                          arg-forceHash="{$thread.draft_reply.attachment_hash}" />
            </div>
        </xf:if>
    </div>
</div>
Порядок выполнения: 20
Плагин: [TH] Post Comments

3) добавляем модификацию:
Шаблон: thpostcomments_post_comment
Ключ модификации: thpostcomments_post_comment_fix2
Описание: Исправления формы комментариев (2)
Тип поиска: Регулярное выражение
Найти: #<xf\:submitrow.*?</xf\:submitrow>#s
Заменить: [пусто]
Порядок выполнения: 20
Плагин: [TH] Post Comments

4) добавляем модификацию:
Шаблон: post_macros
Ключ модификации: thcomments_post_macros_reply_new
Описание: Modify the reply button for comments (ЗАМЕНА)
Тип поиска: Регулярное выражение
Найти: /(<xf:if is="\$thread\.canReply\(\))(">.*?>{{ phrase\('reply'\) }}<\/a>\s*<\/xf:if>)/s
Заменить:
HTML:
$1 && !$post.thpostcomments_depth && (($post.canComment() && (!$xf.options.thpostcomments_max_comment_depth || !$xf.options.thpostcomments_replaceReplyButton)) || !$post.canComment()) $2

<a href="{{$post.isFirstPost()?
         link('threads/reply', $thread):
         ($post.canComment()?
             link('posts/comment', $post):
             link('posts/'.{$post.thpostcomments_parent_post_id}.'/comment'))
         }}"
   title="{{ phrase('mut_insert_username')|for_attr }}"
   class="actionBar-action actionBar-action--comment"
   data-username="{{ $post.username }}"
   data-isfirstpost="{{ $post.isFirstPost() }}"
   data-editor-target="#js-post-{$post.post_id}"
   data-xf-click="comment">{{ phrase('reply') }}
</a>
Порядок выполнения: 20
Плагин: [TH] Post Comments

3. Заменяем файлы /js/themehouse/post-comments/comment.js и comment.min.js на прикрепленные к этому сообщению.
Если вы используете кеширование статики на своем сервере или cloudflare, то нужно удалить кеш (в cloudflare: Caching->Purge Everything).

4. Файл /src/addons/ThemeHouse/PostComments/XF/Pub/Controller/Post.php после строки:
PHP:
$message = $this->plugin('XF:Editor')->fromInput('message');
добавляем:
PHP:
        // уведомление кому ответили, если никто @не_указан
        if(strpos($message, '@')===false && \XF::visitor()->username != $post->username)
            $message = "@{$post->username},\n{$message}";
        // уведомление ТСу
        //if(strpos($message, "@{$post->Thread->username}")===false && \XF::visitor()->username != $post->username)
        //    $message = "@{$post->Thread->username},\n{$message}";

5. В админке, на главной, вероятнее всего появится сообщение от "Инспектора файлов", что были изменены файлы. Нужно будет просто удалить файл /src/addons/ThemeHouse/PostComments/hashes.json
 

Вложения

  • post-comments_js.zip
    3 KB · Просмотры: 8
Последнее редактирование:
Hope & Mirovinger, я надеюсь, что когда то тут появится смайлик facepalm.
alexz15, к чему это?
Меня тоже это не устраивает, но уведомления плагин шлет, только если кого-то цитируют или @упоминают в комментах. Поэтому мое решение смотри ниже :)
Решение кривое, которое ставить на лайв точно не рекомендуется.
1. Чтобы запретить комментирование первого сообщения выполняем все по этой инструкции после строки Визуально мы скрыли, но по гет запросу нет. Для этого мы сделаем так:
и что? Гет запрос досих пор живой, он всегда будет живой с любыми правками, пока в коде не будет проверок соответствующих, так что дальше уже и читать бесмысленно. Там уже полностью описано как сдлеать, что бы и закрыть. Но посмотрим в якобы решение.
2) добавляем модификацию:
4) добавляем модификацию:
Просто нет желания комментировать, поэтому соберу в 1:
Template modifications must be careful not to replace too much of a template. This might require the use of more complex methods such as a PHP callback or regular expression match.
3. Заменяем файлы /js/themehouse/post-comments/comment.js и comment.min.js на прикрепленные к этому сообщению.
Можно переопределить в js своих, или же при помощи TMS указать на новые, что бы не лезть в шаблоны. Если это делать ещё и напрямую, то дополнение не будет ставиться, а это вообще нарушение 2 пункта
The add-on must be installable.
4. Файл /src/addons/ThemeHouse/PostComments/XF/Pub/Controller/Post.php после строки:
И ещё 1 нарушение стандартов, когда в той ссылке был и пример
Existing classes must be extended using the XenForo Class Proxy (XFCP) system via the built in “Class extensions” system.
If a class extension is required to extend core methods then it must be extended properly, rather than overridden, by calling the parent method.
If a core method has different return types with different behaviours (e.g. controller actions return different types of reply objects) then the extended code must check to ensure it’s working with the correct type.
А что делать с удаленными пользователями или тех кого не существует? И что если удалят? Тег сгенерирован и лежит уже под тегом [USER] в движке, так что бред и проблем вызовет в разы больше в будущем.
5. В админке, на главной, вероятнее всего появится сообщение от "Инспектора файлов", что были изменены файлы. Нужно будет просто удалить файл /src/addons/ThemeHouse/PostComments/hashes.json
Разработчики не для этого делали, что бы потом удалять хеш. Подрезать хеш, да можно. Удалять не имеет смысла, и помимо этого хеши решают множество проблем и их решение.
Место чем собрать 1 нормальное дополнение которое расширяет, мы изнасиловали текущее как могли
 
Последнее редактирование:
Ты показывай тогда правильные примеры реализации, не вижу их пока.
 
и что? Гет запрос досих пор живой, он всегда будет живой с любыми правками, пока в коде не будет проверок соответствующих, так что дальше уже и читать бесмысленно. Там уже полностью описано как сдлеать, что бы и закрыть. Но посмотрим в якобы решение.
Ну так я ведь и написал, что нужно сделать после строки Визуально мы скрыли, но по гет запросу нет. Для этого мы сделаем так: . Т.е. проверка именно в коде (MMO\ExtendThComments\PostComments\XF\Pub\Controller\Post ), а не просто в модификации.

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

А что делать с удаленными пользователями или тех кого не существует? И что если удалят? Тег сгенерирован и лежит уже под тегом [USER] в движке, так что бред и проблем вызовет в разы больше в будущем.
Оставит коммент с добавлением "@Удалённый пользователь" - всего-то. Если удалит @ник, то пусть удаляет - оповещение пользователю уже пришло - это стандартная функция движка.
Здесь как раз и вся суть в том, что добавляем @ник, чтобы приходили оповещения, которые не приходят при стандартном использовании.

А то что правки плагина были с нарушениями - согласен. Но, если автор обновит плагин до нужного функционала, то можно легко откатиться назад. Тут правок-то как кот наплакал.
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
alexz15, я посмотрел и вижу дофига замены, а не подключенный для этого шаблона. Только после добавления или редактирования движок не отправит оповещение новому пользователю. Для всех оповещений есть нотифер система, которую нужно и делать. А не пытаться грязными хаками закрыться
Но, если автор обновит плагин до нужного функционала, то можно легко откатиться назад
Даже если автор и не обновит до нужного функционала возникнут проблемы и не 1 в будущем с такими правками
 
Captain, из замен там только файлы js и хак в файле Post.php - всё! Они перезапишутся при обновлении плагина.
js-файлы добавляют плавное появление формы под нужным комментом и @ник в редактор, а Post.php добавляет @ник в сообщение, если он не был добавлен пользователем. (можно, кстати, если немного подправить код, обойтись только правкой js-файла, который будет добавлять @ник при отправке сообщения, чтобы не редактировать Post.php).
Затем, для отката, просто включить родную модификацию с описанием "Modify the reply button for comments" и отключить 3 созданные нами модификации:
thpostcomments_post_comment_fix1 thpostcomments_post_comment_fix2 thcomments_post_macros_reply_new
Готово!
Только после добавления или редактирования движок не отправит оповещение новому пользователю.
С чего бы это? Все отправляет. При отправке коммента юзер оставляет @ник, а движок отправляет уведомление @ник'у о том, что его упомянули. Потом хоть редактируй сообщение, хоть нет - уведомление пришло. Или может я не понял тебя?..
Для всех оповещений есть нотифер система, которую нужно и делать.
Вот за эту реализацию я плюсану тебе, если поможешь) т.к. пытался добавить что-то типа:
PHP:
        $UserIds = $this->postPreparer->getQuotedUserIds(); // кто цитирует
        $UserIds[] = $parentPost->Thread->user_id; // автор темы
        $UserIds[] = $parentPost->user_id; // кому написали коммент
        /** @var \XF\Service\Post\Notifier $notifier */
        $notifier = $this->service('XF:Post\Notifier', $this->post, 'reply');
        $notifier->setMentionedUserIds($this->postPreparer->getMentionedUserIds()); // @упомянул
        $notifier->setQuotedUserIds($UserIds); // процетировал
        $notifier->notifyAndEnqueue(3);
но на каких-то уровнях комментирования выдавало ошибку типа NULL in 'content_id'. Я не стал разбираться в чем дело и пошел проще - просто добавил @ник в форму. И это, я думаю, даже лучше чем код выше, т.к. добавление @ника в форму - это стандартная функция движка, который сам знает, как лучше отправить уведомление пользователю, а также это стандарт для комментариев, когда нужно упомянуть того, кому пишешь.
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
из замен там только файлы js и хак в файле Post.php - всё! Они перезапишутся при обновлении плагина.
js-файлы добавляют плавное появление формы под нужным комментом и @ник в редактор, а Post.php добавляет @ник в сообщение, если он не был добавлен пользователем. (можно, кстати, если немного подправить код, обойтись только правкой js-файла, который будет добавлять @ник при отправке сообщения, чтобы не редактировать Post.php).
Можно переопределить в js своих, или же при помощи TMS указать на новые, что бы не лезть в шаблоны. Если это делать ещё и напрямую, то дополнение не будет ставиться, а это вообще нарушение 2 пункта
The add-on must be installable.
хак в файле Post.php - всё!
И ещё 1 нарушение стандартов, когда в той ссылке был и пример
Existing classes must be extended using the XenForo Class Proxy (XFCP) system via the built in “Class extensions” system.
If a class extension is required to extend core methods then it must be extended properly, rather than overridden, by calling the parent method.
If a core method has different return types with different behaviours (e.g. controller actions return different types of reply objects) then the extended code must check to ensure it’s working with the correct type.
Даже если автор и не обновит до нужного функционала возникнут проблемы и не 1 в будущем с такими правками
но на каких-то уровнях комментирования выдавало ошибку типа NULL in 'content_id'. Я не стал разбираться в чем дело и пошел проще - просто добавил @ник в форму. И это, я думаю, даже лучше чем код выше, т.к. добавление @ника в форму - это стандартная функция движка, который сам знает, как лучше отправить уведомление пользователю, а также это стандарт для комментариев, когда нужно упомянуть того, кому пишешь.
Потому что нужно инициализировать в конструкторе соответствующую сущность и указывать контент тайп этой сущности.
В случае обновления все эти правки накрываются медным тазом. Дополнением - всё продолжает работать, до глобального рефакторинга
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу