Правильное именование PV (переменных страницы)
Программирование Page Variables - это переменные существующие в контексте текущей страницы. В отличие о php-переменных, они динамически создаются в момент генерации текущей страницы посредством исполнения php-кода и потому могут содержать данные именно этой самой страницы. Другими словами, в конфигурации системы PV содержат не конкретные значения, о валидные php-выражения, которые будут исполнены в контексте обращения к странице. Таким контекстом может быть как простой вывод страницы, так и при ее pagelist'инг. Для создания PV используется массив FmtPV.
Вопросы, на которые отвечает эта статья:
- Почему в дефолтном pmwiki.tmpl вот такой код:
$WikiTitle | {$Group}
? - Здесь сказано: "nearly any PHP global variable that begins with a capital letter can be used in a skin template. Page variables can also be used in templates." Так ли это?
Эти рекомендации вызывают недоумения и сомнения, поэтому давайте проверим экспериментально.
Пусть в config.php исполняется код $test = '1';
Тогда при обработке макета получится:
{$test} -> {1} $test -> 1
Пусть в config.php исполняется код $Test = '1';
Тогда при обработке макета получится:
{$Test} -> пусто! $Test -> 1
Вывод: использование И скобок, И именование с заглавной буквы позволяет обрабатывать конструкцию исключительно как PV - она будет выведена, только если она задана через массив FmtPV, а не просто как переменная PHP.
Также замечен такой эффект:
Пусть в config.php исполняется код $tes = '222';
Тогда при обработке макета получится: $test -> 222t
Итоговые выводы:
- все PV должны называться с заглавной буквы И в макете дизайна вызываться через фигурные скобки;
- осталось неясно, откуда в официальной документации взялось требование "nearly any PHP global variable that begins with a capital letter can be used in a skin template" (поскольку для php-переменных и маленькая буква тоже работает), но, наверное, следует на всякий случай следовать и ему;
- вызывая переменную php, имейте в виду: если по каким-то причинам она окажется не определена, то любая ее подстрока начиная с доллара также будет обработана как php-переменная.