Щось мене хакнуло

Ну не мене хакнуло, а сайт. Але, враховуючи те, що я потихеньку стаю кіборгом, мені теж було трохи «нездорово».

Вчора.
Я якраз збирався відповісти на коментар і тут раптом сайт підвис.
Потім з’ясувалося, що не зовсім завис, а просто затримки виводу сторінки хвилинами міряються.
Виявилося, у php-файли тем WordPress подописувано по кілька кілобайт якихось дурниць. Після вирізання цих дурниць все запрацювало.

Судячи з часу модифікації файлів тем, відбулося це через малий час по тому, як я оновив один з плугінів.
«Після» — не означає «з причини», тому сам плугін не називаю. Треба ще розбиратися.
Але поки-що я його вимкнув 🙂

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.

[flagcounter image]