hbsprogram.com

thủ thuật wordpress ,vps và mình thích thì mình viết thôi

Lấy danh mục con trong danh mục cha có ý nghĩa rất lớn trong quá trình tạo menu hay xác định bài viết liên quan .Ví dụ như bạn có danh mục bài viết về châu á,châu âu,châu mỹ và 3 danh mục đó nằm trong danh mục cha là tin tức .Vấn đề là làm sao ta chỉ cần xác định 1 bài viết về châu á nhưng khi search tất cả bài viết về mảng tin tức thì bài viết về châu á vẫn có trong đó .Lý do cần lấy danh mục con trong danh mục cha là vậy .

Hôm nay mình sẽ viết về vấn đề lấy danh mục con trong danh mục cha với những nội dung sau

  • Tạo cơ sở dữ liệu cho demo
  • Code lấy danh mục con trong models và cách bóc tách trong controller

Tạo cơ sở dữ liệu cho demo lấy danh mục con

Dưới đây là bản sql mà mình đã tạo bạn có thể xem và tham khảo :

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Dec 25, 2016 at 12:28 PM
-- Server version: 10.1.16-MariaDB
-- PHP Version: 5.6.24

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Database: `demoyii2`
--

-- --------------------------------------------------------

--
-- Table structure for table `article_catelogy`
--

CREATE TABLE `article_catelogy` (
  `article_catelogy_id` int(11) NOT NULL,
  `article_catelogy_title` varchar(500) NOT NULL,
  `article_catelogy_descrip` varchar(500) NOT NULL,
  `article_catelogy_keywords` varchar(500) NOT NULL,
  `article_catelogy_views` int(11) DEFAULT NULL,
  `article_catelogy_parent_id` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `article_catelogy`
--

INSERT INTO `article_catelogy` (`article_catelogy_id`, `article_catelogy_title`, 
`article_catelogy_descrip`, `article_catelogy_keywords`, `article_catelogy_views`, 
`article_catelogy_parent_id`) VALUES
(1, 'Funny', 'các video funny', 'funny,happy', 0, 2),
(2, '12321', '123123', '122131', 1, 0),
(3, 'Danh mục 3', 'danh mục 3', 'danhmuc3,dsadwq3', NULL, 1);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `article_catelogy`
--
ALTER TABLE `article_catelogy`
  ADD PRIMARY KEY (`article_catelogy_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `article_catelogy`
--
ALTER TABLE `article_catelogy`
  MODIFY `article_catelogy_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

Bạn dán vào trong phpmyadmin và import vào nhé

Code lấy danh mục con trong models và cách bóc tách trong controller

Bạn cần code lấy danh sách con trong danh mục cha bằng phương pháp đệ quy .Code mình viết như sau trong mục models .Tuy chưa tối ưu nhưng các bạn có thể tham khảo để đưa ra cách tối ưu hơn

/**
 * get all childer catelogy in catelogy children
 *  @return  arraystring
 *  @copyright https://www.facebook.com/hienk8ccntt
 */
public function get_children_catelogy($id_catelogy)
{
    $array =''.$id_catelogy;
    $children = ArticleCatelogy::find()->where(['article_catelogy_parent_id'=> $id_catelogy])->all();
   foreach ($children as $key=>$values)
   {
			$children_id =$values->article_catelogy_id;
			$array .=','.$children_id;
			$array .= ArticleCatelogy::get_children_catelogy($children_id);
  }
		return $array;
		
	}

Tiếp theo trong phần controller bạn sẽ explode để lấy ra id danh mục .Từ đây bạn có thể truy vấn theo id danh mục để lấy được bài viết

$model_catelogy = new ArticleCatelogy();
    	$catelogy_chilren = $model_catelogy->get_children_catelogy(1);
    	if($catelogy_chilren)
    	{
    		$array_catelogy = explode(",",$catelogy_chilren);
    	}
    	
    	foreach ($array_catelogy as $key=>$value)
    	{
    		echo $value[0];
    	}

Giá trị echo $value[0] chính là danh sách id của các danh mục .Từ đây bạn có thể truy vấn dữ liệu dựa trên id_catelogy của bài viết