Контентный программинг в PmWiki

ПрограммированиеPmWiki характерна тем, что позволяет слегка программировать прямо в контенте страницы. Сейчас мы научимся выводить дату создания этой страницы, причем месяц будет написан русскими буквами и со склонениями.

Для этого, для текущей страницы, нам понадобится активировать поддержку любых HTML-тегов и немного CSS-кода. Создадим файл /local/Cooks.Articles.Kontentnyj-programming-v-PmWiki.php:

<?php if (!defined('PmWiki')) exit();
Markup( "html-$tag",
        '>{$var}',
        '/&lt;(\/?([\w]+)(?![a-z!])(([\'"]).*?\4|.*?)*?)&gt;/ie',
        "'<:block>'.Keep(PSS('<$1>'))"
        );

$HTMLHeaderFmt['styles']['Articles.Kontentnyj-programming-v-PmWiki'] = "
<style>
time {display: none;}
div.time span.m-01:before {content: \"января\";}
div.time span.m-02:before {content: \"февраля\";}
div.time span.m-03:before {content: \"марта\";}
div.time span.m-04:before {content: \"апреля\";}
div.time span.m-05:before {content: \"мая\";}
div.time span.m-06:before {content: \"июня\";}
div.time span.m-07:before {content: \"июля\";}
div.time span.m-08:before {content: \"августа\";}
div.time span.m-09:before {content: \"сентября\";}
div.time span.m-10:before {content: \"октября\";}
div.time span.m-11:before {content: \"ноября\";}
div.time span.m-12:before {content: \"декабря\";}
</style>";

Решение в виде Wiki-кода:

<time>{(ftime fmt="%d %b. %Y" when={$Created} locale=ru_RU.utf8 )}</time>
<div class='time'>{(ftime fmt="%d <span class='m-%m'></span> %Y" when={$Created} locale=ru_RU.utf8 )}</div>
19 2019

Поясним:

  • здесь тег <time> сделан для поисковиков, визуально он скрыт;
  • активация HTML-тегов нужна в основном для того, чтобы сработала конструкция <span class='m-%m'></span> Можно придумать и какое-нибудь еще альтернативное решение, позволяющая создавать элемент с переменным классом.