Giter Site home page Giter Site logo

Comments (11)

ihorchepurnyi avatar ihorchepurnyi commented on May 27, 2024

Здравствуйте, только что проверил работу reply кнопки на чистом шаблоне, не смог воспроизвести ошибку. Думаю дело в ассетах, попробуйте проверить наличие comments.js на странице и ошибок в консоли. Если вы меняли темплейт(_list.php), скиньте пожалуйста его код для воспроизведения ошибки.

from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

Файл _list я переименовал в comments.php
Правильно ли я понимаю - data-action вызывает соответствующую функцию в jquery?
Т.е. при клике на <?php echo Html::a("<span class='glyphicon glyphicon-share-alt'></span> Ответить", '#', ['class' => 'comment-reply', 'data' => ['action' => 'reply', 'comment-id' => $comment->id]]); ?>

-должен вызватся


    /**
     * Reply to comment
     * @param event
     */
    function reply(event) {
        event.preventDefault();
        var $commentForm = event.data.commentForm;
        var settings = $commentForm.data('comment');
        var $this = $(this);
        var parentCommentSelector = $this.parents('[data-comment-content-id="' + $this.data('comment-id') + '"]');
        //Move form to comment container
        $commentForm.appendTo(parentCommentSelector);
        //Update parentId field
        $commentForm.find('[data-comment="parent-id"]').val($this.data('comment-id'));
        //Show cancel reply link
        $commentForm.find(settings.cancelReplyBtnSelector).show();
    }

из файла comments.js ?

<?php
use yii\helpers\Html;
use yii\helpers\Url;
use yii\helpers\HtmlPurifier;
use common\components\rbac\rbacRoles;

?>

<?php if (!empty($comments)) : ?>
    <?php foreach ($comments as $comment) : ?>
        <li class="comment" id="comment-<?php echo $comment->id ?>">
            <div class="comment-content" data-comment-content-id="<?php echo $comment->id ?>">
                <div class="comment-author-avatar">
                    <?php echo $comment->getAvatar(['title' => $comment->getAuthorName(),'alt' => $comment->getAuthorName()]); ?>
                </div>
                <div class="comment-details">
                    <?php if ($comment->isActive): ?>
                        <div class="comment-action-buttons">
                            <?php if (Yii::$app->getUser()->can(rbacRoles::ROLE_ADMIN)): ?>
                                <?php echo Html::a('<span class="glyphicon glyphicon-trash"></span> Отключить', '#', ['data' => ['action' => 'delete', 'url' => Url::to(['/comment/default/delete', 'id' => $comment->id]), 'comment-id' => $comment->id]]); ?>
                            <?php endif; ?>
                            <?php if (!Yii::$app->user->isGuest && ($comment->level < $maxLevel || is_null($maxLevel))): ?>
                                <?php echo Html::a("<span class='glyphicon glyphicon-share-alt'></span> Ответить", '#', ['class' => 'comment-reply', 'data' => ['action' => 'reply', 'comment-id' => $comment->id]]); ?>
                            <?php endif; ?>
                        </div>
                    <?php endif; ?>
                    <div class="comment-author-name">
                        <span><?php echo $comment->getAuthorName(); ?></span>
                        <span class="comment-date">
                            <?php echo $comment->getPostedDate(); ?>
                        </span>
                    </div>
                    <div class="comment-body">
                        <?php echo $comment->getMessage(); ?>
                    </div>
                </div>
            </div>
            <?php if ($comment->hasChildren()): ?>
                <ul class="children">
                    <?php echo $this->render('_comments', ['comments' => $comment->children, 'maxLevel' => $maxLevel]) ?>


       </ul>


        <?php endif; ?>

     </li>
    <?php endforeach; ?>

    <?php else:?>
        <li class="noComments"><i>Комментариев нет...</i><li>
<?php endif; ?>`

from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

У меня скрипт в конце подключается в таком порядке .Возможно, должен подключаться после pjax? Или это не критично?

`<script src="/work/yii2-Blog/css/comments/comments.js"></script>
<script src="/work/yii2-Blog/assets/f3b3e99e/yii.validation.js"></script>
<script src="/work/yii2-Blog/assets/f3b3e99e/yii.activeForm.js"></script>
<script src="/work/yii2-Blog/assets/dffd9ef9/jquery.pjax.js"></script>
<script type="text/javascript">jQuery(document).ready(function () {
 $('#comment-pjax-container-w0').on('pjax:end', function() {
    $('#mes').css('display', 'none');
    $('#mes').fadeIn(1000);


        $('textarea').focus(function() {
            $('#mes').fadeOut(1000);
        });

    })
jQuery('#comment-form').yiiActiveForm([{"id":"message_textarea","name":"message","container":".field-message_textarea","input":"#message_textarea","error":".help-block.help-block-error","validateOnChange":false,"validateOnBlur":false,"validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Необходимо заполнить «Комментарий»."});}}], []);
jQuery(document).pjax("#comment-pjax-container-w0 a", "#comment-pjax-container-w0", {"push":false,"replace":false,"timeout":10000,"scrollTo":false});
jQuery(document).on('submit', "#comment-pjax-container-w0 form[data-pjax]", function (event) {jQuery.pjax.submit(event, '#comment-pjax-container-w0', {"push":false,"replace":false,"timeout":10000,"scrollTo":false});});
jQuery('#SubscriptionSidebar-form').yiiActiveForm([{"id":"subscriptionsidebar-email","name":"email","container":".field-subscriptionsidebar-email","input":"#subscriptionsidebar-email","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Необходимо заполнить «Email»."});yii.validation.email(value, messages, {"pattern":/^[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/,"fullPattern":/^[^@]*<[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?>$/,"allowName":false,"message":"Значение «Email» не является правильным email адресом.","enableIDN":false,"skipOnEmpty":1});}}], []);
jQuery(document).pjax("#SubscriptionSidebar a", "#SubscriptionSidebar", {"push":true,"replace":false,"timeout":1000,"scrollTo":false});
jQuery(document).on('submit', "#SubscriptionSidebar form[data-pjax]", function (event) {jQuery.pjax.submit(event, '#SubscriptionSidebar', {"push":true,"replace":false,"timeout":1000,"scrollTo":false});});
jQuery('#SubscriptionFooter-form').yiiActiveForm([{"id":"subscriptionfooter-email","name":"email","container":".field-subscriptionfooter-email","input":"#subscriptionfooter-email","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Необходимо заполнить «Email»."});yii.validation.email(value, messages, {"pattern":/^[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/,"fullPattern":/^[^@]*<[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?>$/,"allowName":false,"message":"Значение «Email» не является правильным email адресом.","enableIDN":false,"skipOnEmpty":1});}},{"id":"subscriptionfooter-checkbox","name":"checkbox","container":".field-subscriptionfooter-checkbox","input":"#subscriptionfooter-checkbox","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Нужно согласиться с правилами","requiredValue":1});}}], []);
jQuery(document).pjax("#SubscriptionFooter a", "#SubscriptionFooter", {"push":true,"replace":false,"timeout":1000,"scrollTo":false});
jQuery(document).on('submit', "#SubscriptionFooter form[data-pjax]", function (event) {jQuery.pjax.submit(event, '#SubscriptionFooter', {"push":true,"replace":false,"timeout":1000,"scrollTo":false});});
});</script>    </body>
</html>`



from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

Когда в файле comments.js для теста пишу alert(); то при обнавлении страници он отрабатывает. Значит файл подключается, но плагин не работает при нажатии на ссылку.

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on May 27, 2024

Попробуйте следующий способ:

  1. Создать папку comments например в папке views вашего приложения рядом с папкой site.
  2. В ней создать два файла, index.php и _comments.php

Код для index.php

<?php

use yii\widgets\Pjax;

/* @var $this \yii\web\View */
/* @var $comments array */
/* @var $commentModel \yii2mod\comments\models\CommentModel */
/* @var $maxLevel null|integer comments max level */
/* @var $encryptedEntity string */
/* @var $pjaxContainerId string */
/* @var $formId string comment form id */
?>
<?php Pjax::begin([
    'enablePushState' => false,
    'timeout' => 10000,
    'id' => $pjaxContainerId
]); ?>
<div class="comments row">
    <div class="col-md-12 col-sm-12">
        <div class="title-block clearfix">
            <h3 class="h3-body-title"><?php echo Yii::t('yii2mod.comments', 'Comments'); ?></h3>
            <div class="title-separator"></div>
        </div>
        <ol class="comments-list">
            <?php echo $this->render('_comments', ['comments' => $comments, 'maxLevel' => $maxLevel]) ?>
        </ol>
        <?php if (!Yii::$app->user->isGuest): ?>
            <?php echo $this->render('@vendor/yii2mod/yii2-comments/widgets/views/_form', [
                'commentModel' => $commentModel,
                'encryptedEntity' => $encryptedEntity,
                'formId' => $formId
            ]); ?>
        <?php endif; ?>
    </div>
</div>
<?php Pjax::end(); ?>

для _comments.php я использовал ваш код

  1. В месте где вы добавляете виджет, указать путь к новому темплейту:
<?php echo Comment::widget([
            'model' => $model,
            'commentView' => '@app/views/comments/index' // Вот эта строка
        ]); ?>

И после этого почистить папку assets в папке web, и заново попробовать. Этот способ проверил, должен работать.

from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

Попробовал. Ни чего не изменилось. Вероятнее всего я где-то, что-то забыл .

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on May 27, 2024

Еще меня смущает в вашем коде вот эта строка:

<script src="/work/yii2-Blog/css/comments/comments.js"></script>

Путь к файлу comments.js должен быть примерно такой же как у activeForm.js в вашем примере, а он почему то ведет в папку css.

В моем случае:

<script src="/assets/df2db1f0/jquery.js"></script>
<script src="/assets/bc2e7155/yii.js"></script>
<script src="/assets/ef25f117/js/comment.js"></script>
<script src="/assets/bc2e7155/yii.validation.js"></script>
<script src="/assets/bc2e7155/yii.activeForm.js"></script>
<script src="/assets/75c0633a/jquery.pjax.js"></script>
<script src="/assets/918ca098/js/bootstrap.js"></script>

Честно говоря не смогу вам помочь, могу посоветовать установить просто чистый yii2/basic или наш yii2mod/base и в нем протестировать этот виджет может тогда найдете где допустили ошибку.

Eще раз проверил ваш код на чистом шаблоне, он работает прекрасно.

from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

Я установил скрипты и стили в папку web, чтобы не перезаписывалось туда же в assets, а подключалось оттуда.

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on May 27, 2024

Предлагаю так попробовать:

  1. Убедится что вы не правили файлов на прямую в папке vendor/yii2mod/comments.
  2. Убедится что по умолчанию(примеры в документации) виджет работает правильно.
  3. После того как вы убедились в том что виджет корректно работает, добавить свои шаблоны(пример) и проверить их.

from yii2-comments.

sergio-s avatar sergio-s commented on May 27, 2024

Ок. Спасибо. Попробую.
А вообще код грамотно написан. Есть чему поучиться.

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on May 27, 2024

Спасибо, главное чтобы работал :)

from yii2-comments.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.