Менять ссылки на профили пользователей PmWiki?

У меня есть существующий веб-сайт с собственным управлением пользователями, в который я включаю PmWiki.

Поэтому я использую рецепт ExternAuth в PmWiki для обработки моей аутентификации. Это работает нормально, позволяя мне аутентифицировать пользователей на основе переменных сеанса, установленных моей существующей системой аутентификации пользователей.

Однако есть один недостаток: PmWiki на нескольких страницах будет делать ссылки на страницы профиля пользователя. Например, показывая, кто редактировал страницы. Я хотел бы, чтобы эти ссылки вместо того, чтобы указывать на несуществующие Wiki-страницы вида Profiles/UserName указать на мои существующие страницы профиля пользователя.

Есть ли способ изменить способ PmWiki [[~UserName]] ссылки отображаются на странице в виде "внешней" ссылки, например http://example.com/profiles/UserName вместо нормального поведения PmWiki?

2 ответа

Решение

Я думаю, что я понял это для себя... Уловка состояла в том, чтобы использовать команду Разметки, чтобы определить разметку, которая изменила бы ссылки профиля пользователя в то же самое время как другая "встроенная" разметка на внешнюю ссылку. Затем эта ссылка будет позже преобразована в цепочку разметки в реальную ссылку HTML, которая будет указывать внешне.

// Set author information:
$AuthId = $_SESSION['userid'];
$Author = $_SESSION['name'] . ' (userid=' . $_SESSION['userid'] . ')';

// Change the way links to user profiles are shown:
$EnableAuthorSignature = 1; // Allow for ~~~ and ~~~~ markup
$AuthorLink = "[[http://{$_SERVER['SERVER_NAME']}/profiles/{$_SESSION['userid']} | {$_SESSION['name']}]]";
Markup("profilelinks", "inline", "/\[\[~(.*?)\s\(userid=(\d+)\)\]\]/", "[[http://{$_SERVER['SERVER_NAME']}/profiles/$2 | $1]]");

Я не уверен, что это самое элегантное решение, но, похоже, работает...

Оригинальная ссылка автора [[~user]] это определить в script/author.php как:

Markup('[[~','<links','/\\[\\[~(.*?)\\]\\]/',"[[$AuthorGroup/$1]]");

где $AuthorGroup по умолчанию установлено имя группы "Профили".

Вы можете изменить его в соответствии со своими потребностями с помощью:

DisableMarkup('[[~');
Markup('[[~','<links', '/\\[\\[~(.*?)\\]\\]/',"[[($UrlScheme://{$_SERVER['SERVER_NAME']}/profiles/)$1]]");
Другие вопросы по тегам