Как стать автором
Обновить

Комментарии 11

О! всегда хотел задать вопрос кохановоду:
как свести повторение кода к минимуму в задаче построения хлебных крошек согласно принципу D.R.Y.?
К примеру сегодня хлебные крошки при заходе в на эту страницу выглядят так:
------------------------------------------------------------------------------------------------------------------------------------
ХабрКоллективные блогиPHP → Знакомство с Kohana 3.0 — Часть 3
------------------------------------------------------------------------------------------------------------------------------------

а завтра потребовалось избавиться от текущей страницы
------------------------------------------------------------------------------------------------------------------------------------
ХабрКоллективные блогиPHP
------------------------------------------------------------------------------------------------------------------------------------

или наоборот, сделать ее ссылкой на саму себя
------------------------------------------------------------------------------------------------------------------------------------
ХабрКоллективные блогиPHPЗнакомство с Kohana 3.0 — Часть 3
------------------------------------------------------------------------------------------------------------------------------------

Как правильно решать такую насущную задачу без тупого копипаста?
Вопрос даже не столько про представление, что тут сложного передал массив (который кстати придется в КАЖДОМ методе контроллера пересобираться заново) и в шаблоне его обработал.
Вопрос — есть ли решение, позволяющее разрешать текущий УРЛ на составляющие и умеющее получать для каждой из частей свой title:
1) Хабр
2) Коллективные блоги
3) PHP
4) Знакомство с Kohana 3.0 — Часть 3

Заметьте, я говорю — решение, а не возможность.

Заранее спасибо :)

P.S.: не знаю почему, но мне кажется что в Kohana, что в CodeIgniter, удачно бы вписался шаблонизатор Twig Template (клон Django-template), с его наследованием, автоматическим экранированием, песочницей, компиляцией в PHP-код и другими вкусняшками.
Готового решения, насколько я знаю, нет. Но и в реализации ничего сложного не вижу: каждый шаг — добавляем свой заголовок, т.е.:

1. Класс Breadcrumbs добавляет в массив свой заголовок (Хабр)
2. Класс TeamBlogs добавляет свой заголовок (Коллективные блоги)
3. Action в TeamBlogs добавляет свой заголовок (PHP)
4. Action добавляет заголовок поста (Знакомство с Kohana 3.0) и, если необходимо, доп. данные (часть 3).

Теперь при выводе можем оформлять как угодно… Или я неправильно понял вопрос?
Увидел стандартное решение: docs.kohanaphp.com/helpers/html#breadcrumb
Значит в каждом action придется перечислять еще и родителей текущей страницы, так как по сути это не ЧПУ, которое является борьбой за чистоту УРЛ, а всего лишь избавление от GET-параметров:
 Array
 (
    [0] => <a href="http://localhost/ajax">Ajax</a>
    [1] => <a href="http://localhost/ajax/welcome">Welcome</a>
    [2] => <a href="http://localhost/welcome/text">Text</a>
 )

т.е. когда страница являются вложенными не только по смыслу (весь сайт/раздел/страница раздела), но и по маршрутизации (по URL: "/" -> "/blogs/" -> "/blogs/post-123/"), а это автоматически означает проблемы при изменении структуры, так как придется руками лазить по всем actions заново разбрасывая «хлебные крошки».

По сути вопрос был таким: можно ли задавать только название текущей страницы, а все остальное чтобы фреймворк сам получал, разбивая текущий урл по слешу
Например для страницы /blogs/post-123/ указывается title = 'Пост №'.$id;
а фреймворк, отсекая до следующего слеша /blogs/ сам получает его title и так далее.

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

Проиллюстрирую на примере лайвстрита:
Есть страница livestreet.ru/page/about/ я подразумеваю, что выполняется
Правило: посетитель всегда должен получить осмысленное и предсказуемое содержимое, если он стер часть адреса до ближайшей косой черты.

т.е. зайдя на страницу livestreet.ru/page/ я получу список всех статичных страниц, например.
Увы — меня ждет там 404.

Или Вы считаете, что ждать подобного от фреймворка — утопия/перфекционизм?
Правило: посетитель всегда должен получить осмысленное и предсказуемое содержимое, если он стер часть адреса до ближайшей косой черты.

Имхо, это правило не имеет за собой ничего. Не стоит так бездумно следовать словам Тёмочки.
Действительно, желательно следить за чистотой ссылки, чтобы лучше смотрелись в поисковиках и когда люди делятся ими друг с другом, но переходят по страницам сайта с помощью удаления куска адреса крайне редко и только мы — люди, тесно связанные с компьютером. Когда кто-то из людей более далёких от компа, видит, как я копаюсь в УРЛе кажется, что они считают, что я занимаюсь шаманством.

Или Вы считаете, что ждать подобного от фреймворка — утопия/перфекционизм?

Имхо, да. Это слишком узкая потребность, как на меня. Тем более, это так просто не сделаешь. Надо парсить адрес, вызывать каждому участку соответствующий контроллер, как-то подстраивать структуру фреймворка.
Если и стоит где-то искать такое, то это в плагинах.
А разве не для этого во всех фрейворках есть routing?
Правило: посетитель всегда должен получить осмысленное и предсказуемое содержимое, если он стер часть адреса до ближайшей косой черты.
=-=
Это откуда такое правило? Первый раз вижу. Тот же Гугл его сплошь и рядом нарушает)
Да и почти никто не будет руками стирать часть адреса
Зачем руками? Клик правой кнопкой мыши по тайтлу в Сафари под Мак. Очень удобно, сам пользуюсь часто.

Например для страницы /blogs/post-123/ указывается title = 'Пост №'.$id;
а фреймворк, отсекая до следующего слеша /blogs/ сам получает его title и так далее.

Или Вы считаете, что ждать подобного от фреймворка — утопия/перфекционизм?

Не хотел бы я, чтобы фреймворк делал подобное за меня. Реализовать подобное можно, но значит придется для каждого контроллера и каждого action-а прописывать в базе свои заголовки. Куча лишней информации и лишних действий.

Правило: посетитель всегда должен получить осмысленное и предсказуемое содержимое, если он стер часть адреса до ближайшей косой черты.

Это относится к результату — готовому сайту.

т.е. зайдя на страницу livestreet.ru/page/ я получу список всех статичных страниц, например.
Увы — меня ждет там 404.

Это ошибка проектирования, а не фреймворка. Уровень /page/ тут просто лишний.
НЛО прилетело и опубликовало эту надпись здесь
Kohanа, да очень легка по коду и очень гибка, не один проект на ней реализовал.
Наконец почувствовал на себе, что значит когнитивный диссонанс.
Сначала объявляем строку:
public $template = 'templates/default';
потом обращаемся к ней как к классу:
$this->template->title = '';
Долго не мог понять в чем дело, пока не залез в днк.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории