Machines should work, people should think

Захотілося мені тут додати до посилань іконки, щоб помітніші були. До посилань в межах свого сайту – такі [internal link icon], а до зовнішніх – такі [external link icon].
Початок зрозумілий, робимо картинки і додаємо до стилю класи посилань

.linkext {
    background:transparent url(/files/images/linkext.png) no-repeat scroll right center;
    padding:2px 15px 2px 0px;
}

.linkint {
    background:transparent url(/files/images/linkint.png) no-repeat scroll right center;
    padding:2px 15px 2px 0px;
}

Але далі треба пройтися по всіх посиланях і додати до них відповідні класи… Невже оце сидіти і редагувати? Адже “працювати мають машини, люди повинні думати”. Особливо приємним цей девіз стає, коли хтось вже подумав за тебе ;-) і створив для WordPress модуль, який при генерації сторінок “на льоту” заміняє текст, викориcтовуючи регулярні вирази (regular expressions).
При наявності такого інcтрументу самому треба думати мало, оскільки всі внутрішні посилання я відразу писав відносними, без http://.
Залишається лише встановити модуль re.place та прописати в ньому два простих правила. Одне має підставляти class="linkext" в зовнішні посилання, заміняючи

<a *href=("http[^>]*)>

на

<a class="linkext" href=\1>

а друге – підставляти class="linkint" у внутрішні посилання заміною

<a *href=([^>]*)>

на

<a class="linkint" href=\1>

Для того, щоб ці дві заміни працювали правильно, необхідно для другого правила дати більший номер порядку виконння (order), тоді після виконання першого правила зовнішні посилання вже матимуть приписаний клас і не розпізнаватимуться зразком <a *href=([^>]*)>.
В зразках є символи < та >, тому для правильного відображення списку правил не забудьте в налаштуваннях re.place в List view options виставити Escape HTML characters.

Leave a Reply

[flagcounter image]