есть ли лучший и короткий путь, чтобы получить этот массив из объединяемых запросов SQL и его преобразования с Superfish выпадающее меню?


Я пытаюсь создать выпадающее меню Superfish из SQL-запроса. Рабочий пример можно увидеть здесь проверяем "эмлак Буль" в категории: http://www.bedavaemlaksitesi.com/mersinemlakrehberi210/sayfalar/HABERLER

 function menu_emlak_kategori() {
        $this->db->distinct();
        $this->db->select('
        kgsim_ilceler.isim as ilce,
        kgsim_mahalleler.isim as mahalle,
        durum,
        kategori,
        tip,
        ozellik');
        $this -> db -> join('kgsim_ilceler', 'kgsim_ilceler.id = ilan_genel.ilce', 'left');
        $this -> db -> join('kgsim_mahalleler', 'kgsim_mahalleler.id = ilan_genel.mahalle', 'left');    
        $this->db->from('ilan_genel');
        $this->db->order_by('ilce,mahalle,durum,kategori,tip,ozellik');
        $q = $this -> db -> get();
        if ($q -> num_rows() > 0) {
            foreach ($q->result_array() as $row) {
                $data[] = $row;
            }
            return $data;
        }       
        return $q;  
    }

    function menu_emlak_kategori_duzenle($dizi) {
        $array = $this->menu_emlak_kategori();
        //$array = menu_emlak_kategori();
        foreach ($array as $key => $option) {
            // ilce start
            $ilce = $option['ilce'];
            $array_new['ilce'][$key] = $ilce;
            $array_new['ilce_unique'] = array_unique($array_new['ilce']);
            // ilce finish

            // mahalle start
            $mahalle = $option['mahalle'];
            $ilce_mahalle = $array_new['ilce'][$key];
            $ilce_mahalle .= "_mahalle";
            $ilce_mahalle_unique = $ilce_mahalle."_unique";
            $array_new[$ilce_mahalle][$key] = $mahalle;
            $array_new[$ilce_mahalle_unique] = array_unique($array_new[$ilce_mahalle]);
            // mahalle finish

            // durum start
            $durum = $option['durum'];
            $ilce_mahalle_durum = $ilce."_".$mahalle."_durum";
            $ilce_mahalle_durum_unique = $ilce_mahalle_durum."_unique";
            $array_new[$ilce_mahalle_durum][$key] = $durum;
            $array_new[$ilce_mahalle_durum_unique] = array_unique($array_new[$ilce_mahalle_durum]);
            // durum finish

            // kategori start
            $kategori = $option['kategori'];
            $ilce_mahalle_durum_kategori = $ilce."_".$mahalle."_".$durum."_kategori";
            $ilce_mahalle_durum_kategori_unique = $ilce_mahalle_durum_kategori."_unique";
            $array_new[$ilce_mahalle_durum_kategori][$key] = $kategori;
            $array_new[$ilce_mahalle_durum_kategori_unique] = array_unique($array_new[$ilce_mahalle_durum_kategori]);
            // kategori finish

            // tip start
            $tip = $option['tip'];
            $ilce_mahalle_durum_kategori_tip = $ilce."_".$mahalle."_".$durum."_".$kategori."_tip";
            $ilce_mahalle_durum_kategori_tip_unique = $ilce_mahalle_durum_kategori_tip."_unique";
            $array_new[$ilce_mahalle_durum_kategori_tip][$key] = $tip;
            $array_new[$ilce_mahalle_durum_kategori_tip_unique] = array_unique($array_new[$ilce_mahalle_durum_kategori_tip]);
            // tip finish

            // özellik start
            $ozellik = $option['ozellik'];
            $ilce_mahalle_durum_kategori_tip_ozellik = $ilce."_".$mahalle."_".$durum."_".$kategori."_".$tip."_ozellik";
            $ilce_mahalle_durum_kategori_tip_ozellik_unique = $ilce_mahalle_durum_kategori_tip_ozellik."_unique";
            $array_new[$ilce_mahalle_durum_kategori_tip_ozellik][$key] = $ozellik;
            $array_new[$ilce_mahalle_durum_kategori_tip_ozellik_unique] = array_unique($array_new[$ilce_mahalle_durum_kategori_tip_ozellik]);       
            // özellik finish


            // tum ilceler start

                $tumilceler = "tumilceler";

                // durum start
                $tumilceler_durum = $tumilceler."_durum";
                $tumilceler_durum_unique = $tumilceler."_durum_unique";
                $array_new['tumilceler_durum'][$key] = $durum;
                $array_new[$tumilceler_durum_unique] = array_unique($array_new['tumilceler_durum']);
                // durum finish

                // kategori start
                $tumilceler_durum_kategori = $tumilceler."_".$durum."_kategori";
                $tumilceler_durum_kategori_unique = $tumilceler_durum_kategori."_unique";
                $array_new[$tumilceler_durum_kategori][$key] = $kategori;
                $array_new[$tumilceler_durum_kategori_unique] = array_unique($array_new[$tumilceler_durum_kategori]);
                // kategori finish

                // tip start
                $tumilceler_durum_kategori_tip = $tumilceler."_".$durum."_".$kategori."_tip";
                $tumilceler_durum_kategori_tip_unique = $tumilceler_durum_kategori_tip."_unique";
                $array_new[$tumilceler_durum_kategori_tip][$key] = $tip;
                $array_new[$tumilceler_durum_kategori_tip_unique] = array_unique($array_new[$tumilceler_durum_kategori_tip]);
                // tip finish

                // özellik start
                $tumilceler_durum_kategori_tip_ozellik = $tumilceler."_".$durum."_".$kategori."_".$tip."_ozellik";
                $tumilceler_durum_kategori_tip_ozellik_unique = $tumilceler_durum_kategori_tip_ozellik."_unique";
                $array_new[$tumilceler_durum_kategori_tip_ozellik][$key] = $ozellik;
                $array_new[$tumilceler_durum_kategori_tip_ozellik_unique] = array_unique($array_new[$tumilceler_durum_kategori_tip_ozellik]);       
                // özellik finish
            // tum ilceler finish

            // tüm mahalleler start     
                $tummahalleler = "tummahalleler";
                // durum start
                $tummahalleler_ilce_durum = $tummahalleler."_".$ilce."_durum";
                $tummahalleler_ilce_durum_unique = $tummahalleler_ilce_durum."_unique";
                $array_new[$tummahalleler_ilce_durum][$key] = $durum;
                $array_new[$tummahalleler_ilce_durum_unique] = array_unique($array_new[$tummahalleler_ilce_durum]);
                // durum finish

                // kategori start
                $tummahalleler_ilce_durum_kategori = $tummahalleler."_".$ilce."_".$durum."_kategori";
                $tummahalleler_ilce_durum_kategori_unique = $tummahalleler_ilce_durum_kategori."_unique";
                $array_new[$tummahalleler_ilce_durum_kategori][$key] = $kategori;
                $array_new[$tummahalleler_ilce_durum_kategori_unique] = array_unique($array_new[$tummahalleler_ilce_durum_kategori]);
                // kategori finish

                // tip start
                $tummahalleler_ilce_durum_kategori_tip = $tummahalleler."_".$ilce."_".$durum."_".$kategori."_tip";
                $tummahalleler_ilce_durum_kategori_tip_unique = $tummahalleler_ilce_durum_kategori_tip."_unique";
                $array_new[$tummahalleler_ilce_durum_kategori_tip][$key] = $tip;
                $array_new[$tummahalleler_ilce_durum_kategori_tip_unique] = array_unique($array_new[$tummahalleler_ilce_durum_kategori_tip]);
                // tip finish

                // özellik start
                $tummahalleler_ilce_durum_kategori_tip_ozellik = $tummahalleler."_".$ilce."_".$durum."_".$kategori."_".$tip."_ozellik";
                $tummahalleler_ilce_durum_kategori_tip_ozellik_unique = $tummahalleler_ilce_durum_kategori_tip_ozellik."_unique";
                $array_new[$tummahalleler_ilce_durum_kategori_tip_ozellik][$key] = $ozellik;
                $array_new[$tummahalleler_ilce_durum_kategori_tip_ozellik_unique] = array_unique($array_new[$tummahalleler_ilce_durum_kategori_tip_ozellik]);       
                // özellik finish
            // tüm mahalleler finish
        }

        if(is_array($array_new['ilce_unique'])) {
            // $array_superfish = "<div class=\"navbar\">";
            $array_superfish = "<ul>";
            // tüm ilçeler start
            $array_superfish .= "<li><a><span class=\"menu-title\">";
            $array_superfish .= "Tüm İlçeler";  
            $array_superfish .= "</span></a>";  
            if(is_array($array_new[$tumilceler_durum_unique])) {
            $array_superfish .= "<ul>";
                foreach ($array_new[$tumilceler_durum_unique] as $durum) {
                $array_superfish .= "<li><a><span class=\"menu-title\">";
                $array_superfish .= $dizi[11][$durum];
                $array_superfish .= "</span></a>";
                $tumilceler_durum_kategori_unique = $tumilceler."_".$durum."_kategori_unique";
                if(is_array($array_new[$tumilceler_durum_unique])) {
                $array_superfish .= "<ul>";     
                    foreach ($array_new[$tumilceler_durum_kategori_unique] as $kategori) {
                    $array_superfish .= "<li><a><span class=\"menu-title\">";
                    $array_superfish .= $dizi[21][$kategori];
                    $array_superfish .= "</span></a>";
                    $tumilceler_durum_kategori_tip_unique = $tumilceler."_".$durum."_".$kategori."_tip_unique";
                    if(is_array($array_new[$tumilceler_durum_kategori_tip_unique])) {
                    $array_superfish .= "<ul>"; 
                        foreach ($array_new[$tumilceler_durum_kategori_tip_unique] as $tip) {
                        $kategori_kod = $kategori;  
                        if($kategori==3 or $kategori==NULL)
                        $kategori_kod = 2;  
                        $tip_kod = ''.$kategori_kod.'31';
                        $array_superfish .= "<li><a><span class=\"menu-title\">";
                        $array_superfish .= $dizi[$tip_kod][$tip];
                        $array_superfish .= "</span></a>";
                        $tumilceler_durum_kategori_tip_unique = $tumilceler."_".$durum."_".$kategori."_tip_unique";
                        if(is_array($array_new[$tumilceler_durum_kategori_tip_unique])) {
                        $array_superfish .= "<ul>"; 
                        $tumilceler_durum_kategori_tip_ozellik_unique = $tumilceler."_".$durum."_".$kategori."_".$tip."_ozellik_unique";
                            foreach ($array_new[$tumilceler_durum_kategori_tip_ozellik_unique] as $ozellik) {
                            $array_superfish .= "<li><a><span class=\"menu-title\">";
                            $genel_ozellik_kod = $dizi[101][$kategori]*10+2;
                            $genel_ozellik_metin = $dizi[$genel_ozellik_kod][$ozellik]; 
                            $array_superfish .= $dizi[$genel_ozellik_kod][$ozellik];
                            $array_superfish .= "</span></a>";
                            $array_superfish .= "</li>";
                            }
                        $array_superfish .= "</ul>";
                        }
                        $array_superfish .= "</li>";
                        }
                    $array_superfish .= "</ul>";
                    }
                    $array_superfish .= "</li>";
                    }
                $array_superfish .= "</ul>";
                }       
                $array_superfish .= "</li>";
                }
            $array_superfish .= "</ul>";
            }
            $array_superfish .= "</li>";
            // tüm ilçeler finish
        foreach ($array_new['ilce_unique'] as $ilce) {
            $array_superfish .= "<li><a><span class=\"menu-title\">";
            $array_superfish .= $ilce;  
            $array_superfish .= "</span></a>";
            $ilce_mahalle_unique = $ilce."_mahalle_unique";
                if(is_array($array_new[$ilce_mahalle_unique])) {
                $array_superfish .= "<ul>";
                    // tüm mahalleler start
            $array_superfish .= "<li><a><span class=\"menu-title\">";
            $array_superfish .= "Tüm Mahalleler";   
            $array_superfish .= "</span></a>";  
            $tummahalleler_ilce_durum_unique = $tummahalleler."_".$ilce."_durum_unique";
            if(is_array($array_new[$tummahalleler_ilce_durum_unique])) {
            $array_superfish .= "<ul>";
                foreach ($array_new[$tummahalleler_ilce_durum_unique] as $durum) {
                $array_superfish .= "<li><a><span class=\"menu-title\">";
                $array_superfish .= $dizi[11][$durum];
                $array_superfish .= "</span></a>";
                $tummahalleler_ilce_durum_kategori_unique = $tummahalleler."_".$ilce."_".$durum."_kategori_unique";
                if(is_array($array_new[$tummahalleler_ilce_durum_kategori_unique])) {
                $array_superfish .= "<ul>";     
                    foreach ($array_new[$tummahalleler_ilce_durum_kategori_unique] as $kategori) {
                    $array_superfish .= "<li><a><span class=\"menu-title\">";
                    $array_superfish .= $dizi[21][$kategori];
                    $array_superfish .= "</span></a>";
                    $tummahalleler_ilce_durum_kategori_tip_unique = $tummahalleler."_".$ilce."_".$durum."_".$kategori."_tip_unique";
                    if(is_array($array_new[$tummahalleler_ilce_durum_kategori_tip_unique])) {
                    $array_superfish .= "<ul>"; 
                        foreach ($array_new[$tummahalleler_ilce_durum_kategori_tip_unique] as $tip) {
                        $kategori_kod = $kategori;  
                        if($kategori==3 or $kategori==NULL)
                        $kategori_kod = 2;  
                        $tip_kod = ''.$kategori_kod.'31';
                        $array_superfish .= "<li><a><span class=\"menu-title\">";
                        $array_superfish .= $dizi[$tip_kod][$tip];
                        $array_superfish .= "</span></a>";
                        $tummahalleler_ilce_durum_kategori_tip_unique = $tummahalleler."_".$ilce."_".$durum."_".$kategori."_tip_unique";
                        if(is_array($array_new[$tummahalleler_ilce_durum_kategori_tip_unique])) {
                        $array_superfish .= "<ul>"; 
                        $tummahalleler_ilce_durum_kategori_tip_ozellik_unique = $tummahalleler."_".$ilce."_".$durum."_".$kategori."_".$tip."_ozellik_unique";
                            foreach ($array_new[$tummahalleler_ilce_durum_kategori_tip_ozellik_unique] as $ozellik) {
                            $array_superfish .= "<li><a><span class=\"menu-title\">";
                            $genel_ozellik_kod = $dizi[101][$kategori]*10+2;
                            $genel_ozellik_metin = $dizi[$genel_ozellik_kod][$ozellik]; 
                            $array_superfish .= $dizi[$genel_ozellik_kod][$ozellik];
                            $array_superfish .= "</span></a>";
                            $array_superfish .= "</li>";
                            }
                        $array_superfish .= "</ul>";
                        }
                        $array_superfish .= "</li>";
                        }
                    $array_superfish .= "</ul>";
                    }
                    $array_superfish .= "</li>";
                    }
                $array_superfish .= "</ul>";
                }       
                $array_superfish .= "</li>";
                }
            $array_superfish .= "</ul>";
            }
            $array_superfish .= "</li>";
                // tüm mahalleler finish
                    foreach ($array_new[$ilce_mahalle_unique] as $mahalle) {
                    if($mahalle!=null)  {
                    $array_superfish .= "<li><a><span class=\"menu-title\">";
                    $array_superfish .= $mahalle;
                    $array_superfish .= "</span></a>";
                    $ilce_mahalle_durum_unique = $ilce."_".$mahalle."_durum_unique";
                        if(is_array($array_new[$ilce_mahalle_durum_unique])) {
                        $array_superfish .= "<ul>";
                            foreach ($array_new[$ilce_mahalle_durum_unique] as $durum) {    
                            $array_superfish .= "<li><a><span class=\"menu-title\">";
                            $array_superfish .= $dizi[11][$durum];
                            $array_superfish .= "</span></a>";
                            $ilce_mahalle_durum_kategori_unique = $ilce."_".$mahalle."_".$durum."_kategori_unique";
                                if(is_array($array_new[$ilce_mahalle_durum_kategori_unique])) {
                                $array_superfish .= "<ul>";
                                    foreach ($array_new[$ilce_mahalle_durum_kategori_unique] as $kategori) {
                                    $array_superfish .= "<li><a><span class=\"menu-title\">";
                                    $array_superfish .= $dizi[21][$kategori];
                                    $array_superfish .= "</span></a>";
                                    $ilce_mahalle_durum_kategori_tip_unique = $ilce."_".$mahalle."_".$durum."_".$kategori."_tip_unique";
                                        if(is_array($array_new[$ilce_mahalle_durum_kategori_tip_unique])) {
                                        $array_superfish .= "<ul>";
                                            foreach ($array_new[$ilce_mahalle_durum_kategori_tip_unique] as $tip) {
                                            $kategori_kod = $kategori;  
                                            if($kategori==3 or $kategori==NULL)
                                            $kategori_kod = 2;  
                                            $tip_kod = ''.$kategori_kod.'31';
                                            $array_superfish .= "<li><a><span class=\"menu-title\">";
                                            $array_superfish .= $dizi[$tip_kod][$tip];
                                            $array_superfish .= "</span></a>";
                                            $ilce_mahalle_durum_kategori_tip_ozellik_unique = $ilce."_".$mahalle."_".$durum."_".$kategori."_".$tip."_ozellik_unique";
                                                if(is_array($array_new[$ilce_mahalle_durum_kategori_tip_ozellik_unique])) {
                                                $array_superfish .= "<ul>";
                                                    foreach ($array_new[$ilce_mahalle_durum_kategori_tip_ozellik_unique] as $ozellik) {
                                                        $array_superfish .= "<li><a><span class=\"menu-title\">";
                                                        $genel_ozellik_kod = $dizi[101][$kategori]*10+2;
                                                        $genel_ozellik_metin = $dizi[$genel_ozellik_kod][$ozellik]; 
                                                        $array_superfish .= $dizi[$genel_ozellik_kod][$ozellik];
                                                        $array_superfish .= "</span></a>";
                                                        $array_superfish .= "</li>";
                                                    }
                                                $array_superfish .= "</ul>";
                                                }

                                            $array_superfish .= "</li>";    
                                            }
                                        $array_superfish .= "</ul>";
                                        }
                                    $array_superfish .= "</li>";
                                    }
                                $array_superfish .= "</ul>";
                                }
                            $array_superfish .= "</li>";
                            }
                        $array_superfish .= "</ul>";
                        }
                    $array_superfish .= "</li>";
                    }
                    }
                $array_superfish .= "</ul>";
                }
            $array_superfish .= "</li>";
        }
            $array_superfish .= "</ul>";
        }   
         // $array_superfish .= "</div>";
            return $array_superfish;
    }

Примечание: используя Codeigniter с 2.10 функций из файла модели.



155
1
задан 4 декабря 2011 в 04:12 Источник Поделиться
Комментарии
1 ответ

Да, он определенно может быть улучшена. Вот некоторые вещи думать о:

Данные

Данные должны соответствовать вашей проблеме. Убедитесь, что он в формате, который представляет своего меню. Меню могут быть обработаны с помощью рекурсивных функций. Это простой способ, чтобы посетить каждый элемент и создать соответствующий контент, который вы хотите отобразить.

Раскроя

Излишняя вложенность - это плохо, это делает его очень трудно понять, где проблема. Рассмотрим написание функций для выполнения простых операций. Каждый цикл, или если заявление уже другой уровень сложности. Если вы получаете последние 3 уровней в глубину, вы должны серьезно рассмотреть возможность изменения кода. У вас есть много больше, чем это. Это может быть исправлено путем сосредоточения внимания на ваши данные и пишу об этом в рекурсивный способ.

Накл.

Если вы собираетесь дописывать в строку вы можете сделать это в один шаг, а не 3 линии.

$array_superfish .= "<li><a><span class=\"menu-title\">" . $dizi[11][$durum] .
"</span></a>";

Примечание: $array_superfish-это плохое название, так как я бы ожидал, что это будет массив, а не строку.

1
ответ дан 5 декабря 2011 в 10:12 Источник Поделиться