Open thanhdb opened 8 years ago
:+1: +1 cho cố gắng
thế áp dụng qua Sifoni đi nào :smiling_imp:
class Article extends Base {
protected $table = 'articles';
protected $primaryKey = 'id';
public function addArticle($postData)
{
$postData['updated_at'] = Date('Y-m-d');
$slugify = new Slugify();
if ($postData['alias'] == '') {
$postData['alias'] = $slugify->slugify($postData['title']);
}
//Lấy id của bài viết vừa mới thêm vào
Article::insert($postData);
$article_id = Article::orderBy('id','desc')->select('id')->get()[0]['id'];
//Cắt chuổi tags đưa vào mảng
$arrTags = explode(",", $postData['tags']);
//Duyệt từng phần tử của Tags
foreach ($arrTags as $tag)
{
$tag = trim($tag);
//Lấy id của tag có tên là $tag, nếu ko có thì thêm mới
$result = Tags::where('name', '=', $tag)->limit(1)->select('id')->get()[0];
if (isset($result['exists']))
{
$idTag = Tags::where('name', '=', $tag)->select('id')->get()[0]['id'];
}
else
{
$tag_slug = $slugify->slugify($tag);
Tags::insert(array(
'name' => $tag,
'alias' => $tag_slug
));
$idTag = Tags::orderBy('id','desc')->select('id')->get()[0]['id'];
}
//Insert dữ liệu vào table Articles_Tags
Articles_Tags::insert(array(
'article_id' => $article_id,
'tag_id' => $idTag
));
}
return true;
}
public function updateArticle($postData)
{
$postData['updated_at'] = Date('Y-m-d');
$article_id = $postData['id'];
unset($postData['id']);
$slugify = new Slugify();
if ($postData['alias'] == '') {
$postData['alias'] = $slugify->slugify($postData['title']);
}
//Delete dữ liệu bên table Articles_Tags
Articles_Tags::where('article_id', '=', $article_id)->delete();
//Lấy id của bài viết vừa mới thêm vào
Article::where('id', '=', $article_id)->update($postData);
//Cắt chuổi tags đưa vào mảng
$arrTags = explode(",", $postData['tags']);
//Duyệt từng phần tử của Tags
foreach ($arrTags as $tag)
{
$tag = trim($tag);
//Lấy id của tag có tên là $tag, nếu ko có thì thêm mới
$result = Tags::where('name', '=', $tag)->limit(1)->select('id')->get()[0];
if (isset($result['exists']))
{
$idTag = Tags::where('name', '=', $tag)->select('id')->get()[0]['id'];
}
else
{
$tag_slug = $slugify->slugify($tag);
Tags::insert(array(
'name' => $tag,
'alias' => $tag_slug
));
$idTag = Tags::orderBy('id','desc')->select('id')->get()[0]['id'];
}
//Insert dữ liệu vào table Articles_Tags
Articles_Tags::insert(array(
'article_id' => $article_id,
'tag_id' => $idTag
));
}
return true;
}
}
:+1: :+1: :+1:
Vấn đề
Ở cuối bài viết hay có Tag hoặc các từ khóa. Làm thế nào để tạo và xử lý các tag cho nhẹ nhàng, thanh thoát và mỹ miều nhất là vấn đề được đề cập ở issue này.
Hướng xử lý
Bước 1: Tạo table trong database
Chúng ta cần phải tạo ra 3 table: Articles (bài viết) Title (varchar) Content (text) Tags (varchar)
Tags ID (int) Name (varchar)
Articles-Tags article_id (int) tag_id (int)
Bước 2: Lưu trữ và xử lý
Trong view để nhập bài viết ta tạo input:
<input type="text" name="tags">
Insert Yêu cầu người sử dụng nhập các tags cách nhau bằng dấu phẩy.Ví dụ cho trực quan đơn giản dễ hiểu:
Update
Ví dụ:
Delete Rất đơn giản, ta chỉ cần xóa hết thông tin liên quan đến bài viết trong cả 3 table.
Bước 3: Hiển thị bài viết
Trên đây là hướng dẫn tạo tag mỹ miều yêu kiều và cơ bản. Chúc các bạn tag tốt! :revolving_hearts: :dizzy::sparkles::satisfied: