PHP ve mysql'de güzel yatay menü. PHP ve MySQL'de çok düzeyli menü

PHP ve mysql'de güzel yatay menü.  PHP ve MySQL'de çok düzeyli menü
PHP ve mysql'de güzel yatay menü. PHP ve MySQL'de çok düzeyli menü

Bir web sitesi menüsü nasıl oluşturulur sorusunun yanıtıyla ilgileniyorsanız, doğru yere geldiniz demektir.

Hala tankta olanlar için olduğu kadar programlamadaki aptallar için özel olarak yazılmış, php'de dinamik bir menü oluşturmaya bakacağız.

Ders 3

Sitemizin gelecekteki düzenini oluşturalım. Bunu yapmak için Photoshop'ta süper güzel bir web sitesi çizin ve onu parçalara ayırın. Başlık, logo, menü ve altbilginin aşağıdaki gibi kelimelerle yazılmadığını hayal edin. bu örnek ve bunlar sitenin zarif ve renkli bir şekilde tasarlanmış öğeleridir.

Örneğin üç sayfa oluşturalım ve Bölüm 1, Bölüm 2, Bölüm 3 olarak adlandıralım.

Bu yazı farklı sayfalar için farklı olacaktır ama biz onunla uğraşmayacağız ve tüm sayfalarda olduğu gibi bırakmayacağız.

Php'de bir web sitesi oluşturmaya başlayalım.

1. Başlık, logo, menü, alt bilgi bloklarını php veya html uzantılı ayrı dosyalara ayırın

başlık.html

logo.html

menü.html

altbilgi.html

Tüm sayfalarda görmek için bu metni içeren bir dosya ekleyelim. hadi onu arayalım metin.html

Not. Bundan sonra, başka kayıtları doğrudan dosyada tutacağım. metin.html

2. Sitemiz için php ile bir şablon oluşturalım.

Bunu yapmak için basitçe yapalım - gerçek dosyayı kaydedin, ancak php uzantısıyla ve tüm metin içeriğini silin. Profesyonel olmasın ama anlaşılabilir ve daha sonra her şeyi karmaşıklaştıracağız. Şimdi asıl mesele, düzen ilkesini anlamaktır.

3. Artık template.html dosyasına ihtiyacımız yok.

Onun sayesinde sitemizin nasıl görüneceğine dair bir fikrimiz var.

4. Şablonumuz template.php dosyasıdır.

Şimdi include komutunu kullanarak sitenin tüm öğelerini siteye ekleyeceğiz.

5. Başlangıçta amaçladığımız gibi üç sayfa oluşturalım.

Bölüm 1, Hadi arayalım 1.php

Bölüm 2, Hadi arayalım 2.php

Bölüm 3, Hadi arayalım 3.php

Bunu yapmak için en basit komutu kullanabilirsiniz. farklı kaydet...

En küçüğü için açıklayacağım: dosyayı aç şablon.php, ardından basın farklı kaydet... ve adı altında kaydedin 1.php, prosedürü tekrarlayın ve sitenin sayfalarını sırayla kaydedin 2.php, 3.php

Aynı tasarıma sahip 3 sayfamız var. Dosya yerine eklemeniz yeterlidir. metin.html başka, tamamlayıcı farklı resimler veya herhangi biri html kodları, komut dosyaları ve her sayfanın içeriği benzersiz olacaktır.

Dikkat!

Dosya oluşturulmadıysa index.php ana sayfa için, ardından tarayıcıda site adresini yazarak sitenin kendisini değil, yalnızca dizin yapısını (klasör listesi) göreceğiz.

Denver'a bakıp kendiniz görebilirsiniz. Durumu düzeltelim - bir dosya oluşturun index.php ve daha fazla uzatmadan uzun süre arayın Ev. Bir dosya oluşturalım metin-ev.html ve komut ile katmak yeni oluşturulan üzerine yapıştırın ana sayfa alan.

6. Bir siteyi php ile nasıl görebilirim?

Ne oldu - bu yüzden sadece görmeyin. Bu artık html uzantılı bir şablon değil.

Ama sorun da değil. Kendimize ihtiyacımız var, yani. Yerel sunucu bilgisayarda. Bunun için Denver'ı kuracağız ve internete girmeden tarayıcıda yaptığımız işin sonucuna bakacağız.

Şimdi sıra burada. Site adresini yazdım ve yeni oluşturulmuş her şeyi normal bir biçimde bir tasarımla gördüm.

Şimdi php site menüsüne geçelim.

1. menu.html dosyasını açın ve 1, 2 ve 3. bölümleri site bağlantılarına çevirin. Php'de bağlantılar farklı şekillerde oluşturulur.

Bizim görevimiz php ile oluşturulan siteyi nasıl hissedeceğimizi öğrenmek. Bu nedenle, normal bir statik site Bölüm 1'de olduğu gibi bağlantılar yapacağız, vb.

Macromedia Dreamweaver'daki bu bağlantı oluşturma prosedürünü gerçekten seviyorum. biçmek için zamanın var TAMAM ve kahve iç.

2. Ziyaretçi bu sayfadaysa, menüdeki bağlantı nasıl devre dışı bırakılır.

Ziyaretçinin hangi sayfada olduğunu bilerek sitede gezinmesi daha uygun olacaktır.

Tüm adımları titizlikle nokta nokta tamamladıysanız, menüdeki tüm bağlantıların bizimle sürekli aktif olduğunu görebilirsiniz. Nasıl düzeltilir?

Neyin tanımı ile başlayalım koşullu ifadeler

- bu, koşullara bağlı olarak bazı eylemlerin gerçekleştirildiği veya gerçekleştirilmediği zamandır.

Aşağıdakileri yapalım:

  • İhtiyacımız olacak değişkenler ve bir koşullu operatör:

if ($master == "Master")// bu durum. Çalıştırılırsa, menünün bu yerine yankı komutu kullanılarak "Ana Sayfa" yazısını görüntüleyen normal HTML etiketleri eklenir.

Eko "

Ev

";

başka// "aksi halde" anlamına gelir - koşul sağlanmazsa ne olur? Bu durumda koşul karşılanmazsa "Ana" yazısı ana sayfaya yönlendiren bir bağlantı olacaktır.

Eko "

Ev

";

  • Bir şart koyduk ama kontrol değişkenibunu sormalısın

Bunu yapmak için aşağıdaki kod bloklarını tüm sayfalara yerleştirin:

$master = "Ana";

$master="Bölüm 1";

$master="Bölüm 2";

$master="Bölüm 3";

Gördüğünüz gibi her sayfanın kendi kodu var.

Yani bir php menüsü oluşturmak için pratik adımlarımız şu şekilde olacak:

1) dosyayı açma index.php

ve kodu yapıştırın

$master = "Ana";

site menüsünün kendisini görüntüleyen kodun ekleme noktasına "menü.html"yi dahil edin;
?>

2) dosyayı açma menü.html ve ana sayfaya basit bir html bağlantısı yerine koşulu içeren kodu ekleyin.

Tarayıcıya bakıyoruz ve hayran kalıyoruz! Ana sayfaya gidersek link artık aktif değil!

3) 1. ve 2. adımları sayfalarla tekrarlayın 1.php, 2.php, 3.php

Tekrar 1:

1) 1.php dosyasını açın ve menüyü görüntüleyen kodun önüne belirli bir değişkenle bir blok yapıştırın

$master="Bölüm 1";

2) menu.html dosyasını açın ve basit bir bağlantı yerine koşulu içeren kodu yapıştırın Bölüm 1 aşağıdaki değişiklikleri yaparak:

if ($master == "Bölüm 1")// bu durum. Yürütülürse, menünün bu yerine, yankı komutu kullanılarak, "Bölüm 1" yazısını görüntüleyen normal HTML etiketleri eklenir.

Eko "

Bölüm 1

";

başka// "aksi halde" anlamına gelir - koşul sağlanmazsa ne olur? Bu durumda koşul sağlanmazsa "Bölüm 1" yazısı ana sayfaya yönlendiren bir bağlantı olacaktır.

Eko "

Bölüm 1

";

Mucize yine gerçekleşti! Şimdi sayfadaysak Bölüm 1, menüdeki bağlantı aktif değil.

Tekrar, öğrenmenin anasıdır! Ya da tanktakiler için! Tekrar

tekrar 2

1) Açık dosya 2.php ve kodu yapıştırın.

$master="Bölüm 2";

2) menu.html dosyasını tekrar açın ve koşulu içeren kodu yapıştırın

if ($master == "Bölüm 2")// bu durum. Yürütülürse, menünün bu yerine, yankı komutu kullanılarak, "Bölüm 2" yazısını görüntüleyen normal HTML etiketleri eklenir.

Eko "

Bölüm 2

";

başka// "aksi halde" anlamına gelir - koşul sağlanmazsa ne olur? Bu durumda koşul sağlanmazsa "Bölüm 2" yazısı ana sayfaya yönlendiren bir bağlantı olacaktır.

Eko "

Bölüm 2

";

Tekrar 3

1) Açığız dosya 3.php ve değişkeni ayarlayın.

$master="Bölüm 3";

2) menu.html dosyasında, bağlantı yerine koşulu içeren kodu ekleyin Bölüm 3, değişiklikler şunlardır:

if ($master == "Bölüm 3")// bu durum. Çalıştırılırsa, menünün bu yerine, yankı komutu kullanılarak, "Bölüm 3" yazısını görüntüleyen normal HTML etiketleri eklenir.

Eko "

Bölüm 3

";

başka// "aksi halde" anlamına gelir - koşul sağlanmazsa ne olur? Bu durumda koşul sağlanmazsa "Bölüm 3" yazısı ana sayfaya yönlendiren bir bağlantı olacaktır.

Eko "

Bölüm 3

";

Sonuç: Bu tür menülerdeki bağlantılar yerine biz

Ev


Bölüm 1

Bölüm 2


Bölüm 3

Bu php öğreticisi, site ziyaretçilerinin yoğun talebi üzerine yazılmıştır ve bir php sitesi için dinamik bir menü oluşturmayı öğrenmek için pratik bir kılavuzdur.

Aşağıdaki web yöneticisi hile sayfası size php'deki her sayfa için nasıl benzersiz başlıklar, açıklamalar ve anahtar kelimeler oluşturacağınızı söyleyecektir.

Arşivi tüm site şablonu ve php menü dosyaları ile indirebilirsiniz. Programlamaya yeni başlayanlar için önerilir.

Ciddi bir php çalışmasına hazırsanız, Popov'dan daha iyi bir video kursu bulmak zordur. Çok fazla tecrübesi ve iyi bir stili var.

]]> ]]>

23 Nisan 2017

Önceki derslerde dizilerin ne olduğunu örneklerle inceledik. Bu eğitimde, bir web sitesinde menüler oluşturmak için pratik olarak dizileri kullanıyoruz.

Neden normal HTML etiketlerinden daha kullanışlıdırlar?

Diyelim ki sitemizde her biri aynı menüye sahip 100 sayfa var. Ve aniden menü öğelerini değiştirmemiz gerekti. Sadece HTML kullanarak sitenin 100 sayfasında çok fazla düzenleme yapmamız gerekecek. Yani PHP bu tür durumlarda imdada yetişir. Tek bir dosyada menü öğelerini sadece bir kez değiştirmeniz yeterli olacaktır.

Ve şimdi gidelim.

“ klasöründeki yerel barındırmada etki alanları" adlı bir klasör oluşturun. sıralamak- Menü. yerel”.

Bu klasörde dört dosya oluşturuyoruz: dizin. php, hakkında. php, temas etmek. php Ve Menü. php.

!!! Dosya sözdizimi şöyle olmalıdır:PHP.

index.php dosyasında basit bir HTML çerçevesi yazıyoruz.




karakter kümesi="utf-8">



Ev


katmak("menü.php");
?>

Bu kodu about.php ve contact.php dosyalarına kopyalayın. Yalnızca etiketteki sayfaların başlıklarını değiştirin

.

Menünün kodunu yazıyoruz.

Dosyada menü.php ilişkisel bir dizi yazmak.

$ menü = sıralamak (
"dizin "=> "index.php",
hakkında => "hakkında.php",
"kişiler" => "iletişim.php"
);
?>

Aşağıda HTML etiketlerini kullanarak menüyü yazıyoruz.

Tarayıcıda, olağan menüyü bir liste şeklinde göreceğiz.

Herhangi bir menü öğesine tıklayarak, menü tüm sayfalarda olacakken ilgili sayfaya gideceğiz.

Şimdi görevi karmaşıklaştıralım. Dosyadan her şeyi kaldır menü.php Ve...

Çok boyutlu bir dizi yazıyoruz.




karakter kümesi="utf-8">
<span>Sitede menüyü görüntülemek için bir dizi kullanma.</span>


$ menü = sıralamak (
sıralamak("bağlantı" => "Ev", "href"=> "index.php"),
sıralamak("bağlantı" => "Hakkında", "href"=> "about.php"),
sıralamak("bağlantı" => "Kişiler", "href"=> "contact.php")
);
?>



Ve son adımda...

Menüyü bir döngü ile çizin her biri için.

menu.php dosyasından listeyi kaldır

    ve bunun yerine aşağıdaki kodu yazın.

    Eko"

      " ;
      her biri için($menü gibi$öğe)(
      Eko "
    • ($öğe)
    • " ;
      }

      Tarayıcıda aynı sonucu göreceğiz.

      Menü öğelerini değiştirmek için, bunları dosyada değiştirmeniz yeterlidir. menü.php sadece bir kere.

      Şimdi analiz edeceğimiz şey budur. Ve böylece görev, açılır liste şeklinde dikey bir menü yapmaktır.

      Bu PHP'de nasıl uygulanabilir? Çok basit! Örneğin, bir dosyamız var. dizin.php, açılır listede seçilen bölüme bağlı olarak sayfada ilgili içeriği görüntülemesi gerekir. Bu, aşağıdaki gibi uygulanır:

      1. Çıktı için gerekli içeriği içerecek .html formatında dosyalar oluşturuyoruz.

      2. İlgili bilgileri görüntülemek için index.php betiğinde gerekli koşulları oluşturuyoruz (yazıyoruz).

      3. Oluşturulan betiği, yürütülmekte olan betiğin güvenliği açısından değerlendiriyoruz.

      Görünüşe göre, teoriyi bitirdiğime göre, hadi uygulamaya geçelim. Öncelikle .html formatında gerekli bilgileri içerecek statik sayfalar oluşturuyoruz. Oraya canınız ne isterse yazabilirsiniz :) Sonuç olarak sırasıyla first.html ve second.html en az iki dosya almalıyız, ardından kodun temel algoritmasını anlayarak istediğiniz kadar yapılabilirler. .

      Bir dosyada açılır liste görüntülemek için index.php bir html formu oluşturuyoruz ve altına aşağıdaki içeriğe sahip bir PHP betiği yazıyoruz:



      Menü PHP


      PHP'de açılır menü












      if (isset ($_GET ["nerede" ]))
      {
      if ($_GET ["nerede" ]==1 )
      $dosya = "ilk.html" ;
      if ($_GET ["nerede" ]==2 )
      $dosya = "ikinci.html" ;
      dahil($dosya);
      }
      ?>


      Böylece açılır menü kodu hazır ve en ilginç olanı, normal şekilde çalışacak, ancak güvenlik açısından savunmasız.

      Bu komut dosyasının güvenlik açığı, değişkenin $dosya başlatılmamış olarak kalır, bu durumda otomatik olarak oluşturulan değişkenin değeri doğrudan işleve gider katmak ve sırayla onu (değişkeni) başarıyla bağlar ve ekranda görüntüler. Ve .htaccess yapılandırma dosyasından daha fazlası olabilir. Bu betiği hacklemek için, where parametresine kod tarafından sağlanmayan bir değeri, örneğin 3'ü iletmek yeterlidir. Ve bu değer, komut dosyası tarafından sağlanmadığı için, o zaman sadece bir değişken $dosya başlatılmayacaktır. Bu nedenle, URL dizesi aracılığıyla onun için keyfi bir değer ayarlamak mümkün olacaktır.

      http://localhost/index.php?where=3&file=.htaccess

      Ama bu böyle, konudan biraz uzaklaşmak. 😀

      Bu sorunun çözümü oldukça basit, $dosya sadece kullanımdan önce başlatılması gerekiyor, yani ona varsayılan bir değer verin.

      Burada, komut dosyasına where parametresi iletilirse, değişken doğru şekilde başlatılır, aksi takdirde boş kalır. İşte PHP'de bir [güvenli] açılır menü.

      Not: Senaryoları oluştururken, olası tüm saldırı vektörlerini hesaba katmak ve buna göre hariç tutmak gerekir. Güvenlik kurallarına uygun ve müşteri tarafından rağbet gören bir proje oluşturmanın tek yolu budur. Yakında görüşürüz!

      Çünkü menu.php modülünün içeriğini gösterir. Aşağıda, bir not defterinde sıfırdan yazılmış PHP'deki kendi menü geliştirmem var.

      Bu kod, özellikle kendi yazdığı motorlara sahip dinamik siteler için faydalı olacaktır. Kodun küçük farklılıklar içeren iki versiyonunu sunacağım (bu fark daha sonra açıklanacak).

      Başlangıç ​​​​olarak, bu menünün uygun olduğu sitenin yaklaşık yapısını vereceğim. Site yapısı şöyle görünmelidir (klasik görünüm):

      /index.html /section_1/ /razdel_1/articles_1.html /razdel_1/articles_2.html ... /razdel_2/ /razdel_2/articles_1.html /razdel_2/articles_2.html ... ... ... /razdel_N/articles_2 .html

      Site ayrıca bölümler için alt bölümler içerebilir:

      /section_1/podzaderl_1/ /section_1/podzaderl_1/articles_1.html /section_1/podzaderl_1/articles_2.html ... /section_1/podzaderl_2/articles_1.html /section_1/podzaderl_2/articles_2.html

      Bu yapı küçük farklılıklarla menümüz için de çalışacaktır.

      Php'de menü için ayrı bir dosya oluşturmanızı öneririm. Örneğin, böyle bir dosya için menu.php harika bir isim olacaktır. Menüyü uygulamak için, hemen az ya da çok güzel hale getirmek için CSS menü stili de tanıtıldı. Doğal olarak, sitelerin tasarımları çok farklı olduğu için bu stil yalnızca referans olarak verilmiştir.

      CSS menü stili kodu:

      .menu ( height:42px; padding:0 0 0 16px; background:url(images/spacer.png) tekrarla; ) .menu li ( display:block; float:left; ) .menu li.active ( arka plan: #000011 ; ) .menu a ( color:#FFF; display:block; line-height:42px; text-decoration:none; padding:0 14px; ) .menu a:hover ( background:url(images/spacer.png) tekrarla ;)

      Şimdi biraz basitleştirme olacak şekilde PHP'deki ilk menü uygulamasına bir göz atalım.

      PHP'deki menü kodunun ilk versiyonu

      \n"; for ($i=0;$i ": "
    • "; Eko " ".$array_menu[$i]["ad"]."
    • \n"; ) yankı "
    "; ?>

    Menü iki bölüme ayrılabilir. İlki, bölümlere bağlantılar içeren bölümlerimizin adlarını içeren $array_menu bilgi dizisini içerir. Bu verileri mySQL veritabanına koyma seçeneği var ama bunda pek bir anlam yok, çünkü örnek çok küçük, bu yüzden işin hızını etkilemeyecek.

    İkinci kısım, for döngüsü aracılığıyla menünün çıktısını içerir. Döngü, web sitesi adresini $array_menu dizisindeki adresle karşılaştırır. Bir eşleşme varsa, menünün bir sonraki bölümünü aktif özel bir sınıfla gösteririz:

  • aksi halde sadece
  • . Bu, menünün kullanıcının bulunduğu bölümünü biraz renkle vurgulamamızı sağlar. Bence bu, kullanıcının hangi bölümde olduğunu anlaması için herhangi bir site için gerekli bir şeydir.

    Sitede menü görüntülenirken dizideki sıralama korunacaktır. Yani, dizi, menüyü görüntülemek istediğiniz sırayla doldurulmalıdır.

    Not:
    Başlık bölümlerinin URL'lerinin (adreslerinin) şöyle görünmesi durumunda:
    /Bölüm 1
    ya da böyle
    /section_1/name_razdela.html
    o zaman array_menu'da tam eşleşmeyi yazmanız gerekir:
    $array_menu[$i]["url"]="/section_1"
    veya ikinci durum için:
    $array_menu[$i]["url"]="/section_1/nazvanie_razdela.html";

    İlk menü seçeneği nasıl çalışır?
    Yalnızca bölüm başlığı adresindeyseniz menüyü vurgular. Örneğin, sayfa adresi /section_1/articles_1.html ise menü hiçbir şekilde vurgulanmayacaktır.

    Kodun ikinci versiyonu, birincisinin değiştirilmiş bir versiyonudur ve bölümler halindeki makalelerde bile menüyü vurgulama imkanı sağlar.

    PHP'deki menü kodunun ikinci versiyonu

    "; for ($i=0;$i ": "
  • "; echo "".$array_menu[$i]["title"]."
  • "; ) else ( echo ($URL) == ($array_menu[$i]["url"]) ? "
  • ": "
  • "; echo "".$array_menu[$i]["title"]."
  • "; ) ) Eko "
"; ?>

Gezinme olmadan tek bir site tamamlanmaz veya "site menüsü" olarak da adlandırılır. Böylece site menüsü bir ağaç şeklinde tek seviyeli ve çok seviyeli olabilir. Tek seviyeli bir menü ile uygulamada belirli bir zorluk yoksa, çok seviyeli bir menü oluştururken dikkatlice düşünmeniz gerekir.

Bu görevdeki en önemli şey, çok düzeyli menümüz için bir veritabanı tasarlamaktır. Üç alanlı bir Kategoriler tablosu oluşturalım İD, başlık, ebeveyn Nerede:

  • İD- tanımlayıcı
  • Başlık- Menü adı
  • ebeveyn- Varsayılan kategori ebeveyni 0

Alan, menüyü dallandırmaktan sorumludur ebeveyn Eğer ebeveyn = 0, o zaman bu kategori üst kategoridir. Üst kategoriye çocuk eklemek için üst alanda belirtmeniz gerekir. İD istenen ebeveyn. Örneğin:

Kategorilere sahip tablolar

Tablodan da görülebileceği gibi üst kategori Arabalar iki torun var mazda Ve honda alana göre ilgili ebeveyn. Ve kategori motosikletler iki yavru kawasaki Ve harley. Aynı zamanda, Tekneler kategorisinin alt öğesi yoktur. Umarım kategorileri nasıl bağlayacağınızı anlamışsınızdır.

Sonra, kelimelerden pratiğe geçiyoruz. Kategoriler tablosunu oluşturalım.

CREATE TABLE IF NOT EXISTS 'kategoriler' ('id' int(10) unsigned NULL DEĞİL AUTO_INCREMENT, 'title' varchar(255) NOT NULL, 'parent' int(10) unsigned NULL DEĞİL, BİRİNCİL ANAHTAR ('id')) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; -- -- "kategoriler" tablo verilerini dökümü -- "kategoriler" İÇİNE EKLE ("id", "başlık", "ebeveyn") DEĞERLER (1, "Arabalar", 0), (2, "Motosikletler", 0) , (3, Mazda, 1), (4, Honda, 1), (5, Kawasaki, 2), (6, Harley, 2), (7, Mazda 3, 3 ), (8, "Mazda 6", 3), (9, "Sedan", 7), (10, "Hatchback", 7), (11, "Tekneler", 0), (12, "Liftback", 8), (13, "Crossover", 8), (14, "Beyaz", 13), (15, "Kırmızı", 13), (16, "Siyah", 13), (17, "Yeşil", 13), (18, Mazda CX, 3) ), (19, Mazda MX, 3);

İşin algoritması aşağıdakilerden oluşur:

Veritabanı bağlantısı oluşturma

query("ADLARI AYARLAYIN "utf8""); /* * Bu, bunu yapmanın "resmi" nesne yönelimli yoludur * ancak $connect_error, PHP 5.2.9 ve 5.3.0'a kadar çalışmadı. */ if ($mysqli->connect_error) ( die("Connection failed (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Sürümlerle uyumluluktan emin olmak istiyorsanız 5.2 .9 öncesi, * bunun gibi daha iyi kod */ if (mysqli_connect_error()) ( die("Connection failed (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Kategoriler tablosundan veri almak için bir işlev yazmak

//Menü dizimizi veritabanından bir dizi işlevi olarak alın getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //burada bir dizi oluşturun dizi anahtarı menü kimliğidir $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; )

Dizi anahtarının kategori kimliği olduğu böyle bir dizi elde ederiz.

Dizi Ağacı İşlevi, Tommy Lacroix

//Tommy Lacroix dizisinden ağaç oluşturma işlevi getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Eğer ek yoksa if (!$node[" parent"])( $tree[$id] = &$node; )else( //Eğer çocuklar varsa, $dataset[$node["parent"]][" dizisinde döngü yapın) childs"][$id] = &$ düğüm; ) ) $tree; döndür )

Bir ağaç şeklinde bir dizi alma

Tüm komut dosyası

query("ADLARI AYARLAYIN "utf8""); /* * Bu, bunu yapmanın "resmi" nesne yönelimli yoludur * ancak $connect_error, PHP 5.2.9 ve 5.3.0'a kadar çalışmadı. */ if ($mysqli->connect_error) ( die("Connection failed (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Sürümlerle uyumluluktan emin olmak istiyorsanız 5.2 .9 öncesi, * bu kodu kullanmak daha iyidir */ if (mysqli_connect_error()) ( die("Connection error (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Menü dizimizi alın veritabanından bir dizi işlevi olarak getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Dizi tuşunun menü olduğu bir dizi oluşturun ID $cat = array(); while ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; ) //Ağaç oluşturma işlevi tommy Lacroix tarafından bir diziden function getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Eğer ek yoksa if (!$node["parent") ])( $tree[$id] = &$node; )else( //Eğer çocuklar varsa, $dataset[$node["parent"]]["childs"][$id] dizisini yineleyin = &$node; ) ) return $tree; ) //$cat = getCat($mysqli); verileriyle hazırlanmış bir dizi alın //Bir ağaç menüsü oluştur $tree = getTree($cat); //Ağaç işlevi biçiminde menüyü görüntülemek için şablon tplMenu($category)( $menu = "
  • ".$category["başlık"].""; if(isset($category["childs"]))( $menu .= "
      ".showCat($category["children"]) ."
    "; ) $menü .= "
  • "; return $menu; ) /** * Şablonumuzu tekrar tekrar okuyun **/ function showCat($data)( $string = ""; foreach($data as $item)( $string .= tplMenu($item); ) return $string; ) //HTML işaretlemesini al $cat_menu = showCat($tree); //Echo'yu göster "
      ". $cat_menu ."
    "; ?>

    çalışmanın sonucu

    Yönetici için PHP + MySQL'de çok düzeyli menü

    Bu menüyü sitenizin yönetici panelinde kullanmak istiyorsanız, birkaç işlevi yeniden yazmanız gerekir. tplMenü(), showCat().

    ".$category["başlık"].""; )else( $menü = " "; ) if(isset($category["childs"]))( $i = 1; for($j = 0; $j< $i; $j++){ $str .= "→"; } $i++; $menu .= showCat($category["childs"], $str); } return $menu; } /** * Рекурсивно считываем наш шаблон **/ function showCat($data, $str){ $string = ""; $str = $str; foreach($data as $item){ $string .= tplMenu($item, $str); } return $string; } //Получаем HTML разметку $cat_menu = showCat($tree, ""); //Выводим на экран echo ""; ?>

    çalışmanın sonucu

    Arabalar → Mazda →→ Mazda 3 →→→ Sedan →→→ Hatchback →→ Mazda 6 →→→ Liftback →→→ Crossover →→→→ Beyaz →→→ Kırmızı →→→→ Siyah →→→→ Yeşil →→ Mazda CX →→ Mazda MX → Honda Motosikletleri → Kawasaki → Harley Tekneleri