Laravolt Mural bertujuan menyediakan fitur komentar yang siap dipakai dan mudah diintegrasikan ke dalam aplikasi berbasis Laravel.
Package ini masih dalam tahap pengembangan dan belum dianjurkan untuk digunakan dalam produksi.
- Jquery
- Semantic-ui or Bootstrap
Bisa dengan menjalankan perintah:
composer require laravolt/mural
Atau menambahkan deklarasi berikut ke file composer.json:
"require": {
...
"laravolt/mural": "^1.0"
},
Tambahkan deklarasi berikut ke file composer.json:
"require": {
...
"laravolt/mural": "^0.5"
}
Laravolt\Mural\ServiceProvider::class,
'Mural' => Laravolt\Mural\Facade::class,
php artisan vendor:publish
php artisan migrate
Ini akan menambahkan file migrasi baru 2015_08_17_101000_create_comments_table.php
sekaligus menjalan migrasi tersebut. Tabel baru bernama comments
akan ditambahkan ke basisdata.
Isi default_commentable
dengan deklarasi class model yang bisa dikomentari
'default_commentable' => \App\Post::class,
Untuk setiap model yang bisa dikomentari, tambahkan trait
dan interface
seperti berikut:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravolt\Mural\CommentableTrait;
use Laravolt\Mural\Contracts\Commentable;
class Post extends Model implements Commentable
{
use CommentableTrait;
public function getCommentableTitleAttribute()
{
// TODO: Implement getCommentableTitleAttribute() method.
}
public function getCommentablePermalinkAttribute()
{
// TODO: Implement getCommentablePermalinkAttribute() method.
}
}
Penambahan CommentableTrait otomatis akan menjadikan model Post memiliki relasi morphMany
terhadap Laravolt\Mural\Comment
. Karena ini relasi eloquent biasa, maka Anda bisa melakukan hal-hal berikut ini:
// mendapatkan semua komentar
Post::find(1)->comments;
// melakukan paginasi komentar
Post::find(1)->comments()->paginate();
// atau aksi apapun, sama seperti relasi Eloquent biasa
Post::find(1)->comments()->orderBy('created_at', 'desc');
Untuk model yang ditunjuk sebagai komentator, tambahkan interface Commentator
.
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravolt\Mural\Contracts\Commentator;
class User extends Authenticatable implements Commentator
{
...
public function getCommentatorNameAttribute()
{
// return atribut nama
}
public function getCommentatorAvatarAttribute()
{
// return atribut link avatar
}
public function getCommentatorPermalinkAttribute()
{
// return atribut link ke detail user
}
public function canModerateComment()
{
// return boolean
}
}
Untuk menampilkan widget komentar, seperti yang biasa ditemui di kebanyakan blog, tambahkan kode berikut di view Anda:
$post = App\Models\Post::find(1);
{!! Mural::render($post, 'sample-room') !!}
Selesai, laravolt/mural
sudah dilengkapi dengan Model
, Controller
, dan View
yang siap pakai, hasilnya seperti dibawah ini:
Anda juga bisa mengelompokkan komentar berdasar room
tertentu, sehingga untuk satu konten bisa memiliki banyak kelompok komentar.
{!! Mural::render($post, 'collaborator') !!}
{!! Mural::render($post, 'you-can-put-anything-here') !!}
// readonly, user tidak bisa submit komentar
{!! Mural::render($post, 'room', ['readonly' => true]) !!}
Untuk masalah tampilan, saat ini skin yang didukung adalah semantic-ui. Bootstrap segera menyusul (yang berminat bisa kirim Pull Request).
Mural::addComment($post, 'komentar lagi', 'collaborator'); // room = collaborator
Mural::getComments($post, 'room', []);
Nama event | Kapan dipanggil | Parameter |
---|---|---|
mural.render | Ketika widget mural ditampilkan di view | $content |
mural.comment.add | Ketika ada komentar baru | $comment, $content, $user, $room |
mural.comment.remove | Ketika suatu komentar dihapus | $comment, $user |
<?php
return [
// semantic-ui or bootstrap
'skin' => 'semantic-ui',
// comment per page
'per_page' => 5,
// whether user enable to vote comment or not
'vote' => false,
// default commentable class (deprecated)
'default_commentable' => \App\Models\Post::class,
// default model for user commentator
'default_commentator' => config('auth.providers.users.model')
'middleware' => ['web']
];
Karena sepertinya akibat package Orchestral/testbench, phpunit
harus dijalankan dari lokal vendor, tidak bisa dari global phpunit
vendor/phpunit/phpunit/phpunit
- Basic comment stream (done)
- Multi room (done)
- Skin: semantic-ui (done)
- Skin: bootstrap
- Validasi komentar
- Translasi (done)
- Permalink untuk komentar tertentu
- Realtime update jika ada komentar baru
- Event (done)
- Edit komentar
- Hapus komentar (done)
- Laporkan sebagai spam
- Vote (like dislike) komentar (done)
- Sort comment by latest or liked (done)
phpunit