【问题标题】:Mediawiki: in a link, pass parameter to template mediawiki, without transclusionMediawiki:在链接中,将参数传递给模板 mediawiki,不包含嵌入
【发布时间】:2014-02-01 11:16:36
【问题描述】:

这是一个 wiki 语法挑战!

自从询问Mediawiki: Same section with multiple names (section aliases/synonyms) 以来,我开发了一个更具体的查询,因为我觉得我更接近于一个按我想要的方式工作的解决方案:

我想在链接中将参数传递给模板而不包含整篇文章。

[[ Template:Interrupts Code Examples|pagename={{PAGENAME}} ]]

除了这会创建一个指向名为 pagename=Name_of_page_you're_on 的文章的链接,而不是传递参数。

转入文章,参数传递成功,但我只是想要一个链接将参数传递给模板。

更多上下文,

使用#ifexists 我可以生成一个“代码示例编译”页面,当没有给出名称时,该页面默认为标题为“示例一”和“示例二”的部分,但我也希望它们是部分可链接的并且根据来源的来源显示适当的标题:

"EIMSK" and "Example Two"
"EICRA" and "Example Two"
"Example One" and "PCMSK0"
"Example One" and "PCMSK1"
"Example One" and "PCMSK2"
"Example One" and "PCICR"

这太复杂了,我应该手动编译这些页面吗?这可能吗?

我目前的解决方案是拥有

"PCMSK0"
{{example one code}}
"PCMSK2"
{{example one code}}
"EICRA"
{{example two code}}
etc.

这远非理想,因为那时代码示例页面的编译只是一个giant long mess。

如果有人可以给我一些伪代码,我愿意用 PHP 编写 MediaWiki 扩展。

【问题讨论】:

  • 无论我读了多少次这个问题,我都无法准确理解您要完成的工作。这段代码[[ Template:Interrupts Code Examples|pagename={{PAGENAME}} ]] 创建了一个显示文本为“pagename=...”的链接,我认为这根本不是你想要的,对吧?
  • 对,我正在尝试将参数(当前页面名称)传递给模板(中断代码示例),从而在模板上生成一个名为(页面名称)的部分,以便我可以链接到它。抱歉,不清楚,我想也许我应该用手做,它变得如此复杂!哈。

标签: php syntax parameter-passing mediawiki wiki-markup


【解决方案1】:

注意:这可能只是部分答案。无论如何我都会发布它,以防它有用。

如果您只是尝试使用自定义查询参数链接到 wiki 上的另一个页面,请使用URL data magic words(localurl、fullurl、canonicalurl 等)之一,如下所示:

[{{fullurl:Target page|pagename={{PAGENAMEE}}}} link text]

(注意{{PAGENAME<b>E</b>}}到automatically URL-encode the source page name的使用。)

请注意,生成的链接将被 MediaWiki 视为外部链接,并将被格式化。如果外部链接图标困扰您,摆脱它的一种简单方法是将链接包装在&lt;span&gt; 或&lt;div&gt; 和class="plainlinks"。

可以将所有这些包装在模板中,例如像这样:

页面模板:Fancylink:

<span class="plainlinks">[{{fullurl:{{{1}}}|pagename={{PAGENAMEE}}}} {{{2|{{{1}}}}}}]</span>

这将允许您将链接编写为:

{{fancylink:Target page|link text}}

有关类似模板的示例(尽管顶部添加了额外的花里胡哨),请参见例如Template:Edit on Wikipedia,它链接到在 URL 中添加了 action=edit 参数的页面。

但是,仅此方法不会导致您在链接中传递的 URL 参数 pagename= 被替换为目标页面上的 {{{pagename}}}。要做到这一点,您可能需要编写一个自定义的 MediaWiki 扩展。这应该是可行的,但比仅仅在第一页中创建链接要复杂得多。


或者,考虑到有效参数值的集合似乎是有限的,解决此类问题的“传统”MediaWiki 方法是为每个简单地嵌入共享模板的值创建一个单独的页面,例如:

页面PCICR中断代码示例:

{{Interrupts Code Example One|interrupt=PCICR}}

Template:Interrupts Code Example One 包含实际的示例代码,可能在适当的地方用{{{interrupt}}} 代替了中断名称(或用于things like {{#switch:...}})。对于create the individual pages,如果有很多,你可以使用bot或维护脚本importTextFile.php或edit.php。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多