Webmaster общности: Predpriemach.com | SearchEngines.bg

    Динамично меню

    Автор: sizif

    СЪЗДАВАНЕ НА САЙТ С ДИНАМИЧНО МЕНЮ И ДИНАМИЧНО СЪДЪРЖАНИЕ, без БД

    Предполагам, че много често сте се сблъсквали с проблема, как да направите динамично меню или страница с динамично

    съдържание, ако не използвате База данни и не искате кода за самото меню да е по-тромав, отколкото всичко останало в

    страницата.
    Обикновено в подобни ситуации се използва оператора switch(); но в този урок ще ви покажа по-удобен начин (и с доста повече

    възможности за управление), базиран на организиране на информацията в масиви.

    За начло е добре да определим, по какъв начин ще си обособим кода, дали в отделни файлове, които ще включваме чрез include();

    дали ще ги четем или ще ги оформим в автономни блокове от код, разположени в основния файл.

    За да бъде по-чист примера ще използвам инклуд.

    И така, нека имаме 5 страници, разделени на 5 файла: nachalo.php, page_2.php, page_3.php, about_us.php и contact.php.

    Ще имаме нужда от 2 допълнителни файла: menu.php (за менюто) и index.php (в който ще включваме всички файлове).
    Ако държите на пестеливостта, а не на удобството при бъдещи редакции, бихте могли да съберете двата файла.

    За да създадем все пак някаква страница, ще ни трябват още 2 файла, к нямат пряко отношение към принципа, който ще ви покажа:

    head.php и bottom.php

    ПЪРВА СТЪПКА:
    Създаваме файла menu.php

    Неговото съдържание започваме със създаването на 2 масива – $link[] и $name[]. Имената и на 2-та са произволни, можете да си ги смените, ако искате 🙂

    <?
    $link[]="home.php";
    $link[]="page_2.php";
    $link[]="page_3.php";
    $link[]="about_us.php";
    $link[]="contact.php";
    
    $name[]="Начало";
    $name[]="Втора страница";
    $name[]="Трета страница";
    $name[]="За нас";
    $name[]="Контакти";
    ?>

    В тях, както виждате поставяме за елементи имената на файловете и имената на линковете. Бихте могли да премахнете

    разширението от имената на файловете, ако всички са PHP-файлове, но ако не сте сигурни дали по-нататък няма да използвате и HTML-файлове, по-добре имената да са пълни.

    В моя случай, масивите са описани като стандартни променливи, но бихте могли да ги създадете и линейно с array(); Видът им има само естетическо значение. По-важно е, индексирането на елементите в тях да започва от 0 (нула). защо – ще видите по долу.

    Дотук имаме 2 масива. От тях ще изградим менюто:

    <?
    $self=$_SERVER['PHP_SELF'];
    $kolko=count($link);
    
    
    for($i=0; $i<$kolko; $i++)
    {
    $class="cheren";
    
    if($i==$page){
    $class="red";
    }
    
    $name_list=$name[$i];
    
    $menu_list.="<A CLASS=\"$class\" HREF=\"$self?page=$i\">$name_list</A><BR>";
    }
    ?>

    Чрез фор-цикъл обхождаме масивите и поставяме връзка (анчър) със следното съдържание:

    <A CLASS=“класът от стиловия шаблон“ HREF=“адресът на основния файл + ГЕТ-променлива, наречена $p, на която присвояваме стойността на $i от текущата итерация на цикъла“>името на връзката, напр „За нас“</A>

    Всички връзки се събират в една променлива $menu_list, чиято стойност ще принтираме с echo(); където решим.
    Другата важна променлива, к сме получили е за броя на елементите в масива – $kolko. За да не ги търсим отново по-нататък, добре е да не я забравяме.
    И с това приключваме менюто.

    ОСНОВЕН ФАЙЛ:

    Нашия основен файл ще е index.php.

    Ето и неговото съдържание:

    <?
    if(isset($_GET['page']))
    {
    $page=intval($_GET['page']);
    }
    else
    {
    $page=0;
    }
    
    
    include('menu.php');
    
    include('head.php');
    
    
    
    if($page<=$kolko)
    {
    $file=$link[$page];
    }
    else
    {
    $file=$link[0];
    }
    include($file);
    
    include('bottom.php');
    ?>

    С index.php приключихме най-важното – принципа, по който свързваме пряко менюто със съдръжанието.
    Какво точно правим в него?

    С първия Иф-оператор:

    if(isset($_GET[‘page’]))

    проверяваме за изпратена променлива в УРЛ-адреса. В нашия случай $page. Ако има изпратена, я приемаме, валидирайки я с intval();
    Функцията служи за преобразуване на стойност до целочислен вид, но в този случай, ще ни спести грешки и ще предпази нашия скрипт от манипулации. Достатъчно е да се отбележи, че функцията връща число: нула, ако стойността е низ (текст) или цяло число, ако стойността е дроб.
    Нашия масив е цифров, индексиран от 0. За да разберем кой файл да включим, разчитаме на масива и стойността на $page, която трябва да е цяло число. intval(); отговаря отлично на нашите нужди. (Повече по темата за защитата ан скриптовете в урока на Жоро за кавичките.)

    В случай, че нямаме изпратена променлива, задаваме стойност на $page –> 0. Това отговаря на първия елемент от нашия масив, а именно хоум-страницата.

    Във втория иф-оператор:

    if($page<=$kolko)

    проверяваме дали $page не е по-голяма от броя на елементите в нашите 2 масива. Ако отговаря на условието, извличаме името на файла за включване от масива $link[]:

    $file=$link[$page];

    Ако условието е невярно, т.е. стойността на $page е по-голяма от броя на елементите, значи потребителя е манипулирал адреса и тогава отново зареждаме файла, описан в първия елемент на масива:

    $file=$link[0];

    В нашия случай, включваме отново home.php

    А ето и самото включване, което е стандартно:

    include($file);

    Сигурно забелязвате, че инклудваме менюто преди главата на документа. Това не е грешка. Ако си спомняте, събрахме цялото меню в една променлива – $menu_list, така че ще я принтираме в head.php.

    Преди това обаче да създадем файловете за включване:

    home.php:

    Добре дошли!
    <BR><BR>Това е първа страница. За да навигирате свободно, използвайте връзките в ляво!

    page_2.php:

    Втора страница!
    <BR><BR>Това е втора страница.
    <BR>Дрън-дрън...
    <BR>Дрън-дрън...
    <BR>И т.н....

    page_3.php

    Тази страница е трета!
    <BR><BR>текста се повтаря :)
    <BR>Дрън-дрън...
    <BR>Дрън-дрън...
    <BR>И т.н....

    about_us.php:

    за мен!
    <BR><BR>Описваме нескромно нашата иначе скромна персона :)
    <BR>Дрън-дрън...
    <BR>Дрън-дрън...
    <BR>И т.н....

    contact.php:

    Форма за контакт!
    <BR><BR>Слагате си формата и скрипта за нейната обработка.
    <BR>Тук може да има проблем с екшън-адреса...
    <BR>Бихте могли да го зададете на ръка или да го оставите празен, така че да се събмитва в текущата страница, ако го
    
    обработвате в този скирпт.
    <BR>Или да го образувате динамично.

    А ето и допълнителните файлове:

    head.php:

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
    <TITLE>тестова страница</TITLE>
    
    <style type="text/css">
    <!--
    .cheren { color: #000 }
    .red { color: #800000 }
    -->
    </style>
    
    
    </HEAD>
    <BODY BGCOLOR="#ffffff">
    
    
    <TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100% HEIGHT=100%><!-- Golqma Tablica -->
    <TBODY>
    <TR><TD ALIGN="CENTER" VALIGN="TOP">
    
    
    <TABLE CELLSPACING=0 BORDER=0 CELLPADDING=0 WIDTH=800><!-- Nachalo tablica TQLO -->
    <TBODY>
    <TR><TD WIDTH=800 HEIGHT=100 COLSPAN=3></TD></TR>
    <TR>
    <TD WIDTH=200 ALIGN="LEFT" VALIGN="TOP">МЕНЮ<BR><BR><? echo $menu_list; ?></TD>
    <TD WIDTH=50></TD>
    <TD WIDTH=550 ALIGN="LEFT" VALIGN="TOP">

    bottom.php:

    </TD></TR>
    
    <?
    $godina=date('Y');
    ?>
    
    <TR><TD WIDTH=800 HEIGHT=200 ALIGN="CENTER" VALIGN="BOTTOM" COLSPAN=3>Всички права запазени и дрън, дрън...
    Година: <? echo $godina; ?></TD></TR>
    
    </TBODY></TABLE>
    
    </TD></TR>
    
    </TBODY></TABLE><!-- End Golqma tablica -->
    
    </BODY>
    </HTML>

    Демо ще дам по-късно.
    Ако има въпроси – форума.

    УРОКЪТ Е СПЕЦИАЛНО НАПИСАН ЗА УЕБ-ТУРИСТ!

    По кода има объркани имена на променливи (някои от тях оправих), а и форматирането е ужасно, ще ги оправя. За сега бъдете внимателни, ако ще пробвате скрипта.

    Оставете коментар