SilverStripe 3.1使用PHP动态更改重定向器的URL slug
作者:互联网
这是我原来的问题SilverStripe 3.1+ Dynamically creating page redirects的扩展
我有一个产品页面网址
a)www.mysite.com/category/subcat/productid
您可以通过单独的重定向器页面访问此页面
b)www.mysite.com/productid
页面’a’包含可以通过访问的标签
c)www.mysite.com/category/subcat/productid/tabid
我想使用PHP为每个产品页面动态创建链接/重定向器,以便可以通过以下方式访问它:
1)仅使用’b’中显示的’预测’的短URL(我可以通过创建页面重定向器来实现这一点,但这对于大量产品来说是长篇大论.
2)为每个标签链接创建一个简短的URL,因此’c’将从以下位置重定向:d)www.mysite.com/productid/tabid
‘tabid’可以是硬编码的,在我的例子中可能是:音频,视频,图片,固件
目前使用我的ProductPage.php中的代码
class ProductPage_Controller extends Page_Controller {
private static $allowed_actions = array(
'audio',
'pictures',
'firmware',
'videos',
);
public function audio() {
$this->redirect($this->Link().'?tab=audio');
}
public function pictures() {
$this->redirect($this->Link().'?tab=pictures');
}
public function firmware() {
$this->redirect($this->Link().'?tab=firmware');
}
public function videos() {
$this->redirect($this->Link().'?tab=videos');
}
允许我从/ video转到/?tab = video但这当然不会缩短我所追求的最终结果的URL.
可能这可以在RedirectorPage.php的扩展中完成吗?
解决方法:
一种方法是使用onBeforeHTTPError404在调用404错误时挂钩并重定向找到的任何产品.
我们使用onBeforeHTTPError404函数创建ProductRedirectExtension.当找不到页面时,但在系统返回404错误之前,将调用此函数.此处的代码将检查ProductPage是否存在URLSegment以及用户URL字符串的第一部分.如果找到ProductPage,我们检查用户的URL字符串的第二部分是否是标签关键字之一.之后,用户被重定向到页面.
ProductRedirectExtension.php
class ProductRedirectExtension extends Extension {
public function onBeforeHTTPError404( $request ) {
$urlSegment = $request->param('URLSegment');
$action = strtolower($request->param('Action'));
$page = ProductPage::get()->filter('URLSegment', $urlSegment)->first();
if ($page) {
$link = $page->Link();
if ($action == 'audio' || $action == 'pictures' || $action == 'firmware' || $action == 'videos') {
$link .= '?tab=' . $action;
}
$response = new SS_HTTPResponse();
$response->redirect($link, 301);
throw new SS_HTTPResponse_Exception($response);
}
}
}
我们使用以下配置设置启用此扩展.
config.yml
RequestHandler:
extensions:
- ProductRedirectExtension
ContentController:
extensions:
- ProductRedirectExtension
ModelAsController:
extensions:
- ProductRedirectExtension
标签:silverstripe,php,redirect 来源: https://codeday.me/bug/20190824/1704890.html