Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

create clean url for member or user page


Go to End


6 Posts   1370 Views

Avatar
urd1

Community Member, 9 Posts

28 October 2012 at 9:32pm

Edited: 28/10/2012 9:33pm

Hi,
I really need help for my projects.
Introduce, I've been using silverstripe for about 4 years.
I also had searching of this question but still cant find the answer.

I want to make clean url for member/user page, from:
- www.mydomain.com/user/adam
- www.mydomain.com/user/bob
- www.mydomain.com/user/chris

To:
- www.mydomain.com/adam
- www.mydomain.com/bob
- www.mydomain.com/chris

Should I edit the .htaccess or using $url_handlers on my Page Controller?

Thx and Regards,
Silverstripe Developer from Indonesia
www.crosstechno.com

Avatar
urd1

Community Member, 9 Posts

29 October 2012 at 5:18pm

anyone? :)

Avatar
Willr

Forum Moderator, 5523 Posts

2 November 2012 at 11:42am

Edited: 02/11/2012 11:44am

Unless you knew all the member users and hard coded each in your .htaccess, the best method is to use a custom handleAction() method to check for a member of that username (https://github.com/silverstripe/sapphire/blob/3.0/control/Controller.php#L185)

I should clarify, don't edit that file directly. You can create your custom handleAction in Page_Controller (and use parent::handleAction() to refer to the original function)

Avatar
urd1

Community Member, 9 Posts

2 November 2012 at 3:11pm

Edited: 02/11/2012 3:13pm

Hi Willr,

Thx for your answer.
I've tried that, but still doesn't work.

in the first line of handleAction method:

foreach($request->latestParams() as $k => $v) {
    if($v || !isset($this->urlParams[$k])) $this->urlParams[$k] = $v;
}

for example if the URL is: www.mydomain.com/adam
if we debug the $request or $request->latestParams(), we will never get value of "adam"
$request->latestParams() will return: Action = NULL, ID = NULL, OtherID = NULL

Avatar
kinglozzer

Community Member, 187 Posts

2 November 2012 at 10:21pm

Edited: 02/11/2012 10:50pm

urd1,

I've just been testing this on a site I'm building where I need to remove 'view' from 'xyz.com/projects/view/example-project', in handleAction(), the info I needed ('example-project') was found by doing:

$request->param('Action')

For your example, I believe SilverStripe will think that 'adam' is the action, so you can then check for the existence of a user, then if they don't exist simply call parent::handleAction();

EDIT:

Sorry I've just re-read your post and you aren't getting an action returned. I don't know if it acts differently as you're trying to get the request from the home page, do you have any URL handlers set up or anything that could possibly affect it?

Avatar
urd1

Community Member, 9 Posts

3 November 2012 at 4:32am

Hi kinglozzer,
thx for your answer.

I already knew and i already re-tested your example on my project, still doesn't work.
Your answer is working on the other page except home.
- www.mydomain.com/user/adam => "URLSegment" = about, "Action" = adam
- www.mydomain.com/adam => "URLSegment" = NULL, "Action" = NULL
Can you check again on your project in the home URL?

What i want is:
- www.xyz.com/example-project, not www.xyz.com/projects/example-project
- "example-project" is dynamic value, not some of Page / Page Controller
- "projects" is Page / Page Controller and I don't need that

Thx anyway :)