Хлеб. От чего-то ведь должны отваливаться крошки? :)Недавно я потратил кучу времени, чтобы оптимизировать вывод хлебных крошек (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();

Bookmark and Share
This entry was posted on Tuesday, December 30th, 2008 and is filed under PHP-разработка, cakephp. 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.
free counters

Designed by Gabfire
Rambler's Top100