Не забудьте взяти маркери

Не забудьте взяти маркери

Найчастіше найважливішу частину веб-сайту складають його користувачі. Вони - унікальні особистості, що формують основу процвітаючих співтовариств. Тому життєво важливо підтримувати користувачів і робити контент сайту передбачуваним і персоналізованих.

Одна з найбільших труднощів, з якою при цьому доведеться зіткнутися, - видача користувачам персоналізованої інформації без вставки всюди купи повторюваного коду. Також важливо мати можливість легко виводити унікальні дані в рядки для подальшого відображення користувачам.

На щастя, в друпалі є зручний метод вставки змінних в контент за допомогою модуля Token. На противагу простій заміні рядків, модуль Token пропонує розробникам єдиний метод роботи з рядками, які можуть бути використані в різних частинах системи. Він легко інтегрується з іншими модулями і зменшує загальну кількість вмісту, яке розробнику довелося б розписати для створення персоналізованого веб-сайту.

Переклади це!

Перш ніж зануритися в модуль Token, важливо зрозуміти його роль в екосистемі Друпала. У друпалі є кілька методів заміни рядків, які можуть вам стати в нагоді в залежності від ситуації. Найпоширеніший з них - вбудована в Друпал система перекладу.

Система перекладу дуже проста і застосовується практично повністю через функцію t (). Наприклад, якщо ми хочемо показати користувачу перекладене вітальне повідомлення, можемо зробити так:

Як тільки ми створимо правильні файли перекладів для мови користувача, цей рядок буде переведена. Втім, є одна проблема. Крім мови, тут немає ніякої персоналізації. На щастя, функція перекладу сама вміє проводити заміну рядків!

Тут ми бачимо наш перший токен (@user). Цей рядок в кінцевому підсумку буде замінена ім'ям користувача. Символ на початку токена позначає спосіб фільтрації, використовуваної при вставці рядка (вона допомагає писати безпечний код).

  • !variable - рядок вставляється як є;
  • @variable - рядок проходить через check_plain (), HTML перетворюється в текст;
  • % Variable - рядок проходить через check_plain () і theme_placeholder (), HTML перетворюється в текст, все полягає в теги.
Уважний розробник помітить ще одне обмеження в даному методі: ми не можемо вводити рядки відразу в єдиному і множині. Але в друпалі є метод, що дозволяє легко форматувати рядки у множині за допомогою функції format_plural (). У функції format_plural () @count - спеціальна змінна, вона завжди використовується для підстановки числа, переданого першим аргументом.

Варто зауважити, що ці функції слід використовувати тільки для перекладу інтерфейсу. Перекладні рядки повинні бути статичними (тобто не введеними користувачем). Так чи інакше, ці функції дають можливість писати переказуються на інші мови модулі паралельно з одними рядками.

API модуля Token

API модуля Token - відмінний інструмент для динамічних підстановок в тексті. Він дозволяє розробникам замінювати рядки (звані токенами) змінними даними в межах тексту. Багато вже знайомі з одним видом токенов, які можна спостерігати в модулі user, включеному в стандартну поставку Друпала. Модуль user широко застосовує токени при генерації персоналізованих повідомлень електронної пошти для користувачів. наприклад:

На жаль, оскільки модуль token не входить в ядро ​​Друпала (до Drupal 7), модуль user не може скористатися всіма його перевагами. Ну а як виглядає шматок тексту, коли використовується token?
Скористаємося тим же прикладом з модуля user:

Так навіщо (крім ідеї ефективності коду) робити окремий API для чогось на вигляд вельми незначного? Зрештою, в PHP вже є вбудовані функції заміни рядків і завжди можна вставляти в рядки змінні. Відповідь в тому, що заміна рядків в друпалі - набагато більш просунута, ніж проста підстановка змінної. Використовуючи цей метод, ви отримаєте кілька важливих переваг:

  • Стандартизація - модуль token надає стандартний спосіб створення токенов, простий для розуміння кінцевого користувача.
  • Переносимість - API модуля token дозволяє розробникам як визначати власні маркери, які можна потім використовувати в інших модулях, так і використовувати в своїх модулях чужі токени.
  • Довідка - API модуля token надає списки всіх токенов, доступних на сайті. Це знижує необхідність дублювання коду і створення однакових токенів в різних місцях.
Використання токенів в коді

Досить базікати, пора розпускати руки. Як і з багатьма іншими API, є відмінна причина використовувати API токенов: це надзвичайно легко. Припустимо, ви хочете замінити частини тексту значеннями з об'єкта Ноди:
або в разі нашого повідомлення користувачу

І це все! Модуль token гарний ще й тим, що всі токени, що вважаються глобальними (такі як URL сайту), будуть доступні незалежно від того, якого роду об'єкт використовується для заміни токенов.

Мій власний токен

Що, якщо у вас в модулі є свої дані і ви хочете зробити для них токени?
Це теж дуже просто. Припустимо, у вас є модуль, в якому ви застосовуєте заміну токенів для частин повідомлення електронної пошти. Просто використовуйте hook_token_values.

Тепер користувачам доступні декілька нових токенов. Надати по ним підказки теж дуже просто - за допомогою hook_token_list.

Ось і все, хлопці

На цьому все. Як ви могли помітити, застосувати заміну токенів можна дуже легко і швидко. Якщо хочете вникнути глибше, є кілька додаткових речей для вивчення (таких як модифікація токенов, створених в інших модулях), а документація по API прикріплена до оригінальної замітці (там дурниця, в README.txt модуля token опис краще - прим. Пер.).

Модуль token включений в ядро ​​Друпала 7. що означає підтримку токенов прямо з коробки. Йо Хо Хо! Як ви могли помітити, всі ми схвильовані майбутнім релізом :)

У циклі "20 API за 20 днів" будуть і ще замітки. Не йдіть далеко!

Схожі статті