PhuongNamCorpsIntern / workspace

Phuong Nam Corps Internship Workspace
3 stars 8 forks source link

Xử lý Tag triệt để khi tạo tag cho bài viết #15

Open thanhdb opened 8 years ago

thanhdb commented 8 years ago

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:

//Insert bài viết
mysql_query(“INSERT INTO articles (title, content, tags) values ($_POST[title], $_POST[content], $_POST[tags])”);

//Lấy id của bài viết vừa mới thêm vào
$idArticle = mysql_insert_id();

//Cắt chuổi tags đưa vào mảng
$arrTags = explode(“,”, $_POST['tags']);

//Duyệt từng phần tử của Tags

foreach ($arrTags as $tag)
{
    //Hàm trim để cắt bỏ khoảng trắng
    $tag = trim($tag);

   //Lấy id của tag có tên là $tag, nếu ko có thì thêm mới
   $result = mysql_query(“select id from tags where name= ‘$tag’ limit 0,1 ”);
   if (mysql_num_rows($result) > 0)
   {
        $idTag = mysql_result($result, 0, 0);
   }
   else
   {
         mysql_query(“insert into tags(name) values ($tag)”);
        $idTag = mysql_insert_id();
   }

  //Insert dữ liệu vào table Articles_Tags
  mysql_query(“insert into articles_tags value ($idArticle, $idTag)”);

}

Update

Ví dụ:

//Giả sử id của bài viết đang sửa là: $idCurrent;

//Delete dữ liệu bên table Articles_Tags
mysql_query(“DELETE FROM articles_tags where article_id = $idCurrent”);

//Update bài viết
mysql_query(“UPDATE articles SET title =…, content = … WHERE ID = $idCurrent”);

//Cắt chuổi tags đưa vào mảng
$arrTags = explode(“,”, $_POST['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 không có thì thêm mới
   $result = mysql_query(“select id from tags where name= ‘$tag’ limit 0,1 ”);
   if (mysql_num_rows($result) > 0)
   {
        $idTag = mysql_result($result, 0, 0);
   }
   else
   {
         mysql_query(“insert into tags(name) values ($tag)”);
        $idTag = mysql_insert_id();
   }

  //Insert dữ liệu vào table Articles_Tags
  mysql_query(“insert into articles_tags value ($idCurrent, $idTag)”);

}

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:

khanhicetea commented 8 years ago

:+1: +1 cho cố gắng

thế áp dụng qua Sifoni đi nào :smiling_imp:

ozuit commented 8 years ago

Phiên bản Sifoni

screenshot from 2015-12-22 15 20 12

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;
    }
}
khanhicetea commented 8 years ago

:+1: :+1: :+1: