PHP va MySQL-da Bagatorívneve menyusi. §2. php Inurl php da paydo bo'ladigan vertikal menyu qanday yaratiladi o'z menyusi id piramidasi

Golovna / Nalashtuvannya

Agar veb-saytingizda bitta veb-sahifa bo'lmasa, navigatsiya panelini (menyu) qo'shishni o'ylab ko'ring. Menyu - veb-saytga tarqatiladi, bu saytni kezishda yordam beradi. Menyu bo'lsin - saytning ichki tomonida saqlanishi kerak bo'lgan xabarlar ro'yxati. O'zi oddiy tarzda saytga navigatsiya paneli qo'shing va menyu yarating CSS-ga yordam bering va HTML.

Vertikal menyu

Vertikal menyuni yaratishda birinchi qadam markirovka qilingan ro'yxatni yaratish bo'ladi. Bizga roʻyxatni aniqlash qobiliyati ham kerak, shuning uchun biz “navbar” identifikatori bilan id atributini qoʻshdik. Teri elementi

  • bitta so'rov uchun qasos ro'yxatimiz:

    Bizning keyingi vazifamiz qulflar orqasida o'rnatilgan uslublarni ro'yxatdan olib tashlashdir. Biz ro'yxatning nomlari va ichki yozuvlarini va ro'yxatdagi elementlarning yonidagi markerlarni tozalashimiz kerak. Kerakli kenglikni o'rnatamiz:

    #navbar (chekka: 0; toʻldirish: 0; roʻyxat uslubi turi: yoʻq; kenglik: 100px; )

    Endi o'zingizni uslublash vaqti keldi. Biz ularga fon rangini qo'shamiz, matn parametrlarini o'zgartiramiz: shriftning rangi, o'lchami va o'lchami, engil kuchaytiramiz, kichik qadamlar qo'shamiz va shrift hajmini o'zgartiramiz. element qatordan blokga. Ro'yxatdagi elementlarning chap va pastki ramkalariga Dodatkovo qo'shildi.

    O'zgarishlarimizning eng muhim qismi kichik elementlarni bloklarga qayta taqsimlashdir. Endi bizning xabarlarimiz ro'yxatdagi elementning to'liq bo'sh joyini egallaydi, shuning uchun xabarga o'tish uchun endi kursorni aynan matnga qaratishimiz shart emas.

    #navbar a (fon rangi: #949494; rang: #fff; to‘ldirish: 5px; matn bezatish: yo‘q; shrift og‘irligi: qalin; chap chegara: 5px qattiq #33ADFF; displey: blok; ) #navbar li ( chegara-chap: 10px qattiq #666; chegara-pastki: 1px qattiq #666;

    Biz barcha kodlarni, ko'proq tavsiflarni bitta tugmachaga birlashtirdik, endi sinash tugmasini bosish orqali siz dumba bilan yon tomonga o'tishingiz va natijani ko'rishingiz mumkin:

    hujjatga nom berish

    Sinab ko'ring »

    Sichqoncha kursorini yoga menyusi bandiga olib borganingizda eski ko'rinish koristuvachning hurmatini aylantirib o'zgartirishingiz mumkin. Pseudo-klassga yordam berish orqali siz bunday effekt yaratishingiz mumkin: hover.

    Keling, biz ilgari ko'rib chiqqan vertikal menyuning pastki qismiga murojaat qilaylik va uslublar jadvaliga quyidagi qoidani qo'shamiz:

    #navbar a:hover (fon rangi: #666; chegara-chap: 5px qattiq #3333FF; ) Sinab ko'ring »

    Gorizontal menyu

    Old tomonda biz vertikal navigatsiya panelini ko'rib chiqdik, bu asosiy kontent sohasida chap yoki o'ng qo'lli saytlarni ko'rishning eng keng tarqalgan usuli. Biroq, navigatsiya xabarlari bo'lgan menyular ham ko'pincha veb-sahifaning yuqori qismida gorizontal ravishda ko'rsatiladi.

    Ajoyib ro'yxatni qo'shimcha stilizatsiya qilish uchun gorizontal menyu yaratilishi mumkin. Elementlar uchun quvvat ko'rsatkichi

  • ro'yxatdagi elementlar birma-bir tartiblangan bo'lishi uchun qiymatlarni satrga o'rnatish kerak.

    Menyu bandlarini gorizontal ravishda orqa tomonda joylashtirish uchun biz xabarlar bilan belgilash ro'yxatini yaratamiz:

    Keling, ro'yxatimiz uchun bir nechta qoidalarni yozamiz, uslubdan nimani tashlash kerak, qulflar uchun ro'yxatlar uchun nimani yutish kerak va qatordagi blokdan ro'yxatni qayta ko'rib chiqamiz:

    #navbar ( hoshiya: 0; toʻldirish: 0; roʻyxat uslubi turi: yoʻq; ) #navbar li (ekran: inline; ) Sinab koʻring »

    Endi biz ko'proq narsani yo'qotdik stilistik dizayn gorizontal menyumiz uchun:

    #navbar (chekka: 0; toʻldirish: 0; roʻyxat uslubi turi: yoʻq; chegara: 2px qattiq #0066FF; chegara radiusi: 20px 5px; kenglik: 550px; matnni tekislash: markaz; fon rangi: #33ADFF; ) #navbar a (rang: #fff; toʻldirish: 5px 10px; matn bezatish: yoʻq; shrift ogʻirligi: qalin; displey: inline-blok; eni: 100px; ) #navbar a:hover (chegara radiusi: 20px 5px ; fon rangi: #0066FF; ) Sinab ko'ring »

    VIP menyu

    Biz yaratadigan menyu, asosiy navigatsiya xabarlarining onasi, gorizontal navigatsiya panelida tartiblangan va pastki elementlar, sichqoncha kursorini ushbu menyu bandiga olib borishi bilan, ma'lum miqdordagi kichik elementlar ko'ringuncha. .

    Birinchidan, menyumizning HTML strukturasini yaratishimiz kerak. Belgilangan ro'yxatga qo'shishimiz mumkin bo'lgan asosiy navigatsiya xabarlari:

    Subitem mi rozmístimo okremy ro'yxatida, elementga yogo qo'yish

  • , pastki nuqtalar uchun otaning iltimosiga qasos olish uchun. Endi biz kelajakdagi navigatsiya panelimiz tuzilishini o'qishimiz mumkin:

    Sinab ko'ring »

    Endi CSS kodini yozishga o'tamiz. Kob uchun qo'shimcha ovozli displey uchun pastki nuqtalar ro'yxatini biriktirish kerak: yo'q;, yomon hid butun bir soat davomida veb-saytda ko'rinmaydi. Pastki nuqtalarni ko'rsatish uchun element ustida kursorni olib borishda bizga kerak

  • blok elementidagi yangi o'zgarishlar ro'yxati:

    #navbar ul ( displey: none; ) #navbar li:hover ul ( displey: blok; )

    Biz ikkala ro'yxatni va qulfning orqasiga o'rnatilgan markerlarni olamiz. Ro'yxatning elementlari navigatsiya vositalari bilan suzuvchi, shakllantirish gorizontal menyu, lekin tekshirilishi kerak bo'lgan ro'yxat elementlari uchun floatni o'rnating: none; shunday qilib, badbo'y hidi bir ostida birdek tuyuldi.

    #navbar, #navbar ul ( hoshiya: 0; toʻldirish: 0; roʻyxat uslubi turi: yoʻq; ) #navbar li ( float: chap; ) #navbar ul li ( float: none; )

    Keyin shunday ishlashimiz kerakki, bizning pastki menyumiz tushmaydi, tarkibga aralashmaydi, uni navigatsiya paneli ostida, pastga suradi. Buning uchun biz elementni ro'yxat pozitsiyasiga qo'yamiz: nisbiy; va ro'yxatga, nima qasos subpunktlar pozitsiyasi: mutlaq; í dodamo quvvat yuqori íz qiymatlari 100%, schob mutlaqo joylashtirilgan pídmenu vídobrazhalos aniq píd píd silannyam.

    #navbar ul ( displey: yo‘q; pozitsiyasi: mutlaq; tepasi: 100%; ) #navbar li ( float: chap; pozitsiya: nisbiy; ) #navbar ( balandlik: 30px; ) Sinab ko‘ring »

    Batkiv ro'yxati uchun balandlik ataylab qo'shilgan, shunda brauzerlar elementdagi suzuvchi tarkibni tekshirmaydilar, balandlikni qo'shmasdan bizning ro'yxatimiz brauzer tomonidan e'tiborga olinmaydi va ro'yxatdan keyingi tarkib menyumiz atrofida o'raladi.

    Endi biz ro'yxatlarimiz va menyularimizni haqorat qilish uslubini yo'qotdik, nima ko'rsangiz, tayyor bo'ling:

    #navbar ul (displey: yo‘q; fon rangi: #f90; pozitsiya: mutlaq; tepa: 100%; ) #navbar li:hover ul (displey: blok; ) #navbar, #navbar ul ( chekka: 0; to‘ldirish: 0; list-style-type: none; ) #navbar (balandlik: 30px; fon rangi: #666; toʻldirish-chap: 25px; min. kenglik: 470px; ) balandlik: 100%; ) #navbar li a (displey: blok; to‘ldirish: 6px; eni: 100px; ) #navbar li:hover (fon rangi: #f90; ) #navbar ul li:hover (fon rangi: #666; )

    php skriptlar tomonidan boshqariladigan php-dagi sayt menyusi o'ziga xos xususiyatlarga ega. Bu shunchaki mutlaq yoki vodnosn_ sila emas, garchi u bir butun bo'lishi mumkin bo'lsa-da, lekin, qoida tariqasida, yon panellarning silan bloklari bo'lib, ular razdyla va poddrozdyla í bloklari bilan dinamik tarzda shakllanadi. sayt. Dinamik ravishda shakllantirilgan menyu allaqachon qulay, uni saytga qanday kiritish mumkin, u joy yoki o'z vaqtida eng muhim bo'ladimi. Shunday qilib, turli bo'limlar va pastki papkalarga o'tsangiz, turli xil menyu bloklarini dinamik ravishda kengaytirishingiz mumkin. Bundan tashqari, hid nafaqat zmist uchun, balki shakli va dizayni uchun ham farq qilishi mumkin. Statik sayt uchun siz ushbu fokuslarni ham tekshirishingiz mumkin, lekin siz shablonga qo'shimcha fayllar va ko'plab turli xil fokuslarni qo'shasiz. Php-da sayt yozishni xohlash hech narsaga yordam bermaydi. Shablonni yo'qot, yak i buv. Bir yoki bir nechta oddiy PHP skriptlarini ishlating.

    Boshqasiga o'tish uchun dinamik menyuni shakllantirish uchun PHP skriptini yozish kifoya, masalan, birinchi sarlavha va skriptning oldingi yozilishi orqali sarlavha menyusini o'zgartirish. Boshqa sarlavhalar xuddi shunday tartibda tuzilishi mumkin. Bundan tashqari, skript kodining o'zi ham amaliy o'zgarishlarga ega emas. Faqat matnli faylni o'zgartiring, u ma'noda xabar va xabarning o'zi deb ataladi. Bunday skript uchun kod matn ostida joylashgan.

    // Shakllantirish menyusi
    $menu = @fayl($rubrik1_menu);
    $lines = count($menyu);
    uchun ($i = 0; $i< $lines; $i++)
    {
    list($menu_link,$menu_name,$menu_title)=portlash("::", $menu[$i]);
    if($page == rub1_part1 va $i == 0) ($refcolor = "style="color:#cc0000"";)
    elseif($page == rub1_part2 va $i == 1) ($refcolor = "style="color:#cc0000"";)
    elseif($page == rub1_part3 va $i == 2) ($refcolor = "style="color:#cc0000"";)
    boshqacha ($refcolor = "";)
    $rubrik1.="

  • ".$menu_name."
  • ";
    }
    ?>

    Bunday skriptni kerakli matn faylida qayta ishlash uchun, u holda menyuga nom bering, o'sha sarlavhani o'zi yuboring. Bunday faylni yaratish noqulay bo'lishi uchun Dreamweaver asosiy menyusining Fayl -> Yangi buyrug'ini o'zgartirish, yuqorida aytib o'tilganidek, yangi html hujjatini yaratish, yangi fayl kodini UTF-8 ga qayta ko'rib chiqish va o'zgartirish, so'ngra saqlash kifoya. ismingiz rubrika1 .dat dadamning ma'lumotlari oldida. Ushbu faylga keyingi yo'l D:/Mysitephp/data/rubric1.dat bo'ladi. Fayl oʻrniga sichqonchani pastga suring, agar kerak boʻlsa, í̈x nomi va í̈x sarlavhasi (takliflar). Krim bundan tashqari, schob run Daniya yozuvi robot uchun qo'shimcha funktsiyalar uchun uni ulash kerak o'z ichiga oladi() shablon mexanizmi main.php da.

    Rub1_qism1::1-qism::1-qism 1-rubrika::
    rub1_qism2::2-qism::2-qism 1-bo'lim rubrikalari::
    rub1_part3::3-qism::3-qism 1-bo'lim rubrikalari::

    Bundan tashqari, sozlamalar bilan kichik skript yaratish kerak, unda sayt manzillari, tomonlarning papkalariga yo'llar va saytning meta tavsiflari, sayt menyusidagi fayllarga yo'llar va qo'shimcha funktsiyalar uchun yoga ulaning o'z ichiga oladi() shablon mexanizmi main.php da. Kim uchun yangisini yaratish kerak php fayli, va uni men uchun saqlang, masalan, php papkasida setings.php. Faylga keyingi yo'l D:/Mysitephp/php/setings.php bo'ladi va u pastga suriladi.

    html hujjatlari bilan # jild
    $doctemplates = "shablonlar";
    # skript katalogiga yo'naltirish
    $turl="http://mysitephp.ru";
    danimes bilan ma'lumotlar bazasi
    $rubric1_menu = "data/rubric1.dat";
    ?>

    Menyu yaratish uchun PHP skriptidan qanday foydalanasiz? Qo'shimcha funktsiyalar uchun $ menyusini o'zgartiring fayl() rubric1.dat matn fayliga o'ting. Potim funktsiyasi count() qatorlar sonini ko'paytirish matn fayli va funktsiyalari list()і portlash() tsiklda qatorlarni yopishtirish usulidan foydalangan holda menyuning o'zi ochiladi (nuqta operatsiyasi . ) nomlari va unvonlari bilan tarixan shakllangan, shuning uchun ularni $rubrika1 oʻzgarishiga kiritishimiz mumkin. Menyu skripti funksiya tomonidan yoqilgan shablon skripti berilgan o'z ichiga oladi(), ilgari tasvirlangan funksiyalar uchun qoʻshimcha yordam olish uchun saytga $rubric1 ni oʻzgartirish oʻrniga harakatlaning repl().

    Bunday menyu hozircha ishlamaydi, yangisidagi parchalar faqat kerakli atributlar bilan o'zlari tomonidan yuboriladi, ammo bu xabarlar uchun o'tishni va sayt tomonlarini tasdiqlashni ta'minlaydigan skript emas, ular ushbu xabarlarni tasdiqlashlari uchun. Cim PHP skripti bilan biz shug'ullanamiz.

    Dali menyuni shakllantirish uchun skript bilan yangilanishlar loyihasi bo'lishi mumkin. Shuningdek, siz loyihaga yangilanishlarni yon tomonda so'rashingiz mumkin, chunki u ro'yxatdan o'tgandan va o'ng panelda bepul ortiqcha to'lovni faollashtirgandan keyin ko'rsatilgan. Partiyaning manzillarini saqlash kerak. Boshqa tomondan, biz loyihani yangilash, turli xil ko'k skriptlar, dasturlar, sxemalar, dasturlash va veb-saytlarni ishlab chiqish bo'yicha darslar va video darslarni targ'ib qilish uchun ariza topshirdik. yangi kelganlar uchun.

    PHP loyihasidan saytga yangi skriptlar bilan yangilanish so'rovlarini endi u bilan solishtirish mumkin, bu yuqoridagi tavsiflar natijasida sodir bo'ldi. Keyin, o'qishni o'chirish uchun men loyihani yana avanslar uchun almashtiraman, operatsiyani boshlayman, Denwer serverini ishga tushiraman, brauzer oynasida mysitephp.ru ni kiritaman va nima bo'lganiga qarang. Shablonning chap yuqori qismida quyida ko'rsatilganidek, birinchi bo'limning menyusi ko'rsatilishi mumkin.

    Boring va sevimli sotsialistingiz bilan til topishing

    Sayt navigatsiyasiz to'liq bo'lmasligi kerak, aks holda u "sayt menyusi" deb ham ataladi. Shunday qilib, sayt uchun menyuning o'qi bir xil daraxtda birma-bir va bir-bir. Amalga oshirish rejasida maxsus katlama variantlarining birma-bir menyusi bo'lmasa-da, boy menyu yaratishda diqqat bilan o'ylash kerak.

    Bizning vazifamizning eng muhim vazifasi - bizning boy menyumiz uchun ma'lumotlar bazasini loyihalash. Keling, uchta maydondan Categories jadvalini yaratamiz id, sarlavha, ota-ona de:

    • ID- identifikator
    • Sarlavha- Menyu nomi
    • ota-ona- Zamovchuvannyam uchun toifadagi ota 0

    Menyuning tartibi uchun ota-ona yakscho ota = 0, keyin bu toifa Batkivskaya. Ota toifasiga ism qo'shish uchun ota-ona maydonida ko'rsatish kerak ID zarur ota. Masalan:

    Kategoriyalar bilan jadvallar

    Jadvallardan ko'rinib turibdiki, Batkiv toifasida Avtomobillarê ikkita nashashki - tse Mazdaі Honda maydon bo'ylab pov'yazanih ota-ona. Va kategoriya Mototsikllar ikkita o'lja - tse Kavasakiі harley. Bu bilan Chovna toifasida mukofotlar yo'q. Ishonchim komilki, siz toifalarni qanday bog'lashni tushungansiz.

    Keling, amaliyotga o'tamiz. Keling, toifalar jadvalini tuzamiz.

    AGAR MAVJUD BO'LSA JADVAL YARATING `kategoriyalar` (`id` int(10) unsigned NO NULL AUTO_INCREMENT, `title` varchar(255) NO NULL, `parent` int(10) unsigned NO NULL, BIRINCHI KEY (`id`)) ENGINE=MyISAM SUVGA CHARSET=utf8 AUTO_INCREMENT=20; -- -- "Kategoriyalar" jadvali ma'lumotlarini yo'q qilish -- INSERT INTO "toifalar" ("id", "nom", "ota-ona") VALUES (1, "Avtomobillar", 0), (2, "Mototsikllar", 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, "Xetchbek", 7), (11, "Chovni", 0), (12, "Liftbek", 8), (13, "Krossover", 8), (14, “Biliy”, 13), (15, “Chervoniy”, 13), (16, “Qora”, 13), (17, “Yashil”, 13), (18, Mazda CX, 3) ), (19, Mazda MX, 3);

    Robot algoritmi hujumlardan iborat:

    Biz ma'lumotlar bazasi bilan aloqa yaratamiz

    query("NOMLARNI SET "utf8""); /* * $connect_error himoyasini yaratish uchun "rasmiy" ob'ektga yo'naltirish usuli PHP 5.2.9 va 5.3.0 versiyalarigacha ishlamaydi. */ if ($mysqli->connect_error) ( die("Ulanish uchun kechirim (" . $mysqli->connect_errno. ") " . $mysqli->connect_error); ) /* * Bu 5.2 .9 dan oldin ulanish uchun qo'shilishi kerak. , * bu kabi yaxshiroq twist kod */ if (mysqli_connect_error()) ( die("Ulanish kechirilishi (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

    Jadvallardan ma'lumotlarni olish funksiyasini yozamiz

    //Menyumiz massivini ma’lumotlar bazasidan massiv funksiyasi ko‘rinishida olib tashlang getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); / /Kalit massivida massiv yaratish ê Menyu ID $cat = array();

    Biz ushbu turdagi massivni olamiz, massivni toifa identifikatorlari bilan belgilaymiz.

    Tommy Lacroix ko'rishlar qatoridan daraxtni uyg'otish funktsiyasi

    //Tommy Lacroix kabi massivdan daraxt olish funksiyasi getTree($dataset) ( $tree = array(); foreach ($id => &$tugun) ( //Uya yoʻq, agar (! $node[" parent"])( $tree[$id] = &$node; )else( //Agar sarlavhalar mavjud bo'lsa, $dataset[$node["parent"]]["childs" massivida takrorlang. ][$id] = &$ tugun;)) $tree;) qaytaring

    Ko'rinadigan daraxtdan massivni olib tashlang

    Umuman skript

    query("NOMLARNI SET "utf8""); /* * $connect_error himoyasini yaratish uchun "rasmiy" ob'ektga yo'naltirish usuli PHP 5.2.9 va 5.3.0 versiyalarigacha ishlamaydi. */ if ($mysqli->connect_error) ( die("Ulanish uchun kechirim (" . $mysqli->connect_errno. ") " . $mysqli->connect_error); ) /* * Bu 5.2 .9 dan oldin ulanish uchun qo'shilishi kerak. , * bu kabi yaxshiroq twist kod */ if (mysqli_connect_error()) ( die("Ulanish kechirilishi (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) funksiya getCat($mysqli)( $sql = " * FROM `categories`"; $res = $mysqli->query($sql); //Kalitlar qatori massivini yaratish ê menyu identifikatori $cat = array(); while ($row = $res->fetch_assoc()) ( $cat[$row["id"]] = $row; ) return $cat; ) //Tommy Lacroix funktsiyasi kabi massivdan daraxtni oling getTree($dataset) ( $tree = array(); foreach ($dataset sifatida $id => &$tugun) ( //Nester yoʻq if (!$tugun["ota-ona"])( $tree[$id] = &$tugun; )else( //Sarlavhalar tufayli, keyin takrorlang. massivida $dataset[$node["parent"]]["childs"][$id] = &$node; ) ) return $tree; ) //Danimi $cat dan massivni tayyorlash kerak = getCat($mysqli); //Menyuga o'xshash daraxt yarating $tree = getTree($cat); //Menyuni daraxt koʻrinishi funksiyasida koʻrsatish uchun shablon tplMenu($category)( $menu = "
  • ".$category["title"].""; if(isset($category["childs"]))( $menu .= "
      ".showCat($category["bolalar"]) ."
    "; ) $menu .= "
  • "; return $menu; ) /** * Shablonimizni rekursiv o'qing **/ function showCat($data)( $string = ""; foreach($ma'lumotlar $item sifatida)( $string .= tplMenu($item); ) return $string; ) //HTML tartibi talab qilinadi $cat_menu = showCat($tree); //Echo ekranda aks etadi "
      ". $cat_menu ."
    "; ?>

    Amaliyot natijasi

    Admin uchun PHP + MySQL da Bagator_vneve menyusi

    Agar siz saytingiz ma'muriyatida ushbu menyuni yutib olishni istasangiz, bir nechta funktsiyalarni qayta yozishingiz kerak tplMenu(), showCat().

    ".$category["title"].""; )else( $menu = " "; ) 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 ""; ?>

    Amaliyot natijasi

    Avtomobillar → Mazda →→ Mazda 3 →→→ Sedan →→→ Xetchbek →→ Mazda 6 →→→ Liftbek →→→ Krossover →→→→ Oq →→→ Chervoniy →→→→Chorniy →→→→ Zeleniy →→ Mazda CX → → Mazda MX → Honda Mototsikllari → Kawasaki → Harley Chovny

    Oskílki menu.php modulini ochmaydi. Quyida siz PHP da menyuning batafsil tavsifini topasiz, chunki bula bloknotda noldan yozilgan.

    Ushbu kod, ayniqsa, dinamik saytlar uchun to'g'ri keladi, chunki o'z-o'zidan yozilgan dvigatellar bo'lishi mumkin. Men kodning ikkita variantini targ'ib qilaman, chunki noaniq tafsilotlar bo'lishi mumkin (kimning farqi keyinroq tushuntiriladi).

    Kob uchun men saytning tuzilishini, qandaydir menyu uchun yo'naltiraman. Bunday ko'rinish uchun saytning tuzilishi aybdor ( klassik ko'rinish):

    /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

    Saytni ko'proq va ko'proq tarqatish mumkin:

    /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

    Bunday tuzilma bizning menyumiz uchun ham amaliy, ammo kichik o'lchamlarga ega.

    Men PHP da menyular uchun okremium faylini yaratishni taklif qilaman. Misol uchun, menu.php bunday fayl uchun sehrli nom bo'ladi. Menyuni amalga oshirish uchun CSS menyusining uslubi ham ko'proq yoki kamroq chiroyli bo'lishi uchun taqdim etiladi. Tabiiyki, bu uslub faqat tanib olish uchun berilgan, saytlardan parchalarni boshqacha tarzda loyihalash.

    CSS menyu uslubi kodi:

    .menu (balandlik:42px; toʻldirish:0 0 0 16px; fon:url(images/spacer.png) takrorlash; ) .menu li (displey:blok; float:chap; ) .menu li.active ( fon: #000011 ; ) .menyu a (rang:#FFF; displey: blok; chiziq balandligi: 42px; matn bezagi: yo‘q; ;)

    Keling, PHP-da menyuni amalga oshirishning birinchi variantini ko'rib chiqaylik, biz buni arzimas narsalarni kechira olamiz.

    PHP da menyu kodining birinchi versiyasi

    \n"; uchun ($i=0;$i ": "
  • ";echo" ".$array_menu[$i]["name"]."
  • \n"; ) echo ""; ?>

    Menyuni ikki qismga bo'lish mumkin. Birinchi qadam $array_menu ma'lumotlar massivini olib tashlash bo'lib, unga tarqatish so'rovlaridan tarqatishlarimiz nomlari kiritiladi. Ê varianti mySQL uchun Lekin, ayniqsa, tsommu yilda sensu yo'q, oskolki vibrka zovsym kichik, deb swidkíst ish níyak emas vpline haqida.

    Yana bir qism menyuni for tsikli orqali ko'rishdir. Tsikl $array_menu massivining manzili bilan saytning izchil manzilini oladi. Agar bu zbíg bo'lsa, biz faol maxsus sinf bilan menyuning qora qismini ko'rsatamiz:

  • , aks holda faqat
  • . Tse bizga koristuvach ma'lum bo'lgan menyuning o'sha qismini rangli kabi ko'rishga imkon beradi. Menimcha, har qanday sayt uchun boy bo'lish kerak, shunda siz bir zumda bilimdon bo'lishingiz, qaysi vinolaringiz borligini bilishingiz kerak.

    Massivga to'g'ridan-to'g'ri kirish tartibi saytda menyu ko'rsatilganda hisobga olinadi. Shunday qilib, qatorni tartibga solish kerak, unda menyuni ko'rsatish kerak.

    Eslatma:
    URL (manzil) sarlavhasi qanday ko'rinishi mumkin:
    /bo'lim_1
    aks holda shunday
    /section_1/name_razdela.html
    keyin array_menu-da siz aniq qiymatni yozishingiz kerak:
    $array_menu[$i]["url"]="/section_1"
    yoki boshqa vipadu uchun:
    $array_menu[$i]["url"]="/section_1/nazvanie_razdela.html";

    Birinchi menyu variantini qanday qilish kerak?
    Vín pídsvíchuê menyu kamroq, tarqatish manzili uchun bilsangiz. Misol uchun, agar sahifa manzili /section_1/articles_1.html bo'lsa, u holda menyu ko'rsatilmaydi.

    Kodning yana bir varianti - birinchi variantni o'zgartirish va tarqatishlarda mavjud bo'lgan maqolalarda paydo bo'ladigan menyuni almashtirish imkoniyatini o'tkazish.

    PHP da menyu kodi uchun yana bir variant

    "; uchun ($i=0;$i ": "
  • "; echo "".$array_menu[$i]["title"]."
  • "; ) else ( echo ($URL) == ($array_menu[$i]["url"]) ? "
  • ": "
  • "; echo "".$array_menu[$i]["title"]."
  • ";)) aks-sado""; ?>

    Ushbu maqolada men sizga qanday qilib yaratishingiz mumkinligini ko'rsataman PHP va MySQL-da turli xil menyular. Ajablanarlisi shundaki, ushbu yaratilish variantlari boy bo'lishi mumkin, ammo bu mavzu bo'yicha ovqatlanishingiz soniga qarab, sizga dumba kerak. Men maqolamga birinchi yoga olib kelaman. Men darhol ushbu maqola sokinlar uchun yanada oqilona ekanligini ta'kidlayman, kim biladi PHP va vmíê amaliyoti s MySQL. Qolganlarning hammasi buni boshdan kechirishi yoki kitob o'qishi kerak PHP va MySQL.

    Kob uchun biz ma'lumotlar bazasida kengaytirilgan maydonlar bilan jadval yaratamiz:

    • id- Noyob identifikator.
    • sarlavha- Menyu uchun anchor xabar.
    • havola- manzillar, biz menyu bandini bilamiz.
    • ota_identifikatori- Batkiv ID. Batkivskiy elementi kabi narsa yo'q, bu erda u NULL bo'ladi (aks holda siz 0 qo'yishingiz mumkin).

    Biz stolni tartibga keltirdik, endi soat keldi PHP kodi. Povniy PHP kodi pastga suring:

    $mysqli = new mysqli("localhost", "root", "", "db"); // Ma'lumotlar bazasiga ulanish
    $result_set = $mysqli->query("SELECT * FROM `menyu`"); // Robimo menyudan jadvaldagi barcha yozuvlarni tanlash
    $elementlar = massiv(); // Menyu bandlari uchun massiv
    while (($row = $result_set->fetch_assoc()) != false) $items[$row["id"]] = $row; // Massivni ma'lumotlar bazasidan tanlov bilan to'ldiring
    $children = massiv(); // Otasining bola elementlarining xarakteristikalari uchun massiv
    foreach ($ element sifatida $ element) (
    agar ($item["parent_id"]) $childrens[$item["id"]] = $item["parent_id"]; // Massivni yozing
    }
    printItem funksiyasi ($item, $items, $children) (
    /* Menyu bandini ko'rsatish */
    aks-sado "

  • ";
    echo "".$item["title"]."";
    $ul = noto'g'ri; // Qaysi yordamchi elementlar ishlab chiqarilgan?
    esa (to'g'ri)(
    /* Cheksiz tsikl, buning uchun biz barcha asosiy elementlarni qidiramiz */
    $key = array_search($item["id"], $children); // To'liq elementni o'chirish
    agar (!$key) (
    /* Hech qanday yordamchi element topilmadi */
    agar ($ul) aks-sado "// Agar asosiy elementlar yaratilgan bo'lsa, ro'yxat yopiladi
    sindirish; // Loopdan ko'rilgan
    }
    unset($children[$key]); // Biz bilim elementini ko'rishimiz mumkin (agar sharob yana ko'rsatilmasa)
    agar (!$ul) (
    aks-sado "
      // Ichki ro'yxatni ta'mirlash, chunki hali hech qanday yordamchi elementlar yo'q edi
      $ul=to'g'ri; // praporshchni o'rnatish
      }
      echo printItem($items[$key], $elementlar, $children); // Rekursiv ravishda barcha asosiy elementlarni ko'rsatish
      }
      aks-sado "";
      }
      ?>

      Ushbu kod to'liq ishlamoqda, ammo siz shunga o'xshash hech narsa yozmasligingizni tushunishingiz uchun javobgarsiz (zokrema, visnovok orqali). aks-sado HTML teglari). I Sizning vazifangiz kodning o'zidan emas, balki ushbu koddan algoritm olishdir. Va keyin algoritm dvigatelingizga ulanadi. Kodni chiqishga sharhlash uchun qo'limdan kelganicha harakat qildim PHP va MySQL-da maxsus menyu Ale, telba, sharob eng shaffof va vimagaê allaqachon odobsiz boshoq bilim emas. Yakshcho Vesche yomon bilaman PHP va MySQL, keyin men cei orqali o'tishni tavsiya qilaman

  • © 2022 androidas.ru - Android haqida hamma narsa