【发布时间】:2017-11-21 03:57:57
【问题描述】:
我在 SilverStripe 将外部 URL 视为相对链接时遇到问题。
我有一个数据对象:
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,而不必担心将 http 或 https 附加到每个 URL。
有人有什么想法吗?这与SilverStripe forums 中描述的问题相同,但尚未发布解决方案。
此站点在 SilverStripe 3.6 上。
【问题讨论】:
-
有一些模块可用于处理这个问题,例如github.com/restruct/silverstripe-namedlinkfield 用于 SS3.0+,github.com/burnbright/silverstripe-externalurlfield 用于 SS4。你基本上需要验证
Website的内容并在保存之前修改它。 -
是的,要么
onBeforeWrite确保协议存在,要么使用自定义 getter 来添加协议(如果协议不存在)......前者在性能方面会是更好的选择,但它将更改文本字段中的文本。
标签: php html silverstripe