За последние 24 часа нас посетили 62509 программистов и 1743 робота. Сейчас ищут 920 программистов ...

Каталог товаров (или чего либо) прошу заценить покритиковать

Тема в разделе "PHP для новичков", создана пользователем Denis, 22 авг 2008.

  1. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    Только недавно начал заниматься PHP (1 неделя). Вопросы:
    1) Как вообще реализация каталога (на использование класса прошу внимания не обращать он тут нафиг не нужен)
    2) Прошу помочь советом в оформлении вывода, для этого я использую функцию(см в самом низу)
    3) Ну и общая критика, как лучше было бы сделать.

    Структура таблиц.
    Таблицa catalog.
    Поля id INT AUTO_INCREMENT, parent_id INT

    Таблицa directory.
    Поля id INT, name VARCHAR(200)

    Таблицa goods(Таблицу товаров пока заполняю на уровне таблицы 'directory', то есть неполностью)
    Поля id INT, name VARCHAR(200), img VARCHAR(200), big_img VARCHAR(200), description TEXT

    PHP:
    1.  
    2. <?php
    3. class Catalog{
    4.    
    5.         public function __construct() {
    6.             }
    7.        
    8.         /* Набор функций для работы с каталогом */
    9.        
    10.         /* Добавляем новый элемент */
    11.         public function addElement($name, $parent_id = 0, $type = 'd') {
    12.             $tbl = TBL_DIRECTORY;
    13.             if ($type == 'goods') {
    14.                 $type = 'g';
    15.                 $tbl = TBL_GOODS;
    16.             } else {
    17.                 $type = 'd';
    18.             }
    19.             // Step 1.
    20.             $sql = "INSERT INTO `".TBL_CATALOG."` (`parent_id`, `type`, `ifopen`) VALUES(%d, '%s', 0)";
    21.             $sql = sprintf($sql, $parent_id, $type);
    22.             mysql_query($sql) or die(mysql_error());
    23.             $new_id = mysql_insert_id();
    24.             // Step 2.
    25.             $sql_sub = "INSERT INTO `".$tbl."` (`id`, `name`) VALUES(%d, '%s')";           
    26.             $sql_sub = sprintf($sql_sub, $new_id, mysql_escape_string($name));
    27.             mysql_query($sql_sub) or die(mysql_error());
    28.         }
    29.     // если inserter установлен в false удаляем выбранный id и дочерний
    30.         public function remElement($id, $inserted) {
    31.             $search_array = array();
    32.             $this->get_hierarchy($id, $search_array);
    33.            
    34.             // проверяем в каком режиме удалять:
    35.             // 1) дочерние объекты + $id; (false)
    36.             // 2) дочерние объекты; (true)
    37.             if ($inserted) {
    38.                 array_shift($search_array);
    39.                   }
    40.             $tmp_array = array(); //здесь будем хранить временные данные, после выборки
    41.                    
    42.             // Шаг 1. Формирование временного массива
    43.            
    44.             if (count($search_array) > 0) {    
    45.                 foreach($search_array as $value) {
    46.                     $sql = "SELECT * FROM `".TBL_CATALOG."` WHERE `id` = %d";
    47.                     $sql = sprintf($sql, $value);
    48.                     $result = mysql_query($sql) or die(mysql_error());
    49.                     $tmp_array[] = mysql_fetch_assoc($result);
    50.                 }
    51.            
    52.                 $tbl = TBL_DIRECTORY;
    53.                 foreach ($tmp_array as $value) {
    54.                     $sql = "DELETE FROM `".TBL_CATALOG."` WHERE `id` = %d";
    55.                     $sql = sprintf($sql, $value['id']);
    56.                     mysql_query($sql) or die(mysql_error());
    57.  
    58.                     if ($value['type'] == 'g') {
    59.                         $tbl = TBL_GOODS;      
    60.                               }
    61.                               $sql = "DELETE FROM `".$tbl."` WHERE `id` = %d";
    62.                               $sql = sprintf($sql, $value['id']);
    63.                               mysql_query($sql) or die(mysql_error());
    64.                         }
    65.                   }        
    66.             }
    67.        
    68.         public function renElement($id, $new_name) {
    69.             $sql = "SELECT `type` FROM `".TBL_CATALOG."` WHERE `id` = %d";
    70.             $sql = sprintf($sql, $id);
    71.             $result = mysql_query($sql) or die(mysql_error());
    72.             $row = mysql_fetch_assoc($result);
    73.            
    74.             $tbl = TBL_DIRECTORY;
    75.             if ($row['type'] == 'g') {
    76.                 $tbl = TBL_GOODS;
    77.             }
    78.            
    79.             $sql = "UPDATE `".$tbl."` SET `name` = '%s' WHERE `id` = %d";
    80.             $sql = sprintf($sql, mysql_escape_string($new_name), $id);
    81.             mysql_query($sql) or die(mysql_error());
    82.             }
    83.        
    84.         public function movElement($id, $new_parent_id) {
    85.             if ($id != $new_parent_id) {
    86.                 $search_array = $this->get_hierarchy($id);
    87.                 if (!in_array($new_parent_id, $search_array)) {
    88.                     $sql = "UPDATE `".TBL_CATALOG."` SET `parent_id` = %d WHERE `id` = %d";
    89.                     $sql = sprintf($sql, $new_parent_id, $id);
    90.                     mysql_query($sql) or die(mysql_error());
    91.                 }
    92.             }
    93.         }
    94.        
    95.         /* Набор алгоритмическиъ функций */
    96.        
    97.         /* Получаем всех родителей для текущего $id */
    98.         public function get_hierarchy_up($id = 0, &$tmp_array) {
    99.             $sql = "SELECT * FROM `".TBL_CATALOG."` WHERE `id` = %d";
    100.             $sql = sprintf($sql, $id);
    101.             $result = mysql_query($sql) or die(mysql_error());
    102.             if ($row = mysql_fetch_assoc($result)) {
    103.                         $tmp_array[] = $row['id'];
    104.                 $this->get_hierarchy_up($row['parent_id'], $tmp_array);
    105.             } else {
    106.                 $tmp_array[] = 0;
    107.             }
    108.             }
    109.        
    110.         public function get_hierarchy($id = 0, &$tmp_array) {
    111.             //static $tmp_array = array();
    112.             if (count($tmp_array) == 0) {
    113.                 $tmp_array[0] = $id;
    114.                   }
    115.             $sql = "SELECT * FROM `".TBL_CATALOG."` WHERE `parent_id` = %d";
    116.             $sql = sprintf($sql, $id, $id);
    117.             $result = mysql_query($sql) or die(mysql_error());
    118.             if (mysql_num_rows($result) > 0) {
    119.                 while ($row = mysql_fetch_array($result)) {
    120.                      $tmp_array[] = $row['id'];
    121.                      $this->get_hierarchy($row['id'], $tmp_array);
    122.                 }
    123.                   }
    124.             //return $tmp_array;
    125.         }
    126.        
    127.         // Получаем вложенный массив имитирующий структуру каталога
    128.         public function get_cat($id = 0) {
    129.             $up_array = array();
    130.             $this->get_hierarchy_up($id, $up_array);
    131.             $tmp_array = array();
    132.             foreach($up_array as $value) {
    133.                 $sql = "SELECT * FROM `".TBL_CATALOG."` WHERE `parent_id` = %d";
    134.                 $sql = sprintf($sql, $value);
    135.                 $result = mysql_query($sql) or die(mysql_error());
    136.                 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    137.                     $tbl = TBL_DIRECTORY;
    138.                     if ($row['type'] == 'g') {
    139.                         $tbl = TBL_GOODS;
    140.                     }
    141.                     $sql = "SELECT * FROM `".$tbl."` WHERE `id` = %d";
    142.                     $sql = sprintf($sql, $row['id']);
    143.                     $sub_result = mysql_query($sql) or die(mysql_error());
    144.                     $sub_row = mysql_fetch_assoc($sub_result);
    145.                     $tmp_array[$value][] = $row['id'].'/'.$row['type'].'/'.$sub_row['name'];
    146.                 }
    147.             }
    148.             $tmp_array_keys = array_keys($tmp_array);
    149.             $n = count($tmp_array_keys) - 2;
    150.             for ($i = 0; $i <= $n; $i++){
    151.                 $cur_tmp_index_p = $tmp_array[$tmp_array_keys[$i+1]];
    152.                 $cur_tmp_index   = $tmp_array_keys[$i];
    153.                 settype($cur_tmp_index_p, 'array'); // Для того чтобы убрать Warning в ниже вызванных функциях
    154.                                                     // ругается на то что $cur_tmp_index_p не массив =/
    155.                 $tmp_index = array_search($cur_tmp_index, $cur_tmp_index_p);
    156.                 $tail_array = array_splice($cur_tmp_index_p, $tmp_index+1);
    157.                 $head_array = $cur_tmp_index_p;
    158.                
    159.                 $end_array = array_merge($head_array, array($tmp_array[$cur_tmp_index]), $tail_array);
    160.                
    161.                 $tmp_array[$tmp_array_keys[$i+1]] = $end_array;
    162.             }
    163.             return $tmp_array[0];
    164.         }
    165.     }
    166. // данная функция выводит каталог товаров одновременно выводиться только одна ветка.
    167. function show_catalog($in_array) {
    168.             echo '<ul>';
    169.             foreach($in_array as $key => $value) {
    170.                       if (is_array($value)) {
    171.                             $this->show_catalog($value);
    172.                       } else {
    173.                           $id_type_name = explode("/", $value);
    174.                           $path = 'cat';
    175.                           if ($id_type_name[1] == 'g') {
    176.                               $path = 'goods';
    177.                     };  
    178.                           $link = "<li><a href=\"http://localhost/".$id_type_name[0]."\">".$id_type_name[2]."</a></li>";
    179.                             print $link.'<br/>';
    180.                       }
    181.                 }
    182.             echo '</ul>';  
    183.         }?>
     
  2. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    кстати штука для подготовки запросов, одолжил идею у Vladson'a
     
  3. Anonymous

    Anonymous Guest

    Мешанина кода... читать в лом.
     
  4. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    не понятно =/
     
  5. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    О! Олег фотку сменил. :Р
     
  6. Denis

    Denis Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    92
    Симпатии:
    0
    Адрес:
    Украина, Одесса
    нужно мнение более опытных людей =), что не так, что лучше исправить, как лучше не делать =)