Jump to content

Multisite


apeisa

Recommended Posts

Are you sure you did everything correct?

I also installed a new latest master PW3.0.123, and added 2 multisites to test. Works fine here. Can you show the config or tell more about what you did?

The allowed httpHosts should be entered in the config as well. And the multisite config is as shown in the readme.

The default 404 page has always been the basic-page template in PW, and the ID is what you enter in the multisite config. This works fine.

  • Thanks 1
Link to comment
Share on other sites

Hi Guys,

I'm looking for a bit of input to find out what might be the best option for what I'm trying to achieve.
What I want to create is one site, approachable from two domains. Domain1 should have the entire
normal processwire site, and domain2 should be an almost exact copy of the original but with slight
differences. 

The things that should be different on domein2:
- On domain1 there are a lot a vacations available, all of these have their own page with all the info
   Including a checkbox field. If this field is checked it should be displayed on domein two otherwise it should be skipped
- Domain2 should have different contact info on the contact page from domain1
- If the data from domain1 changes, this should automatically be reflected in domain2

It feels to me like I wouldn't need a entire MultiSite since I basically would want to show the site exactly as it is on domain1
but with a few conditions. 

I was thinking along the lines of:
redirecting domain2 to domain1, and have the URL mask domain1. And in the template add something like this:

if($_SERVER['SERVER_NAME'] == 'domain2.com'){
   $domain2 = true;
} 

if($domain2 == true && $page->checkbox == 1) {
// show conditional domain2 content
}

 

And for the contact page maybe a second set of fields also embedded into the contact template?
Again if $domain2 == true show the second set, otherwise the original set of contact fields.

Does anyone think this is indeed the way to go, or have any better ideas of how to approach this? ?
Any insights are greatly appreciated ?

Thanks!

Bram

 

Link to comment
Share on other sites

On 3/3/2019 at 2:58 PM, Soma said:

Are you sure you did everything correct?

 

Yes. However, I tried it first on top of a heavily customized site. I guess there were too many hooks or modules etc. that got in the way.

This evening, trying it out on a clean fresh latest dev installation, it works like a charm. ??

Link to comment
Share on other sites

@Soma in your README, at the bottom, you write:
 

Quote

Since the whole concept is all a pretty hack, I found that it comes with some complications that can't be solved in an elegant way. So for example the biggest issue is that you can't crosslink pages via the RTE Link plugin, since it doesn't know about Multisite. So you'll end with wrong URL's when for example you link from a page of one site to a page of another site. If that's an issue it's still possible to copy the ProcessPageEditLink.module and modify the root parent for the page tree select. I'd be glad to help out with an example there.

I was doing a few tests just now. For me, it all works wonderfully (well, at least in a local setup). Did you change something recently in that regard and forgot to edit the readme?
 

Link to comment
Share on other sites

16 hours ago, dragan said:

@Soma in your README, at the bottom, you write:
 

I was doing a few tests just now. For me, it all works wonderfully (well, at least in a local setup). Did you change something recently in that regard and forgot to edit the readme?
 

Yeah that's not anymore. There's a parser on page render now.

Link to comment
Share on other sites

  • 3 weeks later...

The module is working otherwise great (thanks a lot!), but when visiting www. subdomain, the URLs of the rootParent children lack the domain.

$siteRoot = $page->rootParent;
$nav = "";
foreach ($siteRoot->children as $child) {
  $nav .= "<a href='$child->url'>$child->title</a>\n";
}

This produces urls like https://pagename

I can use <a href='/$child->name'> instead to make them work as relative URLs, but it would be nice to know what is going wrong.

Setup:

- Home
  - mysite.com
  - myothersite.com

$config->MultisiteDomains = array(
    "mysite.com" => array(
            "root" => "mysite.com",
            "http404" => 27
        ),
    "www.mysite.com" => array(
            "root" => "mysite.com",
            "http404" => 27
        ),
    "myothersite.com" => array(
            "root" => "myothersite.com",
            "http404" => 1017
        ),
    "www.myothersite.com" => array(
            "root" => "myothersite.com",
            "http404" => 1017
        )
);
$config->httpHosts = array('mysite.com','www.mysite.com','myothersite.com','www.myothersite.com');

If I don't have the separate www. entries in MultisiteDomains, it does not work. It just throws me to the "Home" page, if I try to navigate to www. subdomain.

Link to comment
Share on other sites

  • 1 month later...

Maybe I'm missing something here but I ran into minor problems setting this up for domains that contain a hyphen.

First of all the setup is multisite AND multilanguage.
PW 3.0.130, Multisite Module from Github, 3 domains, 2 languages

Link from ProcessWire Backend: http://abelt.test/en/alexander-abelt.test/ gets wrongly redirected to http://abelt.test/en/alexander- and not to http://alexander-abelt.test/en/.

In this case it's not a real deal-breaker as it's only a setup I need for some of my domains and I know how to work around this but nonetheless I'd like to know if I have to change something or if it is a hiccup here.

Link to comment
Share on other sites

5 minutes ago, wbmnfktr said:

Maybe I'm missing something here but I ran into minor problems setting this up for domains that contain a hyphen.

First of all the setup is multisite AND multilanguage.
PW 3.0.130, Multisite Module from Github, 3 domains, 2 languages

Link from ProcessWire Backend: http://abelt.test/en/alexander-abelt.test/ gets wrongly redirected to http://abelt.test/en/alexander- and not to http://alexander-abelt.test/en/.

In this case it's not a real deal-breaker as it's only a setup I need for some of my domains and I know how to work around this but nonetheless I'd like to know if I have to change something or if it is a hiccup here.

I think this can happen if your multisite root page name has also the domain name in it. You should avoid that. Just rename it to something else

 

On 3/31/2019 at 9:34 PM, Beluga said:

The module is working otherwise great (thanks a lot!), but when visiting www. subdomain, the URLs of the rootParent children lack the domain.


$siteRoot = $page->rootParent;
$nav = "";
foreach ($siteRoot->children as $child) {
  $nav .= "<a href='$child->url'>$child->title</a>\n";
}

This produces urls like https://pagename

I can use <a href='/$child->name'> instead to make them work as relative URLs, but it would be nice to know what is going wrong.

Setup:

- Home
  - mysite.com
  - myothersite.com


$config->MultisiteDomains = array(
    "mysite.com" => array(
            "root" => "mysite.com",
            "http404" => 27
        ),
    "www.mysite.com" => array(
            "root" => "mysite.com",
            "http404" => 27
        ),
    "myothersite.com" => array(
            "root" => "myothersite.com",
            "http404" => 1017
        ),
    "www.myothersite.com" => array(
            "root" => "myothersite.com",
            "http404" => 1017
        )
);

$config->httpHosts = array('mysite.com','www.mysite.com','myothersite.com','www.myothersite.com');

If I don't have the separate www. entries in MultisiteDomains, it does not work. It just throws me to the "Home" page, if I try to navigate to www. subdomain.

My guess is that this comes from the fact you have domain.com and www.domain.com. You want to avoid that, cause the script isn't clever enough to know which is which. In any case you want to avoid having two domains setup for the same site. You should redirect your www to non www or the other way around.

  • Like 1
Link to comment
Share on other sites

4 minutes ago, Soma said:

I think this can happen if your multisite root page name has also the domain name in it. You should avoid that. Just rename it to something else

Ok... I see the problem.

alexander-abelt.test shares one of the other domains abelt.test in it which I can't really avoid as these are or will be my domains (just with another .tld of course) I want to use later on.

As this has no further effects on maintaining content, building menus and whatever so far I guess I can ignore that linking/redirecting issue for now.

Thanks for pointing that out.

Link to comment
Share on other sites

Ah reading againg. 

9 minutes ago, wbmnfktr said:

Ok... I see the problem.

alexander-abelt.test shares one of the other domains abelt.test in it which I can't really avoid as these are or will be my domains (just with another .tld of course) I want to use later on.

As this has no further effects on maintaining content, building menus and whatever so far I guess I can ignore that linking/redirecting issue for now.

Thanks for pointing that out.

Ah reading again, I'm not 100% sure why this happens in your case. (but most likely what i said anyway :)) What is the setup config? And what Module version?

Link to comment
Share on other sites

2 minutes ago, Soma said:

but most likely what i said anyway ?

It works aside from that redirect issue so... I guess I will survive. ? 

2 minutes ago, Soma said:

What is the setup config? And what Module version?

PW 3.0.130, Multisite Module from Github (says 0.1.2), 3 domains, 2 languages on Linux (Ubuntu), Apache 2.4, PHP 7.2

Page tree:

Screenshot-20190507-151451.png.2ed4cfd809345aba190eb75fd278f6e6.png

config.php

$config->MultisiteDomains = array(
    "abelt.test" => array( // domain name is used to map to root page
            "root" => "abelt.test", // page name for the root page
            "http404" => 1031
        ),
    "alexander-abelt.test" => array( // funktioniert nicht mit /en/ auf Home
            "root" => "alexander-abelt.test",
            "http404" => 1029
        ),
    "kettenburg14.test" => array(
            "root" => "kettenburg14.test",
            "http404" => 1030
        )
);

$config->httpHosts = array('abelt.test', 'alexander-abelt.test', 'kettenburg14.test');
// $config->httpHosts = array_keys($config->MultisiteDomains);

 

Link to comment
Share on other sites

4 minutes ago, wbmnfktr said:

It works aside from that redirect issue so... I guess I will survive. ? 

PW 3.0.130, Multisite Module from Github (says 0.1.2), 3 domains, 2 languages on Linux (Ubuntu), Apache 2.4, PHP 7.2

Page tree:

Screenshot-20190507-151451.png.2ed4cfd809345aba190eb75fd278f6e6.png

config.php


$config->MultisiteDomains = array(
    "abelt.test" => array( // domain name is used to map to root page
            "root" => "abelt.test", // page name for the root page
            "http404" => 1031
        ),
    "alexander-abelt.test" => array( // funktioniert nicht mit /en/ auf Home
            "root" => "alexander-abelt.test",
            "http404" => 1029
        ),
    "kettenburg14.test" => array(
            "root" => "kettenburg14.test",
            "http404" => 1030
        )
);

$config->httpHosts = array('abelt.test', 'alexander-abelt.test', 'kettenburg14.test');
// $config->httpHosts = array_keys($config->MultisiteDomains);

 

Yes the problem is most likely that both sites share the same names in it.

abelt.test is in both setups and even in the root name. Just rename the root to something else more unique would do the trick. It's not something you would see anyway. 

"abelt.test" => array( // domain name is used to map to root page
            "root" => "abelt", // page name for the root page
            "http404" => 1031
        ),
    "alexander-abelt.test" => array( // funktioniert nicht mit /en/ auf Home
            "root" => "alexander",
            "http404" => 1029
        ),
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

An additional sitenote here:

Changing the root name to something different than the domain is not enough.
If that page name appears anywhere else at the end of an URL the hiccup is back.

root = abelt
Problematic page URL = /about-abelt/ 
Problematic page URL = /about/abelt/
Working page URL = /about-abelt-whatever/

As to make sure I don't run into any issues with this I changed my root page names to something a cat would write while walking over the keyboard.

An additional sitenote here:

Changing the root name to something different than the domain is not enough.
If that page name appears anywhere else at the end of an URL the hiccup is back.

root = abelt
Problematic page URL = /about-abelt/ 
Problematic page URL = /about/abelt/
Working page URL = /about-abelt-whatever/

As to make sure I don't run into any issues with this I changed my root page names to something a cat would write while walking over the keyboard.

Link to comment
Share on other sites

21 minutes ago, wbmnfktr said:

An additional sitenote here:

Changing the root name to something different than the domain is not enough.
If that page name appears anywhere else at the end of an URL the hiccup is back.

root = abelt
Problematic page URL = /about-abelt/ 
Problematic page URL = /about/abelt/
Working page URL = /about-abelt-whatever/

As to make sure I don't run into any issues with this I changed my root page names to something a cat would write while walking over the keyboard.

An additional sitenote here:

Changing the root name to something different than the domain is not enough.
If that page name appears anywhere else at the end of an URL the hiccup is back.

root = abelt
Problematic page URL = /about-abelt/ 
Problematic page URL = /about/abelt/
Working page URL = /about-abelt-whatever/

As to make sure I don't run into any issues with this I changed my root page names to something a cat would write while walking over the keyboard.

I don't have cats ?

Yes that's true. I know the "redirect if domain name is found in url" would need even a much more sophisticated parsing method, but it gets too complicated for my brain. I think having random strings as root name would be a much easier solution.

  • Like 1
Link to comment
Share on other sites

1 minute ago, Soma said:

I don't have cats

That could become a problem then. You should add it as a requirement to the module nonetheless. ?

2 minutes ago, Soma said:

would need even a much more sophisticated parsing method, but it gets too complicated for my brain.

Not needed when everything was set up correctly with this things in mind. You know about that and do the necessary things. I'm relatively new to this setup and had to work through this. Now I know too.

2 minutes ago, Soma said:

I think having random strings as root name would be a much easier solution.

It is. Actually it could make other things easier when debugging. As I see some weird strings instead of domain(.tld) now I don't falsely think of domain names and such things. I know right away it's something different and where it comes from.

Link to comment
Share on other sites

  • 3 weeks later...

How do you guys handle developing on local machines regarding Multisite? Often I download the production database and I have different config.php, but I'm starting to dislike that approach ? I can off course put all the environment stuff in an .ini and read with parse_ini. 

$config->MultisiteDomains = array(
    'www.realdomain.com' => array(
            'root' => 'www.realdomain.com',
            'http404' => 1045
        ),
    'realdomain.localhost' => array(
            'root' => 'realdomain.localhost',
            'http404' => 1045
        ),
    'www.anotherrealdomain.com' => array(
            'root' => 'www.anotherrealdomain.com',
            'http404' => 1046
        ),
    'anotherrealdomain.localhost' => array(
            'root' => 'anotherrealdomain.localhost',
            'http404' => 1046
        ),
  );

I have a lot of domains in the multisite. Would love to hear your approaches.  

Link to comment
Share on other sites

8 minutes ago, arjen said:

How do you guys handle developing on local machines regarding Multisite? Often I download the production database and I have different config.php, but I'm starting to dislike that approach ?


$config->MultisiteDomains = array(
    'www.realdomain.com' => array(
            'root' => 'www.realdomain.com',
            'http404' => 1045
        ),
    'realdomain.localhost' => array(
            'root' => 'realdomain.localhost',
            'http404' => 1045
        ),
    'www.anotherrealdomain.com' => array(
            'root' => 'www.anotherrealdomain.com',
            'http404' => 1046
        ),
    'anotherrealdomain.localhost' => array(
            'root' => 'anotherrealdomain.localhost',
            'http404' => 1046
        ),
  );

I have a lot of domains in the multisite. Would love to hear your approaches.  

I have a config-dev.php for dev server or local setup. and the "root" stays the same just the domains are different.

  • Like 1
Link to comment
Share on other sites

Ah, the good old -dev approach. That might work here too. I used to have it everywhere, but I've switched to more generic config.php which reads a config.ini which is outside my version control. The big disadvantage here is when you have a lot of customisations in your config.php. Thanks for reminding me.

Link to comment
Share on other sites

We have a local config.env.php file which is read by our general config.php.

Everything that is commun is in config.php, but local settings are kept in config.env.php.

In config.php:

/**
 * Environment configuration file
 * 
 */
$configFile = $config->paths->site . 'config.env.php';
 
 @require_once($configFile);
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

@apeisa @Soma

Just noticed that the modules directory entry for this module still points to the old repository, and also doesn't list Multisite as being PW3.x compatible. Would it make sense to update the entry to point to Soma's repository?

We just did a similar shift for AdminBar, and Adrian made the necessary changes in the modules repo.

Also, I'm currently not entirely sure which branch I should use – last I checked it seemed that "dev" was the one to use, but since then that has apparently been removed (or renamed) and now there are two branches left: master and dev2. Master is the one with most recent updates, so is that preferred over dev2, or vice versa?

Sorry for all the silly questions ?

  • Like 2
Link to comment
Share on other sites

  • 2 months later...
On 7/20/2019 at 10:18 PM, teppo said:

Also, I'm currently not entirely sure which branch I should use – last I checked it seemed that "dev" was the one to use, but since then that has apparently been removed (or renamed) and now there are two branches left: master and dev2. Master is the one with most recent updates, so is that preferred over dev2, or vice versa?

I also have this question. Which is the recommended branch to use? @Soma

Link to comment
Share on other sites

The dev2 I made to the master couple months ago. So the new commit is just a minor addition to the url parser. I think I had difficulties with making the dev2 to master and I couldn't delete the dev2 branch. ?

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...