Code Monkey home page Code Monkey logo

Comments (20)

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

Здравствуйте, скиньте пожалуйста код примера в котором у вас ошибка

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Какая именно из ошибок вас интересует ?

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

1 исправим, нужен код для воспроизведения 2 проблемы

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Ок, я попытаюсь более детально описать вторую проблему потому как просто кодом не обойтись.
Допустим у вас есть сущность Product к которой применяеться ваш виджет, в таблице товаров 100+, на страницу вы выводите только 10 случайных товаров тоесть в SQL запросе для выборки товаров вы используете ORDER BY rand() после чего выводите их на страницсау код моего SQL запро:

$query = Product::find()->select(product.*, case when product.currency_id is not null then product.price * currency.rate when program.currency_id is not null then product.price * cur.rate else product.price * (SELECT rate from currency where title = \'USD\') END priceE') ->where(['shoplook' => 1, 'product.is_available' => 1,])->orderBy(new Expression('rand()'))->limit(10);

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

окей, понял. То есть вы виджет применяете для каждого продукта?

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Совершенно верно

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

окей, спасибо. В ближайшее время постараюсь исправить.

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Спасибо

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

При использовании параметра 'showDeletedComments' => true выдвет Unknown Property по всей видимости вы просто забыли убрать его со страници описания в отделе Basic example: хотя параметр весьма полезный как альтернатива вместо отображения тексту Comment was deleted.

сделайте composer update, showDeletedComments был добавлен вчера.

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Ок

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

Добавил возможность установить id для pjax. Сделайте пожалуйста composer update.

<?php echo \yii2mod\comments\widgets\Comment::widget([
               'pjaxContainerId' => 'comment-pjax-container-' . $user->id
]); ?>

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

  1. Нахожу юзеров
$users = UserModel::find()->orderBy(new Expression('rand()'))->all(); // в тестовой базе 6 юзеров
  1. Вывод на фронтенде:
<div class="row">
    <?php foreach ($users as $user): ?>
        <div class="col-md-6">
            <div class="panel panel-default">
                <div class="panel-heading"><?php echo $user->email; ?></div>
                <div class="panel-body">
                    <?php echo \yii2mod\comments\widgets\Comment::widget([
                        'model' => $user,
                        'formId' => 'comment-form-' . $user->id,
                       'pjaxContainerId' => 'comment-pjax-container-' . $user->id
                    ]); ?>
                </div>
            </div>
        </div>
    <?php endforeach; ?>
</div>

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Вы выбераете всех юзеров, для того что бы выпала ошибка выберите одного или два (но не всех)

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

первый и второй баг касались orderBy(new Expression('rand()')) но второй баг видет за условия что только несколько юзеров будут отображены

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

А если так

  1. Выборка юзеров
$users = UserModel::find()->orderBy(new Expression('rand()'))->limit(2)->all();
  1. А на фронтенде не много по другому генерировать formId, и pjaxContainerId
<?php foreach ($users as $key => $user): ?>
        <div class="col-md-6">
            <div class="panel panel-default">
                <div class="panel-heading"><?php echo $user->email; ?></div>
                <div class="panel-body">
                    <?php echo \yii2mod\comments\widgets\Comment::widget([
                        'model' => $user,
                        'formId' => 'comment-form-' . $key,
                        'pjaxContainerId' => 'comment-pjax-container-' . $key
                    ]); ?>
                </div>
            </div>
        </div>
    <?php endforeach; ?>

Перезагрузки вроде бы нет.

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

Но в способе который выше, pjax контейнер перезагрузится, но не факт что там будет ваш коммент, так как это random. Если вы хотите чтобы он перезагрузился на нужную запись из рандомной выборки, то тут я не смогу помочь. Так как с таким не сталкивался.

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Хорошо, спасибо за помощь и апдейт модуля.
Если найду решение с обезательно сообщю.

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

не за что, в итоге мало чем помог)

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 2024

Нашел хак, корявый конечно. Идея в том чтобы в экшене поймать pjaxId при pjax реквесте, исходя из его ид найти юзера, и смержить основную выборку с выборкой в которой будет этот юзер(для которого непосредственно добавляется комментарий).
Также нужно добавить метод indexBy при выборке

  1. Вот код контроллера
$users = UserModel::find()->orderBy(new Expression('rand()'))->indexBy('id')->limit(2)->all();
if (Yii::$app->request->getIsPjax()) {
    $pjaxId = Yii::$app->request->getQueryParam('_pjax');
    $userId = substr($pjaxId, -1);
    $users = ArrayHelper::merge($users, UserModel::find()->where(['id' => $userId])->indexBy('id')->all());
}
  1. Код вьюхи, в pjaxContainerId последний символ это id юзера
<?php foreach ($users as $id => $user): ?>
        <div class="col-md-6">
            <div class="panel panel-default">
                <div class="panel-heading"><?php echo $user->email; ?></div>
                <div class="panel-body">
                    <?php echo \yii2mod\comments\widgets\Comment::widget([
                        'model' => $user,
                        'formId' => 'comment-form-' . $id,
                        'pjaxContainerId' => 'comment-pjax-container-' . $id
                    ]); ?>
                </div>
            </div>
        </div>
    <?php endforeach; ?>

В данном случае в ответе всегда будет запись для которой вы добавили коммент.

from yii2-comments.

vityapro avatar vityapro commented on June 2, 2024

Это просто гениально )

from yii2-comments.

ihorchepurnyi avatar ihorchepurnyi commented on June 2, 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.