背景:在 WAMP 堆栈上使用 MediaWiki 1.19.1、Graphviz 2.28.0、Extension:GraphViz 0.9(Server 2008、Apache 2.4.2、MySQL 5.5.27、PHP 5.4.5)。对于使用 MediaWiki 中的 GraphViz 扩展从 Graphviz 图中呈现可点击图像的基本功能,一切都运行良好,并且符合预期。
问题:图像映射中的链接未添加到 MediaWiki 页面链接表中。我明白为什么不添加它们,但如果无法使用“这里有什么链接”功能来跟踪链接,这将成为一个问题。
所需的解决方案:在处理 GraphViz 扩展中的图表期间,我想使用生成的 .map 文件然后创建一个 wikilinks 列表以添加到页面上,以便被 MediaWiki 拾取并添加到 pagelinks 表中。
详细信息:此 GraphViz 扩展代码:
<graphviz border='frame' format='png'>
digraph example1 {
// define nodes
nodeHello [
label="I say Hello",
URL="Hello"
]
nodeWorld [
label="You say World!",
URL="World"
]
// link nodes
nodeHello -> nodeWorld!
}
</graphviz>
生成此图像:
并且此图像映射代码在服务器上相应的 .map 文件中:
<map id="example1" name="example1">
<area shape="poly" id="node1" href="Hello" title="I say Hello" alt="" coords="164,29,161,22,151,15,137,10,118,7,97,5,77,7,58,10,43,15,34,22,31,29,34,37,43,43,58,49,77,52,97,53,118,52,137,49,151,43,161,37"/>
<area shape="poly" id="node2" href="World" title="You say World!" alt="" coords="190,125,186,118,172,111,152,106,126,103,97,101,69,103,43,106,22,111,9,118,5,125,9,133,22,139,43,145,69,148,97,149,126,148,152,145,172,139,186,133"/>
</map>
从该图像映射文件中,我希望能够提取 href 和标题来构建 wikilinks,如下所示:
[[Hello|I say Hello]]
[[World|You say World!]]
我猜想,因为那个 .map 文件本质上是 XML,所以我可以使用 XPATH 来查询文件,但这只是一个猜测。PHP 不是我最擅长的领域,我不知道使用 XML/XPATH 选项的最佳方法,或者这是否是从文件中提取该信息的最佳方法。
一旦我从 .map 文件中获得了维基链接的集合/数组,我确信我可以破解 GraphViz.php 扩展文件,将其添加到页面的内容中,从而将其添加到页面链接表中。
进展:当我提交问题时,我有一点解决问题的橡皮鸭问题。我意识到,由于我在图像映射中具有格式良好的数据,因此 XPATH 可能是要走的路。能够提取我需要的数据是相当微不足道的,特别是因为我发现地图文件内容仍然存储在本地字符串变量中。
$xml = new SimpleXMLElement( $map );
foreach($xml->area as $item) {
$links .= "[[" . $item->attributes()->href . "|" . $item->attributes()->title . "]]";
}
最终解决方案:请参阅下面我接受的答案。谢谢参观。感谢您提供的任何帮助或指导。