Як зробити хлібні крихти на php

Сьогодні ми поговоримо про те, як зробити «хлібні крихти» на PHP своїми руками.
Завдання досить поширена і досить проста з точки зору реалізації. В якості вступу розглянемо, що ж таке «хлібні крихти» і навіщо вони потрібні.
А також зробимо постановку задачі і сформуємо чіткий алгоритм, на якому буде грунтуватися наша подальша реалізація.
Отже, поїхали
Що таке «хлібні крихти» на сайті?
Відразу хочу сказати, що це не те, про що подумало більшість людей, не пов'язаних з веб-програмуванням
Саме тому деякі свідомі автори роблять висновок дану фразу в лапки, щоб не вводити в оману користувачів комп'ютера та Інтернету, а також початківців сайтостроителей, яким часто-густо рекомендують робити їх на своїх сайтах.
«Хлібними крихтами» в комп'ютерному світі є сукупність посилань на розділи сайту, каталоги файлових систем та інші сутності, до яких відноситься підсумковий файл або сторінка сайту.
Саме тому синонімами «хлібних крихт» є фрази «навігаційна ланцюжок» і «дублюючі меню», які найбільш повно характеризують даний елемент.
Але вони, по якихось причин (швидше за все, через свою «заумності», але це всього лише моя думка) вони не прижилися, і на сьогодні найпоширенішим і легкозапоминающиеся терміном навігаційного меню є саме «хлібні крихти».
Ви напевно бачили їх на кожному сайті, на якому існує хоча б одна категорія об'єктів. Статей, товарів, неважливо чого, одним словом, мірних одиниць вашого ресурсу, які залежать від типу сайту.
Ухх ... ось це я загорнув Навіть самому стало злегка не по собі від своїх заумності
Але, як не описовий «хлібні крихти», все одно краще один раз побачити, ніж сто разів почути.


Відмінності полягають тільки в кольорі (тут вже кому що подобається) і принцип організації «хлібних крихт» - у мене вони закінчуються заголовком поточної сторінки, а у OZON вони складаються тільки з посилань на батьківські категорії.
Але, незважаючи на ці дрібниці, призначення у них однаково - надання користувачам посилань на розділи, що передують поточній сторінці, щоб можна було без праці потрапити в потрібне місце, аж до головної сторінки.
До речі, «хлібні крихти» також грають важливу роль в SEO-оптимізації сайтів, тому що допомагають роботам пошукових систем більш ефективно індексувати вміст сайту завдяки посиланням на категорії, з яких «крихти» і складаються.
Але, неправильно думати, що навігаційні ланцюжки застосовуються виключно в веб-розробці.
Крім сайтів, даний елемент навігації існує також і в операційних системах (Windows, починаючи з Vista), а також в різних файлових менеджерах (всім відомий Total Commander, наприклад, який запозичив цю фічу у Windows Vista Explorer).
Ось так, наприклад, виглядають «хлібні крихти» в Windows 7:

Оскільки даний проект присвячений веб-розробці, про «хлібних крихтах» ми будемо говорити тільки з точки зору їх застосування на сайтах. Тому, якщо раптом десь ви побачите невеликі нестиковки з їх специфікою використання всередині ОЗ та інших програмних продуктів, прохання не судити строго.
Добре, але звідки ж взялася асоціація навігаційної ланцюжка з «хлібними крихтами», запитають більшість користувачів?
Я сам, коли перший раз почув це визначення, ніяк не міг зрозуміти, що ж мені хочуть сказати? Про які ще крихтах мені розповідають? Навіть найменшого припущення не виникло
Коріння цього терміна, виявляється, йдуть глибоко в фольклор, а саме до казки братів Грімм про Гензель і Гретель, де діти розкидали хлібні крихти, намагаючись по ним знайти дорогу з лісу. Однак, подібність з нашої навігаційної ланцюжком вельми іронічне, тому що в казці крихти скльовували птиці, і діти заблукали.
Однак, якщо згадати сюжет, описаний в першоджерелі, спосіб навігації за допомогою хлібних крихт був другою спробою знайти дорогу додому. Перша, коли діти розкидали каміння, була успішною.
Так що або творець терміна «хлібні крихти» порахував його більш милозвучною (англійською звучить як «breadcrumbs»), або він мав досить своєрідним почуттям гумору
Нам же залишається тільки приймати це як факт.
Кому потрібні хлібні крихти на сайті?
Як випливає з матеріалу вище - всім веб-майстрам, у яких на сайті більше 2 рівнів вкладеності (розділ / стаття або категорія / товар), і хто не байдужий до позицій свого творіння в пошуковій видачі.
При цьому абсолютно не важливо, який у вас тип сайту. Також не важлива платформа.
На чому б не був розроблений ваш сайт - на WordPress, Joomla, ModX, OpenCart, на базі різних фреймворків (Yii, Laravel, Symfony, Zend) або взагалі на «чистих» мовах - всім вам без «хлібних крихт» не обійтися.
Так само не важливий і мову бекенда вашого сайту, на якому, в більшості випадків, breadcrumbs будуть розроблятися.
До речі, якщо вже ми завели розмову про CMS і фреймворки, слід сказати, що практично для кожної платформи вже існує цілий набір готових рішень у вигляді плагінів і модулів, що реалізують функціонал «хлібних крихт».
Я міг би присвятити цьому окремі статті (можливо, що в майбутньому я на це і наважуся), але для початку я вирішив познайомити вас з універсальним варіантом, який підійде для більшості майданчиків.
З цією метою я вирішив розглянути приклад створення «хлібних крихт» на PHP, тому що на сьогодні це найпоширеніший бекенда-мову веб-програмування.
Тому розглянутий приклад і підійде для більшості, а не для всіх сайтів, адже крім PHP ніхто не заважає вам писати сайти на Java, Python, Ruby і інших мовах бекенда.
Але алгоритм, який використовується при побудові «хлібних крихт», все одно буде незмінним.
Ось до нього-то ми нарешті і переходимо.
Створення «хлібних крихт» на PHP - алгоритм
Отже, як говорилося раніше, «хлібні крихти» - це сукупність посилань на попередні сторінки, які, в більшості своїй, є батьківськими категоріями поточної сторінки.
Як правило, вказівка категорій міститься в самому url поточної сторінки. Розглянемо на прикладі даного сайту.
Даний url сторінки зі статтею складається з декількох частин, розділених Слеш ( «/»):
- Корінь сайту (cccp-blog.com)
- Категорія сайту (blogosfera)
- Об'єкт категорії, в нашому випадку стаття (schyotchik-prosmotrov-s-adblock-svoimi-rukami)
Тобто, у міру просування по сайту від його кореня, до url ресурсу постійно додаються частини, відповідні вказівниками на попередні рівні ієрархії.
Такий механізм формування url притаманний для більшості сучасних сайтів, отже, посилання на попередні рівні ієрархії завжди можна отримати з url поточної сторінки.
Отже, складемо алгоритм формування «хлібних крихт»:
- Отримуємо url поточної сторінки;
- Парс його (розбираємо на частини);
- Для кожної частини задаємо назву елемента «хлібних крихт» і складаємо для неї url;
- Записуємо назву елементів і їх url в окрему конструкцію (масив) для передачі в шаблон;
- Передаємо отримані дані в шаблон і відображаємо їх там.
Даний алгоритм, як вже і говорилося, є універсальним, тому що, незалежно від платформи сайту, «хлібні крихти», що виводяться на сторінці сайту, складаються на підставі url цієї сторінки.
Єдиний нюанс - принципи формування url на різних майданчиках відрізняються, але про це ми поговоримо при реалізації нашого алгоритму формування «хлібних крихт» на мові PHP.
Робимо «хлібні крихти» на PHP - постановка задачі
Отже, ми нарешті добралися до самого цікавого
Як наочний приклад ми будемо робити «хлібні крихти» для типового корпоративного сайту, який я розгорнув на швидку року на базі завалявся у мене на комп'ютері шаблону.