Модуль arc_meta

Модифікуємо модуль 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 («Адмін — Модулі» — хто не знає), клацаєм по заголовку і вуаля, ми можемо редагувати плагін. І так по порядку:

  1. В функції arc_meta_title дописуємо глобальну змінну $pg. Має виглядати так: global $parentid, $thisarticle, $id, $q, $c, $context, $s, $sitename, $prefs, $pg;
  2. Після рядка $meta = _arc_meta(); додаємо умову if (txpspecialchars($pg) > 1) {$pg = '– '.gTxt('page').' '.$pg;} Якщо ми на сторінці 2 і більше — робимо змінну $pg такого вигляду «— Сторінка n» Функція gTxt('page') виводить слово «Сторінка» на тій мові, яка у вас вказана для сайту. Можете замінити це будь яким рядком, чи взагалі не використовувати дану умову, тоді модуль виводитиме тільки номер сторінки.
  3. В $tokens = array (одразу нижче) додаємо наступне: '_%p_' => txpspecialchars($pg) Загальний код має виглядати так:
    $tokens = array( '_%n_' => txpspecialchars($sitename), '_%t_' => txpspecialchars($prefs['site_slogan']), '_%p_' => txpspecialchars($pg) );
  4. Тиснемо кнопочку «Зберегти» і вуаля — все майже готово. Тепер ми можемо використовувати token %p в налаштуваннях модуля і на його місці в заголовку виводитиметься «Сторінка 2, 3, ..» чи яка там у вас буде. Якщо ніякої не буде — то нічого не виводитиметься.
  5. Отож останній крок — йдемо в налаштування модуля arc_meta і вказуєм де ми хочемо бачити наш номер сторінки, якщо він буде. У мене це Section Titles (заголовок розділу) і виглядає він так: %s %p | %n. Тобто на місці %p буде номер сторінки. Якщо ви використовуєте пагінацію і для головної (default) сторінки, то не забудьте вказати токен %p і в основних налаштуваннях адмінки.

Це все :) Буду радий коментарям і пропозиціям. А також конструктивній критиці ;)
P.S. To be continued..

Можливо вас зацікавлять подібні статті:

Коментарі

  • Avatar 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']) щоб брати секцію тегів з налаштувань бази

  • Avatar Віктор

    Textpattern версія 4.6.2.
    Щось в цьому рядку не працює :
    if (txpspecialchars($pg) > 1) {$pg = ‘– ‘.gTxt(‘page’).’ ‘.$pg;}
    виводить лише номер сторінки, ніякі текстові строки не виводить.
    В чому може бути проблема?

  • Avatar Andrey (Автор)

    Доброго дня, Віктор! Ну, якщо виводить тільки номер сторінки, то очевидно, що не працює саме функція gTxt(‘page’). Найімовірніше в файлах мовних локалізацій просто немає відповідності значенню “page”. Тобто функція то працює, але виводити нічого :)
    Вихід – добавити переклад в файл локалізації самостійно. Або замінити функцію gTxt(‘page’) на будь-який необхідний вам текст, про що говорилось вище в статті.

Коментувати

Поля позначені як * потрібні обов’язково. Перед постінгом завжди робіть перегляд свого коментаря.