Хлеб. От чего-то ведь должны отваливаться крошки? :)Недавно я потратил кучу времени, чтобы оптимизировать вывод хлебных крошек (breadcrumbs) в одном приложении. Как всегда неожиданно для себя обнаружил что в CakePHP всё уже давно придумано.

Использование хелпера html не часто встречается в русскоязычных блогах. Вместо этого используют разные велосипеды. Они, несомненно хороши, однако я всё-таки склоняюсь к оригинального метода.

Что есть? Есть древовидная структура категорий реализованная при помощи поведения Tree. Если вы не в курсе – очень советую, хорошая штука в которой реализована куча разных методов для управления древовидными структурами.

Для начала получим путь к текущему элементу:

       $bread = $this->Category->getpath($parent);
       $this->set('bread',$bread);

В данном примере, $parent – элемент от которого мы ищем путь “домой” и передаём найденные элементы в вид.

<?php 
	foreach($bread as $b) {
		$html->addCrumb(trim($b['Category']['name']),"/URL/".$b['Category']['id']);
	}		
?>
<div class='bread'>
        <?php echo $html->getCrumbs("&raquo;");?>
</div>

В данном примере мы сначала проходим по массиву “крошек” и записываем их во внутренний буфер хелпера ($html->addCrumb). Параметры функции такие же как и $html->link: сначала идёт текст, затем ссылка. Как всегда, можно вместо текста написать что угодно: картинку,объект, скрипт и т.д.
После этого содержимое буфера выводится в страницу echo $html->getCrumbs(” ? “). Единственный параметр этого метода – разделитель между “крошками”.
Далее вы можете выводить “крошки” в любом месте страницы, не заполняя буфер снова.
Единственная проблема – отсутствие механизма отчистки буфера. Тут вот пишут как с этим справиться. Вставим этот метод

function clearCrumbs(){
     $this->_crumbs = array();
}

в /cake/lib/view/helpers/html.php к примеру перед этой строчкой

/*** Adds a link to the breadcrumbs array.

И в том месте, где хотите очистить буфер используйте $html->clearCrumbs();

This entry was posted on Tuesday, December 30th, 2008 and is filed under cakephp, PHP-разработка. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

4 Responses to “Хлебные крошки в CakePHP”

  1. Классная идея – получать путь для хлебных крошек в моделях. Респект.

  2. Спасибо, мне тоже кажется это более идеалогически правильно :) С Наступающим Вас :)

  3. addCrumb($b['Category']['name'],"/URL/".$b['Category']['id']);
    }
    $html->addCrumb($productName,"");
    ?>
    getCrumbs(" → ");?>

    Этот код мне вообще не понятен где он расположен и где его оставщаяся часть????

  4. Прошу прощения, ког порезался. Исправил, смотрите в тексте.
    Распологаеться он там, где вы хотите вывести крошки. Я, к примеру, использую в начале вида просмотра продукта (оттого в примере используются категории).

Leave a Reply

free counters

Designed by Gabfire
Rambler's Top100