Bu soru çözüldü.
Sınırsız Kategori/Menu Bulabildiğim en iyi çözüm !
php
sınırsız kategori
sınırsın menü
multi level category
MVC multi level category
MVC sınırsız kategori
php mvc frame work
MVC sınırsız menü
MVC multi level menu
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 (7)

Zeyd Duran
Web Master Olma yolunda Bir kardeşiniz :)7 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 :)7 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 TitanMVC7 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 :)7 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.

Ekimnet
Php Developer3 yıl önce
şurada anlatmıştım belki işinize yarar https://www.ekimnet.com/php-ile-sinirsiz-kategori-nasil-yapilir

Cebrail
Web Developer1 yıl önce
Gayet başarılı dropdown menü için birkaç düzenleme ile işlevsel oldu. Eline sağlık kardeşim, ALLAH dert tasa vermesin. Düzenlenmiş halini de ekleyeyim başkasına da lazım olabilir.
<ul class="navbar-nav ml-auto">
<li class="nav-item active"><a class="nav-link" href="index.html">HOME</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About Us</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdown-a" data-toggle="dropdown">Course </a>
<div class="dropdown-menu" aria-labelledby="dropdown-a">
<a class="dropdown-item" href="course-grid-2.html">Course Grid 2 </a>
<a class="dropdown-item" href="course-grid-3.html">Course Grid 3 </a>
<a class="dropdown-item" href="course-grid-4.html">Course Grid 4 </a>
</div>
</li>
</ul>
function menu($rows, $parent = 0) {
$result = '';
foreach ($rows as $row) {
if ($row['ustid'] == $parent) {
if (has_children($rows, $row['id'])) {
$result .= '
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdown-a" data-toggle="dropdown">'.$row["kategori"].'</a>
<div class="dropdown-menu" aria-labelledby="dropdown-a">';
$result .= menu($rows, $row['id']);
$result .= "
</div>
</li>";
}else if ($row['ustid']>0) {
$result .= '
<a class="dropdown-item" href="'.$row['link'].'">'.$row['kategori'].'</a>';
} else {
if ($row['id']==1) $active = ' active';
$result .= ' <li class="nav-item'.$active.'"><a class="nav-link" href="'.$row['link'].'">'.$row['kategori'].'</a></li>';
}
}
}
return $result;
}
Cevap Yazın

Zeyd Duran
7 yıl önce sordu.Çok Okunanlar
- 9014 [v2.x] Mail gönderme - SMTP connect() failed
- 5875 [v1.x] Sınırsız Kategori/Menu Bulabildiğim en iyi çözüm !
- 2314 [v1.x] Üye giriş ve kayıt olması ?
- 2310 [v1.x] TitanPhp örnek uygulamalar
- 2200 [v1.x] Sınırsız Kategori/Menu ÖNEMLİ
- 2158 [v1.x] index.php?url şeklinde kullanmadan controllere erişemiyorum.
- 1937 [v2.x] vendor/autoload hatası (kurulum)
- 1904 [v1.x] Veritabanı Kayıt Ekleme
- 1702 [v1.x] $this->load->plugin('template');
- 1600 [v1.x] fonksiyonların içinde veritabanı işlemi