У меня есть некоторые разметки, такие как:
Markup('talk', '<include',
'/\\(:talk:\\)/i',
'MarkupTalk');
function MarkupTalk($m) {
return 'Talk page: (:include {$BaseName}-talk:)'
}
но когда я использую это, это ничего не делает!
Example text (:talk:) more text
выходы
<div id="wikitext">
<p>Example text Talk page: more text</p>
почти как если бы (:include:)
директива это комментарий! Это похоже на (:include:)
не работает, когда определено в другой разметке.
Как я могу сделать эту работу правильно?
Причина того, что это не работает должным образом, заключается в том, что ваша разметка:
talk <include B>=><
оценивается после одной из его зависимостей:
{$var} >$[phrase] B=>>
Чтобы это исправить, вы мог изменить, когда ваша разметка оценивается:
Markup('talk', '<{$var}',
'/\\(:talk:\\)/i',
'MarkupTalk');
но это может быть нежелательно, если у вас есть какая-либо разметка, которая выводит («зависит от») вашу. Вместо этого вы можете изменить свою функцию, чтобы использовать PageVar()
функция, как указано в PmWiki.PageVariables, вот так:
function MarkupTalk($m) {
global $pagename;
$pagename = ResolvePageName($pagename);
return 'Talk page: (:include '. PageVar($pagename, '$BaseName') .'-talk:)'
}
Это удаляет {$var}
как зависимость и позволяет безопасно оценивать вашу разметку после {$var}
является.
Других решений пока нет …