Модифікуємо модуль arc_meta
Якось мене запитували, які з плагінів (у Textpattern’і українською звучить — «модулі», так мені більше подобається ) я використовую. Сплило уже багато часу, а я й досі не написав чогось на зразок «Топ-10 модулів для Textpattern», хоча активно використовував добрих кілька десятків. Багато з них доводилось трохи модифіковувати під свої потреби. От наприклад чудовий модуль arc_meta який суттєво спрощує оптимізаторам життя. З повним функціоналом можна ознайомитись на сайті автора, в цьому ж пості я обмежусь лише описом модифікації.
Отож усі ми знаємо, що при виведенні списку публікацій зручно використовувати такзвану посторінкову пагінацію. Тобто виводити по кілька-, кілька-десят публікацій на сторінку розділу, а сам розділ розділяється на підсторінки 1, 2, 3.. і т.д. Актуально, якщо в розділі багато поблікацій, наприклад більше сотні. І досить важливо для сео вказувати унікальні заголовки для таких підсторінок. Та й з погляду користувача це зручно, бачити на якій сторінці ти знаходишся. Раніше я це реалізовував добрячим куском коду з txp-тегами <txp:title>, <txp:site_name>, <txp:section>
і багатьма іншими з конструкціями if
else
і т.п. Воно все звісно працювало, але в плані підтримки і модифікації, а головне наглядності роботи коду, було не дуже ґуд.. Життя полегшилось, коли спробував модуль arc_meta для виведення заголовка сторінки, опису, ключових слів. Крім того, виявилось, що arc_meta може робити ще купу різних «няшностей» типу og:meta_open_graph
, meta twitter_card
і ще багато—багато чого. Але виявився і суттєвий для мене недолік — в <txp:arc_meta_title />
ну ніяк не можна було вивести пагінацію. Тобто якщо ви знаходились в розділі /blog/?pg=2 (на другій сторінці розділу) то в заголовку все одно вказувалось «Блог | ля-ля-ля» і не було мови, щоб втиснути туди якось номер сторінки. Таке мене не влаштовувало, тож прийшлось трохи підредагувати код модуля, чим з вами і ділюсь. Правок зовсім небагато ;)
Отож відкриваємо наш модуль arc_meta («Адмін — Модулі» — хто не знає), клацаєм по заголовку і вуаля, ми можемо редагувати плагін. І так по порядку:
- В функції
arc_meta_title
дописуємо глобальну змінну$pg
. Має виглядати так:global $parentid, $thisarticle, $id, $q, $c, $context, $s, $sitename, $prefs, $pg;
- Після рядка
$meta = _arc_meta();
додаємо умовуif (txpspecialchars($pg) > 1) {$pg = '– '.gTxt('page').' '.$pg;}
Якщо ми на сторінці 2 і більше — робимо змінну $pg такого вигляду «— Сторінка n» ФункціяgTxt('page')
виводить слово «Сторінка» на тій мові, яка у вас вказана для сайту. Можете замінити це будь яким рядком, чи взагалі не використовувати дану умову, тоді модуль виводитиме тільки номер сторінки. - В
$tokens = array
(одразу нижче) додаємо наступне:'_%p_' => txpspecialchars($pg)
Загальний код має виглядати так:
$tokens = array( '_%n_' => txpspecialchars($sitename), '_%t_' => txpspecialchars($prefs['site_slogan']), '_%p_' => txpspecialchars($pg) );
- Тиснемо кнопочку «Зберегти» і вуаля — все майже готово. Тепер ми можемо використовувати token %p в налаштуваннях модуля і на його місці в заголовку виводитиметься «Сторінка 2, 3, ..» чи яка там у вас буде. Якщо ніякої не буде — то нічого не виводитиметься.
- Отож останній крок — йдемо в налаштування модуля arc_meta і вказуєм де ми хочемо бачити наш номер сторінки, якщо він буде. У мене це Section Titles (заголовок розділу) і виглядає він так:
%s %p | %n
. Тобто на місці %p буде номер сторінки. Якщо ви використовуєте пагінацію і для головної (default) сторінки, то не забудьте вказати токен %p і в основних налаштуваннях адмінки.
Це все :) Буду радий коментарям і пропозиціям. А також конструктивній критиці ;)
P.S. To be continued..
- Попередня
- Наступна
Коментарі
Andrey Kravets (Автор) #
Привіт! Додав ще деякі модифікації до цього модуля.. І так поїхали ;)
При використання модуля
tru_tags
(виводить хмару тегів і дозволяє вивід публікацій за тегами) теж варто було б унікалізувати заголовок сторінки з публікаціями за певним тегом. Отож зміни у коді:Після першої нашої умови (див. код в статті вище) дописуємо другу
if ($s == 'tag') {$tag = ' '.tru_tags_tag_parameter();} else {$tag = '';}
(якщо ми знаходимось у розділі публікацій за тегами, присвоюємо змінній$tag
значення назви тега, інакше залишаємо його пустим)Дальше в
$tokens = array
додаємо наступне:'_%x_' => txpspecialchars($tag)
Тепер ми можемо використовувати в налаштуваннях модуля токен
%x
для виводу назви тега в заголовок розділу.В умові
if ($s == 'tag')
вказуємо ваш розділ який ви використовуєте для відображення публікацій по тегах (по замовчуванню це секція tag) або можна написати універсальний кодif ($s == $prefs['tag_section'])
щоб брати секцію тегів з налаштувань базиВіктор #
Textpattern версія 4.6.2.
Щось в цьому рядку не працює :
if (txpspecialchars($pg) > 1) {$pg = ‘– ‘.gTxt(‘page’).’ ‘.$pg;}
виводить лише номер сторінки, ніякі текстові строки не виводить.
В чому може бути проблема?
Andrey (Автор) #
Доброго дня, Віктор! Ну, якщо виводить тільки номер сторінки, то очевидно, що не працює саме функція gTxt(‘page’). Найімовірніше в файлах мовних локалізацій просто немає відповідності значенню “page”. Тобто функція то працює, але виводити нічого :)
Вихід – добавити переклад в файл локалізації самостійно. Або замінити функцію gTxt(‘page’) на будь-який необхідний вам текст, про що говорилось вище в статті.
Коментувати