PHP
39
Вклад в тег
# переопределяем страницы ошибок
ErrorDocument 400 /error.php?err=400
ErrorDocument 401 /error.php?err=401
ErrorDocument 402 /error.php?err=402
ErrorDocument 403 /error.php?err=403
ErrorDocument 404 /error.php?err=404
ErrorDocument 500 /error.php?err=500
ErrorDocument 502 /error.php?err=502
ErrorDocument 404 /
class Tree {
public $categories = [];
public $categoriesTree = [];
private $db = null;
public function __construct() {
$this->db = new PDO("mysql:dbname=zadanie;host=localhost;charset=UTF8", "root", "");
$this->categories = $this->getCategories();
$this->categoriesTree = $this->getFullTree();
}
/*
* Список всех категорий
*/
private function getCategories(){
$arr_cat = [];
$result = $this->db->query("SELECT * FROM `categories`")->fetchAll();
foreach($result AS $category){
$arr_cat[$category['id']] = $category;
}
return $arr_cat ;
}
/*
* Список категорий в форме дерева
*/
private function getFullTree() {
$tree = [] ;
$categories = $this->categories;
foreach($categories as $id => &$node) {
if(!$node['id_parent']){
$tree[$id] = &$node ;
}else{
$categories[$node['id_parent']]['children'][$id] = &$node ;
}
}
return $tree ;
}
/*
* хлебные крошки
* $id - ID категории в которой мы находимся
*/
public function breadcrumbs($id){
$breadcrumbs_array = [];
$array = $this->categories;
for($i = 0; $i < count($array); $i++){
if($id){
$breadcrumbs_array[$array[$id]['id']] = $array[$id]['title'] ;
$id = $array[$id]['id_parent'] ;
}
}
return array_reverse($breadcrumbs_array, true) ;
}
/*
* @bonus
* Получаем ID всех дочерных категорий родителя
*/
public function getChildren($id_parent){
static $children = [];
$result = $this->db->query("SELECT `id` FROM `categories` WHERE `id_parent` = '$id_parent'")->fetchAll();
foreach($result AS $post){
$children[] = $post['id'];
$this->getChildren($post['id']);
}
return $children;
}
}
$category = new Tree();
$categories = $category->categoriesTree; // список всех категорий
$tree = $category->categoriesTree; // список категорий в форме дерева
$id_categoty = 7; // ID категории в которой мы сейчас находимся
$breadcrumbs = $category->breadcrumbs($id_categoty);
foreach($breadcrumbs AS $id => $title){
if($id == $id_categoty)
continue; // текущую категорию пропускаем
echo ' - <a href="?id=' . $id . '">' . $title . '</a>';
}
$id_parent = 2; // ID категории родителя
$children = $category->getChildren($id_parent);
//print_r($children);