Mediawiki内联模板创建
是否可以创建一个wiki页面,将一段文本标记为可放置在wiki上任何其他位置的占位符 假设我有一个包含简单列表的wiki页面。列表中的第一项必须始终显示在主页中,但编辑用户不应为此编辑两页,而应仅编辑一页 列表页:Mediawiki内联模板创建,mediawiki,Mediawiki,是否可以创建一个wiki页面,将一段文本标记为可放置在wiki上任何其他位置的占位符 假设我有一个包含简单列表的wiki页面。列表中的第一项必须始终显示在主页中,但编辑用户不应为此编辑两页,而应仅编辑一页 列表页: Pineapples {{SaveThisText|TodaysMeal|Dumplings}} Beans Oranges 主页: Today, we'll have {{GetSavedText|TodaysMeal}} …主页将显示“今天我们吃饺子” 我知道使用模板可
Pineapples
{{SaveThisText|TodaysMeal|Dumplings}}
Beans
Oranges
主页:
Today, we'll have {{GetSavedText|TodaysMeal}}
…主页将显示“今天我们吃饺子”
我知道使用模板可以做到这一点,但我想避免使用模板,我想编辑模板,就像它是页面的一部分。如果您为其编写MediaWiki扩展,这绝对是可能的。这意味着您可以在
GetSavedText
和SaveThisText
上放置一个钩子,以便可以自定义它们的行为
如果你有一个小wiki,你可以在GetSavedText
搜索{{SaveThisText | TodaysMeal |
时循环浏览每一页。获取每一页都很容易:
// get existing pages
$db = wfGetDB ( DB_MASTER );
$results = $db->resultObject ( $db->query(
"select distinct page_title from {$wgDBprefix}page " )
);
$existing_pages = array();
while ( $r = $results->next() )
$title = Title::newFromText( $r->page_title );
$article = new Article ( $title );
$content = $article->getContent();
更有效的方法是在页面更新上放置一个钩子。如果存在
SaveThisText
,则可以更新数据库表中的一行。无需编写任何自定义PHP即可完成此操作,请参阅:
看起来正是我需要的,我试试看:)