Директива include с переменной страницы не работает внутри разметки

У меня есть некоторые разметки, такие как:

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:) не работает, когда определено в другой разметке.

Как я могу сделать эту работу правильно?

0

Решение

Причина того, что это не работает должным образом, заключается в том, что ваша разметка:

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} является.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]