Недавно я потратил кучу времени, чтобы оптимизировать вывод хлебных крошек (breadcrumbs) в одном приложении. Как всегда неожиданно для себя обнаружил что в CakePHP всё уже давно придумано.
Использование хелпера html не часто встречается в русскоязычных блогах. Вместо этого используют разные велосипеды. Они, несомненно хороши, однако я всё-таки склоняюсь к оригинального метода.
Что есть? Есть древовидная структура категорий реализованная при помощи поведения Tree. Если вы не в курсе – очень советую, хорошая штука в которой реализована куча разных методов для управления древовидными структурами.
Для начала получим путь к текущему элементу:
$bread = $this->Category->getpath($parent); $this->set('bread',$bread); |
В данном примере, $parent – элемент от которого мы ищем путь “домой” и передаём найденные элементы в вид.
addCrumb($b['Category']['name'],"/URL/".$b['Category']['id']); } $html->addCrumb($productName,""); ?> getCrumbs(" → ");?> |
В данном примере мы сначала проходим по массиву “крошек” и записываем их во внутренний буфер хелпера ($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();

