This module provides a comments managing system.
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist yii2mod/yii2-comments "*"
or add
"yii2mod/yii2-comments": "*"
to the require section of your composer.json.
Database Migrations
Before using Comments Widget, we'll also need to prepare the database.
php yii migrate --migrationPath=@vendor/yii2mod/yii2-comments/migrations
Module setup
To access the module, you need to add the following code to your application configuration:
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
],
]
NOTE: Module id must be
comment
and not otherwise. This is because it is referred somewhere in the code with such name. A PR to fix it to use configured module id is welcome.
Now you can access to management section through the following URL: http://localhost/path/to/index.php?r=comments/index
By default only users with
admin
role have access to comments management section. But, you can overrideaccessControlConfig
property for ManageController.
Notes:
- Delete button visible only for users with
admin
role.
- When you delete a comment, all nested comments will be marked as
deleted
.
- You can override default CommentModel class by changing the property
commentModelClass
in the Comment Module.
- You can implement your own methods
getAvatar
andgetUsername
in theuserIdentityClass
. Just create this methods in your User model. For example:
public function getAvatar()
{
// your custom code
}
public function getUsername()
{
// your custom code
}
Basic example:
// the model to which are added comments, for example:
$model = Post::find()->where(['title' => 'some post title'])->one();
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model,
]); ?>
You can use your own template for render comments:
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model,
'commentView' => '@app/views/site/comments/index' // path to your template
]); ?>
Use the following code for multiple widgets on the same page:
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model,
]); ?>
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model2,
'formId' => 'comment-form2',
'pjaxContainerId' => 'unique-pjax-container-id'
]); ?>
To enable the pagination for comments list use the following code:
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model,
'dataProviderConfig' => [
'pagination' => [
'pageSize' => 10
],
]
]); ?>
Advanced example:
<?php echo \yii2mod\comments\widgets\Comment::widget([
'model' => $model,
'relatedTo' => 'User ' . \Yii::$app->user->identity->username . ' commented on the page ' . \yii\helpers\Url::current(),
'maxLevel' => 2,
'dataProviderConfig' => [
'pagination' => [
'pageSize' => 10
],
],
'listViewConfig' => [
'emptyText' => Yii::t('app', 'No comments found.'),
],
]); ?>
You may use the following events:
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
'controllerMap' => [
'default' => [
'class' => 'yii2mod\comments\controllers\DefaultController',
'on beforeCreate' => function ($event) {
$event->getCommentModel();
// your custom code
},
'on afterCreate' => function ($event) {
$event->getCommentModel();
// your custom code
},
'on beforeDelete' => function ($event) {
$event->getCommentModel();
// your custom code
},
'on afterDelete' => function ($event) {
$event->getCommentModel();
// your custom code
},
]
]
]
]
$(document).on('beforeCreate', '#comment-form', function (e) {
if (!confirm("Everything is correct. Submit?")) {
return false;
}
return true;
});
Available events are:
- beforeCreate
- afterCreate
- beforeDelete
- afterDelete
- beforeReply
- afterReply
All text and messages introduced in this extension are translatable under category 'yii2mod.comments'. You may use translations provided within this extension, using following application configuration:
return [
'components' => [
'i18n' => [
'translations' => [
'yii2mod.comments' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@yii2mod/comments/messages',
],
// ...
],
],
// ...
],
// ...
];