• Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, когда я смотрю на ваш пример и пишу сам, вы говорите, что я пишу отсебятину) когда я копирую ваш код тоже плохо))))

    почему ничего не выводится, у меня скоро приступ будет))))
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, модель Comments изменил так, все равно ничего
    class Comments extends ActiveRecord
    {
    
        public static function tableName()
        {
            return 'comments';
        }
    
        public function rules()
        {
            return [
                /* nick and comment body are both required */
                [[ 'body'], 'required'],
            ];
        }
    
    
        public function attributeLabels()
        {
            return [
                'id' => Yii::t('app', 'ID'),
                'body' => Yii::t('app', 'Body'),
                'created_at' => Yii::t('app', 'Created At'),
                'update_at' => Yii::t('app', 'Update At'),
                'status' => Yii::t('app', 'Status'),
    
            ];
        }
    
        public function behaviors()
        {
            return [
                TimestampBehavior::className(),
            ];}
    }
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, содержимое файла _vies_comments.php я кидал вам)
    foreach может и не нужен, но он никак не мешает там, потом все подправлю, сейчас главное комментарии же
    а что не так с блог моделью? статьи все выводятся как надо, это не влияет на комментарии.

    мне нужно вывести комментарии, зачем вообще трогать статьи?
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, а через phpinfo(), там же много всего выводится. как узнать включен вывод ошибок или нет?))
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, так я это все сделал))) только ничего не выводится
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, так вот я попробовал CTRL+C -> CTRL+V и вообще ничего не выводится) я попробовал немного изменить под себя, сейчас выводятся и статьи и количество комментариев, сколько должно быть выведено, но сами комментарии нет.

    Скажите, почему могут не показываться комментарии? Раз получает количество верных комментариев, но они не выводятся просто.
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik,
    <div>
     <?= $comment->body; ?>
    </div>

    я вообще все переменные перепробовал)
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, я добавил тот файл _view_comment.php и прописал в itemView его.
    Теперь не выводятся вообще комментарии. Я просмотрел ваш код, он практически ничем не отличается от моего. Я изменил для вывода статей пару строчек, потому что они так не отображались.

    А насчет того, что вы добавили свой комментарий. Я его не видел до этого и уведомление тоже не пришло) Поэтому даже не понимал о чем вы говорите.
    5adbb564cf98a172509185.jpeg
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik,
    Здравствуйте, получилось вывести id постов, которые находятся на странице 1, я написал им в столбце page единицу. Только выводятся id, а как вывести сам комментарий - body?
    5adb8e04daa96021459352.jpeg

    контроллер
    $comment = new Comments();
      $article = Blog::find()->where(['id' => $id])->all();
      $query = Comments::find()->where(['page' => $id]);
        
      $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
                'pageSize' => 10,
            ]
        ]);
    
       if ($comment->load(Yii::$app->request->post()) && $comment->post()) {
            return $this->refresh();
        }
    
        return $this->render('view', [
          'article' => $article,
          'dataProvider' => $dataProvider, 
          'comment' => $comment,
        ]);
      }


    представление
    <?php Pjax::begin(); ?>
          <?php $form = ActiveForm::begin([
            'id' => 'login-form',
            'options' => ['class' => 'form-horizontal'],
            ]) ?>
            <?= $form->field($comment, 'body') ?>
            <div class="form-group">
                <div class="col-lg-offset-1 col-lg-11">
                    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
                </div>
            </div>
            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
            <h3>Отзывы:</h3>
            <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                //'itemView' => 'view',
              //  'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
            ?>


    А еще в Comments поля: id, nick, body, page(вот по этому значению выводятся комментарии)
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, да я поменял на $comment, но с этой переменной у меня ничего не записывается в бд и ничего не выводит. Выводит вот что.
    5ad78692211db751512585.jpeg

    просто если я помещу это все в foreach, то выводится то, что на фото, если не помещу, то выводится ошибка выше
    <section>
        <div class="container">
            <div class="row">
                <div class="col-sm-12 padding-right">
                    <div class="features_items"><!--features_items-->
    
                        <?php if(!empty($article)): ?>
    
                            <?php $i = 0; foreach($article as $product): ?>
    
                            <div class="product-image-wrapper">
                                <div class="single-products">
                                    <div class="productinfo text-center">
                                      <!--  <?= Html::img("@web/images/{$product->img}", ['alt' => $product->header])?> -->
                                      <p style="text-align: justify;"><?= $product->body?></p>
                                      <p ><a href="<?= \yii\helpers\Url::to(['dishes/view', 'id' => $product->id]) ?>"></a></p>  
                                  </div>
                              </div>
                              <div class="choose">
                              </div>
                          </div>
    
    
                      </div>
                  </div>
              </div>
          </div>
    
    
    
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
          <?php $form = ActiveForm::begin([
            'id' => 'login-form',
            'options' => ['class' => 'form-horizontal'],
            ]) ?>
            <?= $form->field($comment, 'body') ?>
    
            <div class="form-group">
                <div class="col-lg-offset-1 col-lg-11">
                    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
                </div>
            </div>
            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
            <h3>Отзывы:</h3>
    
            <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => 'view',
                'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
            ?>
        </div>
    </div>
    
    
      <?php endforeach;?>
    <?php else :?>
        <h2>Здесь статьи пока нет...</h2>
    <?php endif;?>
    </section>
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, slo_nik, да я поменял на $comment, но с этой переменной у меня ничего не записывается в бд и ничего не выводит. Выводит вот что.
    5ad78692211db751512585.jpeg

    просто если я помещу это все в foreach, то выводится то, что на фото, если не помещу, то выводится ошибка выше
    <section>
        <div class="container">
            <div class="row">
                <div class="col-sm-12 padding-right">
                    <div class="features_items"><!--features_items-->
    
                        <?php if(!empty($article)): ?>
    
                            <?php $i = 0; foreach($article as $product): ?>
    
                            <div class="product-image-wrapper">
                                <div class="single-products">
                                    <div class="productinfo text-center">
                                      <!--  <?= Html::img("@web/images/{$product->img}", ['alt' => $product->header])?> -->
                                      <p style="text-align: justify;"><?= $product->body?></p>
                                      <p ><a href="<?= \yii\helpers\Url::to(['dishes/view', 'id' => $product->id]) ?>"></a></p>  
                                  </div>
                              </div>
                              <div class="choose">
                              </div>
                          </div>
    
    
                      </div>
                  </div>
              </div>
          </div>
    
    
    
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
          <?php $form = ActiveForm::begin([
            'id' => 'login-form',
            'options' => ['class' => 'form-horizontal'],
            ]) ?>
            <?= $form->field($comment, 'body') ?>
    
            <div class="form-group">
                <div class="col-lg-offset-1 col-lg-11">
                    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
                </div>
            </div>
            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
            <h3>Отзывы:</h3>
    
            <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => 'view',
                'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
            ?>
        </div>
    </div>
    
    
      <?php endforeach;?>
    <?php else :?>
        <h2>Здесь статьи пока нет...</h2>
    <?php endif;?>
    </section><section>
        <div class="container">
            <div class="row">
                <div class="col-sm-12 padding-right">
                    <div class="features_items"><!--features_items-->
    
                        <?php if(!empty($article)): ?>
    
                            <?php $i = 0; foreach($article as $product): ?>
    
                            <div class="product-image-wrapper">
                                <div class="single-products">
                                    <div class="productinfo text-center">
                                      <!--  <?= Html::img("@web/images/{$product->img}", ['alt' => $product->header])?> -->
                                      <p style="text-align: justify;"><?= $product->body?></p>
                                      <p ><a href="<?= \yii\helpers\Url::to(['dishes/view', 'id' => $product->id]) ?>"></a></p>  
                                  </div>
                              </div>
                              <div class="choose">
                              </div>
                          </div>
    
    
                      </div>
                  </div>
              </div>
          </div>
    
    
    
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
          <?php $form = ActiveForm::begin([
            'id' => 'login-form',
            'options' => ['class' => 'form-horizontal'],
            ]) ?>
            <?= $form->field($comment, 'body') ?>
    
            <div class="form-group">
                <div class="col-lg-offset-1 col-lg-11">
                    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
                </div>
            </div>
            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
            <h3>Отзывы:</h3>
    
            <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => 'view',
                'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
            ?>
        </div>
    </div>
    
    
      <?php endforeach;?>
    <?php else :?>
        <h2>Здесь статьи пока нет...</h2>
    <?php endif;?>
    </section>
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, извините, опыта у меня в этом пока не много. И возможно я плохо понимаю.
    Я сделал вот так, все равно та же ошибка
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
          <?php $form = ActiveForm::begin([
            'id' => 'login-form',
            'options' => ['class' => 'form-horizontal'],
            ]) ?>
            <?= $form->field($model, 'body') ?>
    
            <div class="form-group">
                <div class="col-lg-offset-1 col-lg-11">
                    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
                </div>
            </div>
            <?php ActiveForm::end() ?>
            <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
            <h3>Отзывы:</h3>
    
            <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => 'view',
                'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
            ?>
        </div>
    </div>
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik,
    представление
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
            <?php $form = ActiveForm::begin([
            'id' => 'post-comment-form',
            'options' => ['class' => 'form-horizontal'],
            'fieldConfig' => [
                'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
                'labelOptions' => ['class' => 'col-lg-1 control-label'],
            ],
        ]); ?>
    
       
    
        <?= 
    
        $form->field($comment, 'body') ;
        var_dump($form) ;
        ?>
    
       <?php 
    
    
        echo '<div class="form-group">';
        echo '<div class="col-lg-11">';
        echo Html::submitButton('Отправить', ['class' => 'btn btn-my']);
        echo '</div>';
        echo '</div>';
        
        ?>
    
        <?php ActiveForm::end(); ?>
         <?php Pjax::end(); ?>
        </p>
    
    <div class="site-comments">
        <h3>Отзывы:</h3>
    
        <?php 
    echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => 'view',
                'emptyText' => 'Отзывов нет, будьте первым! ',
            ])
    
    
        ?>

    контроллер
    public function actionView($id){
      $comment = new Comments();
      $article = Blog::find()->where(['id' => $id])->all();
      $query = Comments::find()->where(['page' => $id]);
        
      $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
                'pageSize' => 10,
            ]
        ]);
    
        return $this->render('view', [
          'article' => $article,
          'dataProvider' => $dataProvider, 
          'comment' => $comment,
          // 'query' => $query,
        ]);
      }


    модель
    class Comments extends ActiveRecord
    {
        public $nick ;
        public $email;
        public $body;
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                /* nick and comment body are both required */
                [[ 'body'], 'required'],
                [['email'], 'email'],
            ];
        }
    
        /**
         * Appends post to DB
         * @return boolean whether the post is appended successfully
         */
        public function post()
        {
            if ($this->validate()) {
                $db = Yii::$app->db;
    
                $nickSafe=Yii::$app->user->identity->email;
        
    
                $bodySafe = htmlspecialchars($this->body, ENT_QUOTES, "UTF-8");
                
                $db->createCommand('INSERT INTO comments (nick, body)' .
                    ' VALUES (\'' . $nickSafe . '\',  REPLACE("' . $bodySafe . '", "\n", "<br />"));')->execute();
            
                return true;
            }
            return false;
        }
    }
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, я если изменяю на обычную форму, пишет, что не может конвертировать $form в строку, делаю через var_dump и ошибка5ad76349a1b76714432393.jpeg
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik,модель я не изменял
    class Comments extends ActiveRecord
    {
        public $nick ;
        public $email;
        public $body;
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                /* nick and comment body are both required */
                [[ 'body'], 'required'],
                [['email'], 'email'],
            ];
        }
    
        /**
         * Appends post to DB
         * @return boolean whether the post is appended successfully
         */
        public function post()
        {
            if ($this->validate()) {
                $db = Yii::$app->db;
    
                $nickSafe=Yii::$app->user->identity->email;
        
    
                $bodySafe = htmlspecialchars($this->body, ENT_QUOTES, "UTF-8");
                
                $db->createCommand('INSERT INTO comments (nick, body)' .
                    ' VALUES (\'' . $nickSafe . '\',  REPLACE("' . $bodySafe . '", "\n", "<br />"));')->execute();
            
                return true;
            }
            return false;
        }
    }
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    5ad75664b851a363126327.jpeg@slo_nik, все равно не работает, path_to_file_view - это имя файла?
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, я исправил, теперь вот так. Выводятся комментарии правильно, но не показывается их текст. не записываются в бд
    5ad74b90da662794504458.jpeg

    представление
    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
            <?php $form = ActiveForm::begin([
            'id' => 'post-comment-form',
            'options' => ['class' => 'form-horizontal'],
            'fieldConfig' => [
                'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
                'labelOptions' => ['class' => 'col-lg-1 control-label'],
            ],
        ]); ?>
    
        <?php
    
        
        $field = $form->field($comment, 'body', [
            'inputOptions' => [
                'placeholder' => $comment->getAttributeLabel('body'),
            ],
        ])->label(false);
        $field->textArea([
            'rows' => '6'
        ]);
        echo $field;
    
        echo '<div class="form-group">';
        echo '<div class="col-lg-11">';
        echo Html::submitButton('Отправить', ['class' => 'btn btn-my']);
        echo '</div>';
        echo '</div>';
        
        ?>
    
        <?php ActiveForm::end(); ?>
         <?php Pjax::end(); ?>
        </p>
    
    <div class="site-comments">
        <h3>Отзывы:</h3>
    
        <?php 
    
    
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => function ($comment, $key, $index, $widget) {
                    if ($comment['email']) {
                        return $this->renderDynamic('echo \'<b>' . $comment['nick'] . '</b> (' . $comment['email'] . '):<br>' . $comment['body'] . '<br><br>\';');
                    } else {
                        return $this->renderDynamic('echo \'<b>' . $comment['nick'] . '</b>:<br>' . $comment['body'] . '<br><br>\';');
                    }
                },
                'emptyText' => 'Отзывов нет, будьте первым! '
            ])
        ?>
      </div>
    </div>


    контроллер
    public function actionView($id){
      $comment = new Comments();
      $article = Blog::find()->where(['id' => $id])->all();
      $query = Comments::find()->where(['page' => $id]);
    
       $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
                'pageSize' => 10,
            ]
        ]);
    
        return $this->render('view', [
          'article' => $article,
          'dataProvider' => $dataProvider, 
          'comment' => $comment,
           'query' => $query,
        ]);
      }
  • Как организовать разные комментарии на каждой странице, YII2?

    @Strodj Автор вопроса
    slo_nik, сама статья не выводится если писать как у вас, но я написал так
    $article = Blog::find()->where(['id' => $id])->all();

    Теперь статьи выводятся. а комментарии вообще нет. Не понимаю, что не так делаю.
    Убрал лишнее в представлении

    <div class="comments">
      <p >
          <?php Pjax::begin(); ?>
            <?php $form = ActiveForm::begin([
            'id' => 'post-comment-form',
            'options' => ['class' => 'form-horizontal'],
            'fieldConfig' => [
                'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
                'labelOptions' => ['class' => 'col-lg-1 control-label'],
            ],
        ]); ?>
    
        <?php
        $field = $form->field($comment, 'body', [
            'inputOptions' => [
                'placeholder' => $comment->getAttributeLabel('body'),
            ],
        ])->label(false);
        $field->textArea([
            'rows' => '6'
        ]);
        echo $field;
    
    
        echo '<div class="form-group">';
        echo '<div class="col-lg-11">';
        echo Html::submitButton('Отправить', ['class' => 'btn btn-my']);
        echo '</div>';
        echo '</div>';
        
        ?>
    
        <?php ActiveForm::end(); ?>
         <?php Pjax::end(); ?>
        </p>
    
        <div class="site-comments">
        <h3>Отзывы:</h3>
    
        <?php
      
        $db = Yii::$app->db;
        ?>
    
        <?php 
            echo ListView::widget([
                'dataProvider' => $dataProvider,
                'itemView' => function ($key, $query, $index, $widget) {
                    if ($comment['email']) {
                        return $this->renderDynamic('echo \'<b>' . $comment['nick'] . '</b> (' . $comment['email'] . '):<br>' . $comment['body'] . '<br><br>\';');
                    } else {
                        return $this->renderDynamic('echo \'<b>' . $comment['nick'] . '</b>:<br>' . $comment['body'] . '<br><br>\';');
                    }
    
                },
                'emptyText' => 'Отзывов нет, будьте первым! '
            ])
        ?>
      </div>
    </div>


    а в контроллере
    public function actionView($id){
      $comment = new Comments();
      $article = Blog::find()->where(['id' => $id])->all();
      $query = Comments::find()->where(['id' => $id]);
        
    
       $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
                'pageSize' => 10,
            ]
        ]);
    
    
    
        return $this->render('view', [
          'article' => $article,
          'dataProvider' => $dataProvider, 
          'comment' => $comment,
           'query' => $query,
        ]);
      }