在我们的一个运行 2.4 的旧站点上发现了一个问题,当用户在 CMS 内容中创建链接,选择要链接到的现有页面时,该链接没有被转换为前端的实际 URL 和所有链接以以下格式通过<a href="[sitetree_link_id=12]">
什么会导致这种情况,我该如何解决?
在我们的一个运行 2.4 的旧站点上发现了一个问题,当用户在 CMS 内容中创建链接,选择要链接到的现有页面时,该链接没有被转换为前端的实际 URL 和所有链接以以下格式通过<a href="[sitetree_link_id=12]">
什么会导致这种情况,我该如何解决?
标签看起来设置不正确。应该是[sitetree_link id=12]
,不是[sitetree_link_id=12]
。
我们后来添加了对解析器的支持,[sitetree_link,id=12]
以便链接不需要包含空格,但我不记得是在 2.4 中还是仅在 3.0+ 中。
您能否确认您的 WYSIWYG 插入是否存在错误_
?如果是这样,您可能需要检查handleaction_insert
函数tiny_mce_imporvements.js
以确认它有这样的一行:
case 'internal':
href = '[sitetree_link id=' + this.elements.internal.value + ']';
如果插入的链接实际上没有错误_
但没有被解析,那么请尝试检查您的 sapphire/_config.php 文件:
ShortcodeParser::get('default')->register('sitetree_link', array('SiteTree', 'link_shortcode_handler'));
如果您的网站对所有内容进行了更改,ShortcodeParser
您可能无意中关闭了sitetree_link
支持。
如果所有这些看起来都井井有条,那么可能由于某种原因没有调用 ShortcodeParser。在HTMLText::forTemplate()
中,放置一个调试语句(我喜欢die("I got here!");
)以确认 HTMLText::forTemplate() 实际上被调用了。如果不是,您可能需要在对 Content 变量进行一些预处理时手动调用它。而不是这个:
$content = $this->Content;
做这个:
$content = $this->obj('Content')->forTemplate();
我希望其中一个答案有所帮助。无论哪种方式,如果您可以回帖,那就太好了,这样我们就可以隔离造成这种情况的原因。它可能有助于我们使 API 在 SilverStripe 3.1 中更易于使用。