Silverstripe类似Twitter的url结构
我正在尝试使用silverstripe获得类似twitter的url结构,其中帐户在url根上有自己的url,如: 但也有其他应该可用的路由,比如,不在用户上映射的路由 在控制器上执行类似操作相当容易,但随后您会得到如下结果:Silverstripe类似Twitter的url结构,silverstripe,Silverstripe,我正在尝试使用silverstripe获得类似twitter的url结构,其中帐户在url根上有自己的url,如: 但也有其他应该可用的路由,比如,不在用户上映射的路由 在控制器上执行类似操作相当容易,但随后您会得到如下结果: 是否有可行的方法在站点的根目录上实现此目的?您需要为此定义路由。第一步是定义所有“特殊”的路由,如搜索等。第二步是捕获所有剩余的请求,并将它们转发给处理成员配置文件页面的控制器。例如: --- Name: customroutes After: framework/ro
是否有可行的方法在站点的根目录上实现此目的?您需要为此定义路由。第一步是定义所有“特殊”的路由,如搜索等。第二步是捕获所有剩余的请求,并将它们转发给处理成员配置文件页面的控制器。例如:
---
Name: customroutes
After: framework/routes#coreroutes
---
Director:
rules:
'search' : 'SearchController'
'$Action' : 'MemberProfilesController'
如果您正在使用MemberProfiles模块
未经测试您可以使用
https://github.com/silverstripe-australia/silverstripe-linkmapping
模块。它将设置重定向,使url如http://twitter.com/MyAccountName
将重定向到http://twitter.com/account/MyAccountName
这不是一个完美的解决方案,但会奏效
我在一个网站上使用过它,所以urlhttp://designersplace.com.au/heather-levi-interiors
将重定向到http://designersplace.com.au/designers/profile/heather-levi-interiors
我设置了一个每小时一次的任务来创建/删除这些链接映射。你可以修改它来为你工作
<?php
class ProfileLinkMappingHourlyTask extends HourlyTask {
function process(){
//create link mapping records.
$profiles = DataList::create('Profile')->filter(array('IsPublished' => true));
foreach ($profiles as $p) {
//check if mapping record exists.
if (DataList::create('LinkMapping')->filter(array('MappedLink' => $p->URLSegment))->count() == 0) {
$linkMapping = new LinkMapping();
$linkMapping->MappedLink = $p->URLSegment;
$linkMapping->RedirectType = 'Link';
$linkMapping->RedirectLink = sprintf('designers/profile/%s', $p->URLSegment);
$linkMapping->write();
Debug::dump('Create link mapping: ' . $p->URLSegment);
}
}
//delete un-used link mappings.
$linkMappings = DataList::create('LinkMapping');
foreach ($linkMappings as $lm) {
if (DataList::create('Profile')->filter(array('URLSegment' => $lm->MappedLink))->count() == 0) {
$query = sprintf('DELETE FROM LinkMapping WHERE ID=%d', Convert::raw2sql($lm->ID));
DB::query($query);
Debug::dump('Deleted link mapping: ' . $lm->URLSegment);
}
}
}
}
当然,问题在于系统中有很多默认路由。例如,登录管理员或站点树中定义的页面。这些功能保持正常吗?你可以在yml中设置。e、 g.“之后:cms/modelascontrollerroutes”。您只需确保您的个人资料名称不会与cms的$URLSector谢谢您的想法相冲突。我现在使用一个类似的解决方案,我想摆脱重定向。顾客(和我)不喜欢它。它有一些搜索引擎优化和性能问题。几周前,该系统必须在几分钟内处理90000个请求。也就是说,我们现在正在研究一些改进:-)也许您可以使用linkmappings模块作为工作基础,而不是在找到url时重定向,您可以呈现页面。