我遇到SilverStripe将外部网址视为相对链接的问题。
我有一个DataObject:
class Artist extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
'Content' => 'HTMLText',
'Website' => 'Varchar(255)',
);
}
艺术家网站通过<a href="$Website" target="_blank">
呈现。问题是URL被附加到网站的基本URL,因此我们最终会得到:
<a href="mysite.com/www.artistsite.com" target="_blank">
而不是所需的:
<a href="www.artistsite.com" target="_blank">
但是,如果$ Website包含协议(http或https),则链接按预期工作。因此,如果$ Website为http://www.artistsite.com,那么我们得到:
<a href="http://www.artistsite.com" target="_blank">
此网站包含数百个,最终成千上万个客户维护的艺术家记录。理想情况下,客户端可以粘贴URL,而不必担心每个URL都附加http或https。
有人有什么想法吗?这与SilverStripe forums中描述的问题相同,但没有发布任何解决方案。
SilverStripe 3.6上的这个网站。
答案 0 :(得分:5)
这不是直接的SilverStripe问题。
给出一个包含以下内容的html文档:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="google.com" target="_blank">test</a>
<a href="www.google.com" target="_blank">test</a>
</body>
</html>
所有这些都是作为网站的相对链接打开,而不是外部网址。
请参阅html - links without http protocol
帮助管理员粘贴功能链接是添加onBeforeWrite以测试url是否包含有效协议,如果不包含,则至少自动添加http://。或者使用@wmk自动在评论中建议的模块。