Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SilverStripe 3.1+;动态创建页面重定向_Php_Redirect_Url Rewriting_Silverstripe - Fatal编程技术网

Php SilverStripe 3.1+;动态创建页面重定向

Php SilverStripe 3.1+;动态创建页面重定向,php,redirect,url-rewriting,silverstripe,Php,Redirect,Url Rewriting,Silverstripe,我有一个页面类型“ProductPage”,它有导航到的选项卡,如下所示: /ProductPageUrlSegment/?选项卡=视频 /ProductPageUrlSegment/?选项卡=音频 /ProductPageUrlSegment/?选项卡=照片 我希望在创建每个新产品页面时创建重定向,这样,如果您导航到/ProductPageUrlSegment/video,它将转到/ProductPageUrlSegment/?tab=video 所有选项卡都是相同的。我不清楚我应该使用路由还

我有一个页面类型“ProductPage”,它有导航到的选项卡,如下所示:

/ProductPageUrlSegment/?选项卡=视频

/ProductPageUrlSegment/?选项卡=音频

/ProductPageUrlSegment/?选项卡=照片

我希望在创建每个新产品页面时创建重定向,这样,如果您导航到/ProductPageUrlSegment/video,它将转到/ProductPageUrlSegment/?tab=video

所有选项卡都是相同的。我不清楚我应该使用路由还是重定向

我有一个链接到父页面的另一个项目的功能

public function Link() {
    return $this->Parent()->Link() . '#' . $this->URLSegment;
}
我的应该是这样的:

public function LinkVideo() {
    return $this->Link()->'/?=video' . '#' . $this->URLSegment->'/video';
}

我不知道如何解决这个问题,因此任何指导都值得赞赏。

这将通过将URL作为一个操作处理,然后重定向到同一页面,但设置get变量来实现上述目标

class ProductPage extends Page {

}

class ProductPage_Controller extends Page_Controller {

    private static $allowed_actions = array(
        'video',
        'audio',
        'photos',
    );

    public function video() {
         $this->redirect($this->Link().'?tab=video');
    }
    public function audio() {
        $this->redirect($this->Link().'?tab=audio');
    }
    public function photos() {
        $this->redirect($this->Link().'?tab=photos');
    }
}

这将通过将URL作为一个操作处理,然后重定向到同一个页面,但使用get变量set

class ProductPage extends Page {

}

class ProductPage_Controller extends Page_Controller {

    private static $allowed_actions = array(
        'video',
        'audio',
        'photos',
    );

    public function video() {
         $this->redirect($this->Link().'?tab=video');
    }
    public function audio() {
        $this->redirect($this->Link().'?tab=audio');
    }
    public function photos() {
        $this->redirect($this->Link().'?tab=photos');
    }
}

谢谢你的回复!不幸的是,我遇到了这个错误:“尝试打开页面时发生了太多重定向”页面也立即尝试转到“/?tab=video”它只需要转到产品URL,然后才能导航选项卡,并且只有在输入/videos等时才重定向。您的答案适用于其他页面,但不是为我的产品页,所以我必须有东西阻止它工作。。。我接受了你的答案,因为它确实起作用。结果表明,我案例中的一个操作“视频”与我的一个$has_许多关系和网格字段匹配,并且似乎存在冲突,重命名该操作使所有操作都起作用,或者我想我可以更改关系。感谢回复!不幸的是,我遇到了这个错误:“尝试打开页面时发生了太多重定向”页面也立即尝试转到“/?tab=video”它只需要转到产品URL,然后才能导航选项卡,并且只有在输入/videos等时才重定向。您的答案适用于其他页面,但不是为我的产品页,所以我必须有东西阻止它工作。。。我接受了你的答案,因为它确实起作用。结果表明,我案例中的一个动作“视频”与我的一个$has_许多关系和网格字段相匹配,并且似乎存在冲突,重命名该动作使所有动作都起作用,或者我想我可以更改关系。