Khóa học Newnet Framework

Bài 13: Quản lý nhãn - Module Tag

Một website để tăng khả năng tìm kiếm cũng như dễ dàng tiếp cận thông tin cho khách hàng, ngoài khả năng search nên có thêm nhãn. Nó giúp phân loại chủ đề dễ dàng cho nhu cầu của người dùng. Ngoài danh mục ra, người dùng có thêm sự lựa chọn để tìm kiếm là tag.

Ý tưởng xây dựng tag tương tự như module media (xem tại đây). Sử dụng Many To Many (Polymorphic) giúp ta không phải khai báo nhiều table hay model. Vì số lượng tag không nhiều nên ta không cần lo về hiệu năng. Cao lắm vài ngàn tag chứ mấy.

Để sử dụng tag trong hệ thống chúng ta cài đặt thông qua composer. Mặt định khi download NewNet Framework, module tag đã được cài đặt cùng với module CMS, cho nên ta không cần cài thêm. Nếu chưa có chúng ta chạy lệnh: 

composer require newnetcms/tag

Đừng quên chạy php artisan migrate để khởi tạo các table nha.

Để sử dụng chúng ta cũng nhìn vào module CMS. Chỉ cần khai báo trait Newnet\Tag\Traits\TaggableTrait vào trong model, mọi thứ còn lại để nó tự lo.

<?php

namespace Newnet\Cms\Models;
...
use Newnet\Tag\Traits\TaggableTrait;

class Post extends Model
{
    use TaggableTrait;

    protected $table = 'cms__posts';

    protected $fillable = [
        'name',
    ];

}

Tiếp theo bổ sung @tags vào phần tạo bài viết: 

<ul class="nav nav-tabs scrollable">
    <li class="nav-item">
        <a class="nav-link active save-tab" data-toggle="pill" href="#cmsPostInfo">
            Thông tin
        </a>
    </li>
</ul>

<div class="tab-content mt-3">
    <div class="tab-pane fade show active" id="cmsPostInfo">
        <div class="row">
            <div class="col-12">
                @input(['name' => 'name', 'label' => __('cms::post.name')])
                @tags
            </div>
        </div>
    </div>

</div>

Để lấy tag từ bài viết, đơn giản trỏ đến thuộc tính tags là xong, khi đó ta nhận được một mảng các tag. Với dòng lệnh dd($post->tags), ta nhận được