CMS своими руками. Навигационная цепочка

Дата: Апрель 17, 2009

(8) комментариев

Очень часто на сайтах включается такой компонент навигации по сайту как навигационная цепочка или иначе «хлебные крошки». Почему-то многие ею не пользуются, возможно по незнанию, хотя вещь очень полезная. Выглядит она обычно так:
Главная > О нас > Тест
Хлебными крошками она называется потому, что по ней можно вернуться назад к предыдущему разделу.
Ну а теперь о написании подобной вещи.
Для того, чтоб цепочка работала у нас в каждой папочке должен лежать файл с именем .section.php
с текстом:

1
2
<?php
$sSectionName = "Имя разд

Именно этот файл будет отвечать за корректное подписывание разделов.
Для начала нам необходимо получить текущую директорию. и разбить на массив с названиями папок. Сделаем мы это следующим кодом:

1
2
3
4
5
6
$tmp=$_SERVER['REQUEST_URI'];
if ($_SERVER['REQUEST_URI']!=="/") {
    if(substr($tmp, strlen($tmp)-1, strlen($tmp))=="/") $tmp=substr($tmp, 1, strlen($tmp)-2);
    else $tmp=substr($tmp, 1, strlen($tmp)-1);
}
if($tmp=="/") $aSections=array(); else $aSections=explode("/", $tmp);

На выходе мы получим массив $aSections в котором будет храниться список папок. Теперь нам необходимо создать новый массив, который будет содержать асоциированые заголовки с путями, которые мы будем выводить.

1
2
3
4
5
6
7
8
9
10
11
if(!(@include($_SERVER['DOCUMENT_ROOT']."/.section.php"))) $arResult[0]=array("TITLE" => "Home", "LINK" => "/");
else $arResult[0]=array("TITLE" => $sSectionName, "LINK" => "/");
if(!empty($aSections))
{
    $tmp="/";
    foreach($aSections as $key=>$value) {
        $tmp.=$value."/";
        if(!(@include($_SERVER['DOCUMENT_ROOT'].$tmp.".section.php"))) $arResult[$key+1]=array("TITLE" => $value, "LINK" => $tmp); else
        $arResult[$key+1]=array("TITLE" => $sSectionName, "LINK" => $tmp);
    }
}

Этот код сформирует уже нужный нам массив данных, его исходный вид будет приблизительно такой

Array (
[0] => Array (
[TITLE] => Главная,
[LINK] => /
),
[1] => Array (
[TITLE] => О нас,
[LINK] => /about/
),
[2] => Array (
[TITLE] => Тест,
[LINK] => /about/test/
)
) 

Теперь нам необходимо вывести полученный массив в виде цепочки навигации.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if(empty($arResult))
    echo "";

$strReturn = '<ul style="list-style:none;display:inline;">';

for($index = 0, $itemSize = count($arResult); $index < $itemSize; $index++)
{

    if($index > 0)
        $strReturn .= '<li style="list-style:none;display:inline;"><span>&nbsp;&gt;&nbsp;</span></li>';

    $title = $arResult[$index]["TITLE"];

    if($arResult[$index]["LINK"] <> "")
        $strReturn .= '<li style="list-style:none;display:inline;"><a href="'.$arResult[$index]["LINK"].'" title="'.$title.'">'.$title.'</a></li>';
    else
        $strReturn .= '<li style="list-style:none;display:inline;">'.$title.'</li>';
}

$strReturn .= '</ul>';
echo $strReturn;
?>

Вот и всё :)
приведенная в примере структура папок была такой /about/test/ перейдя по такому урлу вы сможете получить результат как в начале примера

a

    Автор: admin




    8 комментариев на "CMS своими руками. Навигационная цепочка"

    alien сказал:
    23.04.2009

    А если структура сайта такова, что нет разнесения по каталогам и подкаталогам?
    По-моему слишком тут витиевато все сделано, можно проще, например через многомерные массивы.

    admin сказал:
    23.04.2009

    так а в чём проблема то?:)
    тут и так собирается массив, который всегда можно модифицировать. Вообще я щас работаю над задачей как совместить крошки с разделами и одновременно с возможными пунктами из инфоблоков базы.. но это пока в работе

    alien сказал:
    24.04.2009

    просто не понятно, зачем нужен .section.php и сложные обработки директорий)
    Вообще на основе MVC вполне все просто реализуется :)
    Плюс в данном рассмотрении bread crumb являются «надстройкой», тогда как они должны вытекать из построения навигации (динамической) и/или структуры сайта(древовидной)…
    Короче меня пугает ваш код :D

    magistr_bender сказал:
    24.04.2009

    при чём тут mvc вообще? это вообще для сайта визитки написанно. о каком мвц тут может идти речь? или вы мне предложите писать сайт визитку на зенде?)))

    для мвц крошки вообще иначе строятся.. даже принцип иной
    к тому же там ещё отложенные функции применять необходимо…

    это пример для нубосайта!

    alien сказал:
    25.04.2009

    Вот в том то и дело, что для нубосайта это слишком сложно :) )
    Ладно, я ничего не утверждаю, в конце концов это мое субъективное мнение.

    magistr_bender сказал:
    26.04.2009

    в том то и дело, что я недавно делал сайт визитку и мне пригодилось :) вот решил написать об этом.. а вообще для реализации данной технологии в полном объёме просто необходимы отложенные функции :( к сожалению как их реализовать в пхп пока ещё не придумал

    Roman сказал:
    13.01.2010

    Спасибо! очень полезно, данный алгоритм использует Битрикс если я не ошибаюсь.

    Sergey сказал:
    13.01.2010

    не совсем.. битрикс его немного усложнил и сделал чрез отложенные функции (что по моему мнению глупость)

    Продолжение дискуссии на форуме: link


    Вы можете продолжить обсуждение этой статьи на форуме


    Имя : 
    Почта : 
    Сайт : 
    Комментарий : 

    Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.

    Создание сайта - Echo-group Раскрутка сайтов