Хлебные крошки в CakePHP
"Хлебные крошки" - это удобный способ навигации, который к тому же даёт понять текущее положение на сайте. Для моего текущего проекта этот способ очень упрощает использование. Я задумался, как сделать это наиболее красиво в CakePHP.
На Bakery нашёл только этот ужас. К тому же, это больше подходит под Element, а не Helper. Если сделать Element, то во View можно будет писать
Это значит, что мы находимся в разделе "SiteGroup / Site / Page", причём на SiteGroup и Site можно перейти, нажав на ссылки.

Меня наши верстальщики умудрились достать по поводу корректости кода, разделения контента и представления. По их мнению, это список, а список делается с помощью ul-li, а не просто через пробел. Поэтому получается такой Element:
app\views\elements\breadcrumbs.ctp
Можно было бы обойтись без обрамляющего div, но он оставлен для универсальности на случай сложной кроссбраузерной вёрстки. Теперь осталось сделать CSS, чтобы "хлебные крошки" выводились слева направо, а не сверху вниз.
-
#breadcrumbs {
-
color: #333;
-
padding: 0;
-
margin-bottom: 15px;
-
font-size: smaller;
-
}
-
-
#breadcrumbs ul {
-
margin: 0;
-
padding: 0;
-
display: inline;
-
}
-
-
#breadcrumbs ul li {
-
margin: 0;
-
padding-left: 2px;
-
border: none;
-
list-style: none;
-
display: inline;
-
}
-
-
#breadcrumbs ul li a {
-
text-decoration: none;
-
}
-
-
#breadcrumbs ul li a:hover {
-
text-decoration: underline;
-
}
Этот CSS подключается после стандартного cake.generic.css.
имхо пока
т.е. пока нет отделения бизнес логики от представления проект мертв (
опять же мое мнение . это к смарти тоже касается.
@интернет бизнес: Что?
ИМХО, "интернет бизнес" - бот
Владимир, почему вы решили не делать "хлебные крошки" хелпером?
Helper - это дополнительный модуль, который надо подключать. Я обычно делаю Helpers для больших функций с private методами или набора хотя бы трёх public методов. А для такой мелочи Element, IMHO, самое оно.
Кстати, Helper был бы кстати, если бы был стандартный одинаковый CSS. А так как в нашей компании HTML+CSS+JS я пишу очень редко, то я слабо влияю на стандартность.
В принципе верное, ИМХО, "хлебные крошки" вообще должны быть в системе на уровне ядра, но это ИМХО
А на счет единой структуры, то в 99% случаев "хлебные крошки" это не маркированный список. А CSS & JS должны идти отдельно, так что можно сделать и хелпером. =)
Красивый код пишешь, Владимир!
РЕспект
Читаю и учусь
@larin: А как это на уровне ядра? В смысле, как $form? Но ведь это не такая уж и стандартная штука. В CakePHP даже меню не на уровне ядра, а ведь по меню намного меньше разногласий, что это точно список
Мне кажется, что в ядро должно быть вкючены только стандартные сложные вещи вроде форм, сессий, отправки e-mail. А для всякие визуальные удобности, которые у всех разные, должны быть легко для себя один раз написаны и потом постоянно использоваться, меняя только параметры и CSS. А то получится какая-то Symfony
Кстати, в большинстве случаев я не призываю напрямую пользоваться моим кодом - просто показываю как с Cake всё легко делается. И мои "хлебные крошки" могут натолкнуть кого-то на мысль как сделать свою навигацию, например, то же меню.
Как это не такая стандартная? Ее по-моему нет только в блогах и то не во всех. А вообще делайте ее для себя стандартной и пользователи вам скажут спасибо.
Меню не включено, потому что меню может разделяться, так сказать на несколько блоков, и тогда стандартность исчезает... А хлебные крошни ИМХО, должны быть на каждом сайте и их устройство полностью инвариантно.
Я тоже юзабилист ещё тот и сам знаю, что хлебные крошки нужны
Но, во-первых, это не догма - они нужны не всегда, иногда они только мешают. Вот, например, сайт, который мы когда-то давно делали - http://www.simoniz.ua/rus/ . Там хлебные крошки совсем не подходят. Конечно, можно сказать, что это же не "веб-приложение", а обычный сайт. Но наши "веб-приложения" условно можно поделить на 2 категории - с внешней сложностью на уровне того сайта (самое сложное внутри - пользователи этого не видят) и что-то вроде http://extjs.com/deploy/dev/examples/feed-viewer/view.html (но с на порядок более сложным интерфейсом; там приходится придумывать не хлебокрошечную навигацию). Кстати, CakePHP+ExtJS - это очень круто. В философии обоих фрейморков поощиряется разбивка задачи на много ajax-запросов. Это больше напрягает сервер, но зато меньше кода, проще поддерживать и интерфейс получается более удобным.
В общем, я хотел сказать, мне кажется, CakePHP - это не Drupal и он не должен быть конструктором определённого типа сайтов. Его мощь как раз в его универсальности, на нём можно одинаково просто делать абсолютно разные вещи и при этом не путаться в куче кода ядра, которое сейчас компактное и довольно шустрое. При этом он заставляет делать одинаковые вещи одинаково, а не даёт Zendовскую полную свободу.
Для себя, как эксперимент, делал генерацию breadcrumb от модели/инстанса.
Гораздо приятнее видеть путь не по типам а по реальным данным
Полностью согласен с вашими верстальщиками. Хлебные крошки - это список. Другое дело, что не всегда их можно использовать. Например когда в древовидном каталоге элемент может находится в разных категориях. Когда просматривается подробная информация об элементе, то хлебные крошки становится затруднительно построить.