如何在Silverstripe中使用$ AbsoluteLink的不同协议

Bar*_*vet 5 php silverstripe

Silverstripe中,模板语法$AbsoluteLink返回页面/对象的完整URL,包括协议和主机:

http://www.example.com/event/ics
Run Code Online (Sandbox Code Playgroud)

我希望能够使用不同的协议调用完整的URL:

webcal://www.example.com/event/ics
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

cry*_*pay 5

在您的页面上创建一个新的getter功能:

public function WebcalLink() {
    $absolute = $this->AbsoluteLink();
    $webcal = str_replace(Director::protocol(), "webcal://", $absolute);
    return $webcal;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用$ WebcalLink从模板中调用它


Liv*_*rce 5

定义一个自定义链接方法,用当前网站协议替换您想要的网站协议.即.

public function WebCalLink()
{
    return str_replace(Director::protocol(), 'webcal://', Director::protocolAndHost()) . $this->Link();
}
Run Code Online (Sandbox Code Playgroud)