Sınırsız Kategori/Menu Bulabildiğim en iyi çözüm !

Merhaba arkadaşlar,
İki gün önce açtığım başlıkta yaptığım şeyler biraz saçma gelmişti ama daha iyi bi çözüm bulamamıştım. Biraz araştırdım ve sanırım daha az kod daha iyi bir şey yapmayı başardım ve sizinle paylaşmak istiyorum.

Öncelikle model dosyamızdaki fonksiyon aşağıdaki gibi.

public function Menu(){
return $this->db->query("SELECT * from menu where bolum = 'menu' Order by siraNO ASC")->results("array");
}

Veriyi array olarak çıktı alıyoruz ki işlemlerimizi daha rahat ve tek fonksiyonda halledebilelim.

Fonksiyonumuz.

function menu($array,$parent_id = 0,$parents = array()){
if($parent_id==0){
foreach ($array as $element) {
if (($element['katid'] != 0) && !in_array($element['katid'],$parents)) {
$parents[] = $element['katid'];
}
}
}
$menu_html = '';
foreach($array as $element){
if($element['katid']==$parent_id)
{
if(in_array($element['ID'],$parents))
{
$menu_html .= '<li class="dropdown">';
$menu_html .= '<a href="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">'.$element['baslik'].' <span class="caret"></span></a>';
}
else {
$menu_html .= '<li>';
$menu_html .= '<a href="">' . $element['baslik'] . '</a>';
}
if(in_array($element['ID'],$parents))
{
$menu_html .= '<ul class="dropdown-menu" role="menu">';
$menu_html .= menu($array, $element['ID'], $parents);
$menu_html .= '</ul>';
}
$menu_html .= '</li>';
}
}
return $menu_html;
}


Açıklama yapmaya pek gerek duymadım zaten çokta bir şey yok. Helpers klasörü altında kendi fonksiyonlarınızı tutacağınız bir php dosyası oluşturup. Oraya dahil edebilirsiniz. Daha sonrada dökümantasyondaki yolları izleyerek oluşturduğunuz fonksiyon dosyasını projenize dahil edebilirsiniz.BKZ : [url=http://kilavuz.titanphp.com/url_helper.html#include]

Ardından controllerde oluşturacağınız metot ile model dosyasındaki metodu çağırmanız gerekiyor.
örneğin

class Home extends Controller
{
public function index(){
$this->load->model('Anasayfa');
$data["menu"] = $this->Anasayfa->Menu();
$this->load->view('Anasayfa',$data);
}
}


Son olarak view dosyamızda ul taglarının arasına yazmamız gereken tek şey :

echo menu($menu);


Daha iyisini bilen arkadaşlarda bizimle paylaşırsa sevinirim.
Okuduğunuz için teşekkür ederim.

Cevaplar (5)


2 yıl önce

Gayet iyi :)
Zeyd Duran
Web Master Olma yolunda Bir kardeşiniz :)
2 yıl önce

Teşekkürler.
Daha iyisini de yapacağım inş. çeşitli örnekler yapıyorum ki ihtiyacı olanlar rahat bulabilsin :)
Zeyd Duran
Web Master Olma yolunda Bir kardeşiniz :)
2 yıl önce


function has_children($rows,$id){
foreach ($rows as $row) {
if ($row['katid'] == $id) {
return true;
}
}
return false;
}
function menu($rows, $parent = 0) {
$result = '';
foreach ($rows as $row) {
if ($row['katid'] == $parent) {
if (has_children($rows, $row['ID'])) {
$result .= '<li class="dropdown"><a href="">'.$row["baslik"].'<span class="caret"></span></a><ul class="dropdown-menu">';
$result .= menu($rows, $row['ID']);
$result .= "</ul></li>";
}else{
$result .= '<li class=""><a href="">'.$row["baslik"].'</a></li>';

}
}
}
return $result;
}
Turan Karatuğ
Software Developer - Creator of TitanMVC
2 yıl önce

Fonksiyonunuz bir dropdown menü için uygun görünüyor. Liste elemanlarında bulunan dropdown classının yalnızca bootstrap üzerinde doğru çalışacağını da belirtelim.
Zeyd Duran
Web Master Olma yolunda Bir kardeşiniz :)
2 yıl önce

Evet ben bootstrap framework kullandığım için ona göre ayarladım. Yapmaya çalıştığım asıl şey daha az kod ile daha çok iş daha hızlı birşey yapmak. Sanırım 2. Yazdığım fonksiyonlarla bunu başaran bildik. Kullanmak isteyen arkadaşlar 2. Yazdığım fonksiyonları kullanırsa daha iyi olur. Geri kalan herşey aynı zaten.

Cevap Yazın


[code=php,css,sql]kod[/code] , [url=http:...com] , [img=imaj linki] , [color=renk_kodu]metin[/color]