Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Построение дерева категорий ООП MYSQLI

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
megavolt217
Отправлено: 16 Марта, 2015 - 11:38:53
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




Помогите пожалуйста сделать функцию дерева категорий есть код с использованием New PDO А как мне сделать это же с использованием MYSQLI

Вот пример:


CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.    /**
  3.      * PHP5 (ООП)
  4.      * Постоение дерева (меню неограниченной вложености)
  5.      * @author дизайн студия ox2.ru  
  6.      */
  7.    class TreeOX2 {
  8.  
  9.        private $_db = null;
  10.        private $_category_arr = array();
  11.  
  12.        public function __construct() {
  13.            //Подключаемся к базе данных, и записываем подключение в переменную _db
  14.            $this->_db = new PDO("mysql:dbname=ox2.ru-test-base;host=localhost", "root", "");
  15.            //В переменную $_category_arr записываем все категории (см. ниже)
  16.            $this->_category_arr = $this->_getCategory();
  17.        }
  18.  
  19.        /**
  20.          * Метод читает из таблицы category все сточки, и
  21.          * возвращает двумерный массив, в котором первый ключ - id - родителя
  22.          * категории (parent_id)
  23.          * @return Array
  24.          */
  25.        private function _getCategory() {
  26.            $query = $this->_db->prepare("SELECT * FROM `category`"); //Готовим запрос
  27.            $query->execute(); //Выполняем запрос
  28.            //Читаем все строчки и записываем в переменную $result
  29.            $result = $query->fetchAll(PDO::FETCH_OBJ);
  30.            //Перелапачиваем массим (делаем из одномерного массива - двумерный, в котором
  31.            //первый ключ - parent_id)
  32.            $return = array();
  33.            foreach ($result as $value) { //Обходим массив
  34.                $return[$value->parent_id][] = $value;
  35.            }
  36.            return $return;
  37.        }
  38.  
  39.        /**
  40.          * Вывод дерева
  41.          * @param Integer $parent_id - id-родителя
  42.          * @param Integer $level - уровень вложености
  43.          */
  44.        public function outTree($parent_id, $level) {
  45.            if (isset($this->_category_arr[$parent_id])) { //Если категория с таким parent_id существует
  46.                foreach ($this->_category_arr[$parent_id] as $value) { //Обходим ее
  47.                    /**
  48.                      * Выводим категорию
  49.                      *  $level * 25 - отступ, $level - хранит текущий уровень вложености (0,1,2..)
  50.                      */
  51.                    echo "<div style='margin-left:" . ($level * 25) . "px;'>" . $value->name . "</div>";
  52.                    $level++; //Увеличиваем уровень вложености
  53.                    //Рекурсивно вызываем этот же метод, но с новым $parent_id и $level
  54.                    $this->outTree($value->id, $level);
  55.                    $level--; //Уменьшаем уровень вложености
  56.                }
  57.            }
  58.        }
  59.  
  60.    }
  61.  
  62.    $tree = new TreeOX2();
  63.    $tree->outTree(0, 0); //Выводим дерево
  64.  
  65.    ?>

(Отредактировано автором: 16 Марта, 2015 - 11:39:40)

 
 Top
herecar
Отправлено: 17 Марта, 2015 - 10:04:11
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2015  


Помог: 0 раз(а)




Ну разберешся)

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class Tree {
  4.        
  5.         private $data;
  6.        
  7.         public function __construct() {
  8.                 $data = array(
  9.                         array(
  10.                                 'id' => 1,
  11.                                 'parent_id' => 0,
  12.                                 'name' => 'item 1'
  13.                         ),
  14.                         array(
  15.                                 'id' => 2,
  16.                                 'parent_id' => 1,
  17.                                 'name' => 'item 2'
  18.                         ),
  19.                         array(
  20.                                 'id' => 3,
  21.                                 'parent_id' => 1,
  22.                                 'name' => 'item 3'
  23.                         ),
  24.                         array(
  25.                                 'id' => 4,
  26.                                 'parent_id' => 0,
  27.                                 'name' => 'item 4'
  28.                         ),
  29.                         array(
  30.                                 'id' => 5,
  31.                                 'parent_id' => 4,
  32.                                 'name' => 'item 5'
  33.                         ),
  34.                         array(
  35.                                 'id' => 6,
  36.                                 'parent_id' => 5,
  37.                                 'name' => 'item 6'
  38.                         ),
  39.                         array(
  40.                                 'id' => 7,
  41.                                 'parent_id' => 5,
  42.                                 'name' => 'item 7'
  43.                         )
  44.                 );
  45.                 $this->data = $data;
  46.         }
  47.        
  48.         public function outTree() {
  49.                
  50.                 $data = $this->getHierarchy($this->data);
  51.                
  52.                 $this->hierarchyOut($data, 0);
  53.         }
  54.  
  55.         private function getHierarchy($data) {
  56.                 $new_arr = array();
  57.                        
  58.                 for ($i = 0, $c = count($data); $i < $c; $i++) {
  59.                         $new_arr[$data[$i]['parent_id']][] = $data[$i];
  60.                 }
  61.                
  62.                 return $new_arr;
  63.         }
  64.        
  65.         private function hierarchyOut($data, $parent = 0, $level = 0) {
  66.                 $arr = $data[$parent];
  67.                
  68.                 for($i = 0; $i < count($arr); $i++) {
  69.                
  70.                         ?><div style="margin-left: <?PHP echo ($level * 25); ?>px">
  71.                                 <?PHP echo $arr[$i]['name']; ?></div><?PHP
  72.                        
  73.                         $level++;
  74.                        
  75.                         if(isset($data[$arr[$i]['id']])) {
  76.                                 $this->hierarchyOut($data, $arr[$i]['id'], $level);
  77.                         }
  78.                        
  79.                         $level--;
  80.                 }
  81.         }
  82. }
  83.  
  84. $a = new Tree();
  85.  
  86. $a->outTree();
  87. ?>
  88.  

(Отредактировано автором: 17 Марта, 2015 - 10:05:17)

 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2015 - 10:33:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)





Дефолт-Сити уже не то(р)т...
 
 Top
megavolt217
Отправлено: 17 Марта, 2015 - 13:31:34
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




herecar, Спасибо большое разобрался подделал все хорошо работает!
(Добавление)
Вот так у меня теперь работает

CODE (htmlphp):
скопировать код в буфер обмена
  1. class Tree {
  2.  
  3.             private $data;
  4.  
  5.             public function __construct($mestopokaza) {
  6.                                    global $mysqli;
  7.                                    global $prefix;
  8.  
  9.                             $query = $mysqli->query("SELECT * FROM `".$prefix."link`  WHERE `mest` = '".$mestopokaza."'  ORDER BY `position`"); //Готовим запрос
  10.           while($row = $query->fetch_assoc())
  11.              {
  12.  
  13.                 $data[] = $row;
  14.              }
  15.  
  16.                     $this->data = $data;
  17.             }
  18.  
  19.             public function outTree() {
  20.  
  21.                     $data = $this->getHierarchy($this->data);
  22.  
  23.                     $this->hierarchyOut($data, 0);
  24.             }
  25.  
  26.             private function getHierarchy($data) {
  27.                     $new_arr = array();
  28.  
  29.                     for ($i = 0, $c = count($data); $i < $c; $i++) {
  30.                            $new_arr[$data[$i]['uid']][] = $data[$i];
  31.                    }
  32.  
  33.                    return $new_arr;
  34.            }
  35.  
  36.            private function hierarchyOut($data, $parent = 0, $level = 0) {
  37.                    $arr = $data[$parent];
  38.                         echo'<ul class="vyp-menu">';
  39.                     for($i = 0; $i < count($arr); $i++) {
  40.  
  41.  
  42.                              echo "<li><a href=''>" . $arr[$i]['name'] . "</a>";
  43.                             $level++;
  44.  
  45.                             if(isset($data[$arr[$i]['id']])) {
  46.                                     $this->hierarchyOut($data, $arr[$i]['id'], $level);
  47.                             }
  48.                                 echo'</li>';
  49.                             $level--;
  50.                     }
  51.                     echo'</ul>';
  52.             }
  53.  
  54.  
  55.     }



$lin = new Tree(2);
$lin->outTree();

Как это сделать что бы это не вызывалось в том месте где вставленно а занести в переменную и выводить из нее
$lin = new Tree(2);
$per = $lin->outTree();
это тоже отображается где она вписана, а не где я вставляю переменную $per
 
 Top
herecar
Отправлено: 17 Марта, 2015 - 15:26:53
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2015  


Помог: 0 раз(а)




Замени:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.        private function hierarchyOut($data, $parent = 0, $level = 0) {
  4.                 $arr = $data[$parent];
  5.                                
  6.                 $this->outData .= '<ul>';
  7.                                
  8.                 for($i = 0; $i < count($arr); $i++) {
  9.                
  10.                         $this->outData .= '<li><a href="">' . $arr[$i]['name'] . '</a></li>';
  11.                        
  12.                        
  13.                         if(isset($data[$arr[$i]['id']])) {
  14.                                 $this->hierarchyOut($data, $arr[$i]['id'], $level);
  15.                         }
  16.                        
  17.                 }
  18.                                
  19.                                 $this->outData .= '</ul>';
  20.         }
  21. ?>
  22.  


и

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.         public function outTree() {
  4.                
  5.                 $data = $this->getHierarchy($this->data);
  6.                
  7.                 $this->hierarchyOut($data, 0);
  8.                                
  9.                                 return $this->outData;
  10.         }
  11. ?>
  12.  


и добавь поле private $outData = "";
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB