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.

Archive /

Our old forums are still available as a read-only archive.

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

Connecting to different databases


Go to End


3 Posts   1919 Views

Avatar
Nadee

Community Member, 12 Posts

2 September 2008 at 10:36pm

Edited: 02/09/2008 10:43pm

Hello,

I have a requirement to connect to different databases depending on a given condition. The condition can be encoded as a part of the URL. I want to use the same CMS code, same template, same page types, etc.; but to connect to a different database.

For example lets say I have a site called http://my_sample_site.com/ and I want SS to use the database 'fruits' whenever the URL http://my_sample_site.com/fruits/ or http://my_sample_site.com/?target=fruits is found. Likewise I may have another database called 'vegetables' whenever SS sees http://my_sample_site.com/vegetables/ or the other variant of the URL. Is this possible by any means?

I can do this by using an HTTP Post variable but then permanent URLs cannot be given.

Tried using Subsites module but no luck. It installs without issues but I don't get the Subsites drop-down on the CMS admin.

Any help is greatly appreciated.

Thanks.

Avatar
Willr

Forum Moderator, 5523 Posts

5 September 2008 at 9:48pm

the best way (and safest) is to use GET variables. As the URL parser has special order eg yoursite.com/ClassName/Action/ID so if you did yoursite.com/fruit/ it would first look for the Page with a url of fruit, then second a class called fruit. But you would probably want to set the DB on a bunch of situations.. So I would suggest have yoursite.com/?d=fruit then in the _config you can do if isset($_GET['d']) $database = ? etc.

Avatar
Nadee

Community Member, 12 Posts

6 September 2008 at 12:38am

Hey Will,

Thanks for the reply. Well, I tried doing that. I modified the .htaccess file to give me the database in the URL with

/sapphire/main.php?db=$1&url=$2&%{QUERY_STRING} [L]
.

Then I added the line to _config.php in mysite to change the baseURL with

Director::setBaseURL(<new base url>)
.

The issue is, it works if you type the URL manually, but SilverStripe doesn't make links to match the new base URL. So it gives a 'page not found' error.

What can I do to remedy this?

Thanks.