3

I'm in the process of developing 6 sites for a company for their membership associations. While I started with the idea that I would be using MSM (which I wasn't crazy about) to help manage everything, Zoo Visitor is not supported in that environment. So I opted to go with individual sites. The backend of all of the sites is nearly identical, short of the home page (which is managed by Low Variables) and the categories for their resources.

Anyway, we just launched site #2 and the client is already asking about a way to manage content more efficiently. They post several events that are the same across all of the companies, or at least 2-3. So when we are finished that means they will have to post them on six different sites (and update them six times should details change). I had built their current site many years ago (using Classic ASP) and they could add a single event and choose which sites they want to post it to. While the EE route is certainly an upgrade over what they had, they are taking a step backwards in some regards.

While I hadn't tested anything yet, I had considered running all of the sites from a single installation (yes, I understand the licensing issues - I would talk with Ellislab about my options and purchasing multiple licenses). Then I could use a field that allowed me to choose which "site" the content gets published to. This way they could manage everything from a single location, like they had hoped. Another idea was to publish the events to a feed of some sort, then check and pull those into the other sites. But this would mean that one of the individual sites would have to become the "host". If they wanted to convert their parent company site to EE (which they may at some point), then this would be a reasonable option. But in the meantime....

So my questions are:

  • What options do I have when MSM isn't an option?
  • Any suggestions for the best way to post a feed for events (including attachments)?
  • Anyone have a similar experience that they wouldn't mind discussing how they handled it?

Thanks for any feedback!

Todd

3 Answers 3

3

We've done this before using categories and it's worked well for our client and for maintainability.

We set it up all the domains to point to the same docroot (therefore the same EE installation). We then created a category group called "domains", and we make a category in there for each domain we're using. Then in our index.php we have this:

<?
switch ($_SERVER['HTTP_HOST']) {
    case 'domain1.com':
        $assign_to_config['global_vars']['domain'] = 'domain1';
        $assign_to_config['global_vars']['domain_cat_id'] = 1;
        $assign_to_config['global_vars']['domain_low_var'] = 'lv_domain1_hp';
        break;
    case 'domain2.com':
        $assign_to_config['global_vars']['domain'] = 'domain2';
        $assign_to_config['global_vars']['domain_cat_id'] = 2;
        $assign_to_config['global_vars']['domain_low_var'] = 'lv_domain2_hp';
        break;
    // etc...
    default:
        $assign_to_config['global_vars']['domain'] = 'defaultdomain';
        $assign_to_config['global_vars']['domain_cat_id'] = 3;
        $assign_to_config['global_vars']['domain_low_var'] = 'lv_default_hp';
        break;
}
?>

There are a few things going on here:

  1. For each domain we set a global variable called {domain}, which we can reference in templates if we need to use it.
  2. For each domain, we set the category ID from the category we made in the backend.
  3. For each domain, we set the name of the low variable that controls some domain-specific content. You can also do this with an entry_id.

In the backend, when content is published it's categorized with whatever domains it should show on. And then our tags are simple:

{exp:channel:entries
    channel="news"
    category="{domain_cat_id}"
    limit="10"
}
    {title}
{/exp:channel:entries}

The only items that will show up from that tag are items categorized for the current domain. For low variables you can use the various template tags and pass in the var="{domain_low_var}" parameter to get the right content to show.

Let me know if that's helpful and/or you have any questions!

5
  • I have done something very similar to this in the past and it works well for the client. The only thing I would add is that if you are using categories on the site for other things to make sure that your category tag uses the inclusive filtering category="{domain_cat_id}&{cateogories_that_might_be_shared}" instead of the normal category="{domain_cat_id}|{cateogories_that_might_be_shared}" Jan 20, 2015 at 18:45
  • Matt, this is exactly what I was wondering about. Just a couple of questions (for now...) - How many entries would you say this site had? I would assume this would work using something like Zoo Visitor, where I would have a member group for each site? I probably need to test it a little but this sounds like exactly what I am after!
    – Todd
    Feb 2, 2015 at 1:31
  • @Todd We've done this on sites ranging from dozens to low-hundreds of entries. We haven't done this with thousands of entries but I think it would work well. It should work with Zoo Visitor as well, though you'll have to do some custom work if you don't want people being able to log into every site, only one site.
    – Matt
    Feb 3, 2015 at 0:01
  • Hey Matt - We went another way with the client in which the original question was posted. However, I'm going to use it for another client right now. Question - regarding templates and folder structure. Did everything run as it would for a single domain, or did you have a folder for "domain1" (with templates) and another folder for "domain2" (with templates)?
    – Todd
    Aug 20, 2015 at 19:59
  • @Todd we've done both-- either would work!
    – Matt
    Aug 21, 2015 at 20:28
0

Doing each as a subdomain would allow you to run them all legally from a single instance:

  • www.yourdomain.com
  • office1.yourdomain.com
  • office2.yourdomain.com
  • etc..

You can then create groups of users for different sites and assign access to particular channels based on that group

0

I've done this before, but I used MSM for it. But instead of separate channels, entries and fields I used a single site as the 'master' and added checkbox fields for determining which sites an entry should be published on.

I also implemented overrides for most of the content fields, so that content could be slightly different on each site where necessary but fallback to the master content by default (beware though, this is not a very scalable solution, probably not good for 6 sites, but if the content is going to be identical then don't bother). Additionally/alternatively, editors can wrap things in the middle of a sentence with something like <span class="uk_only">UK content only</span> to limit bits of content to a particular site.

It's a good use-case for Switchee. Here's some example template code:

{exp:switchee parse="inward" variable="{global:loc}"}

    {case value="ire"}
        {if ireland_body}
            {ireland_body}
        {if:elseif uk_body}
            {uk_body}
        {/if}
    {/case}

    {case value="can"}
        {if canada_body}
            {canada_body}
        {if:elseif uk_body}
            {uk_body}
        {/if}
    {/case}

    {case default="yes"}
        {uk_body}
    {/case}

{/exp:switchee}

Where the content is identical and you want to use checkboxes/radios to determine which sites an entry appears you can use the search parameter something like this (that's a PT radio group field):

{exp:channel:entries
    limit="1"
    disable="categories|member_data|pagination"
    status="{global:entry_statuses}"
    site="master_site"
    search:pages_sites="IS_EMPTY|all|{global:loc}"
}
    <h1>{title}</h1>
    {pages_body}
{/exp:channel:entries}

The global:loc variable is defined per site via FocusLab Master Config, and templates are routed to the master site via a standard MSM cross-site embed (though probably better to use Resource Router add-on for that).

Finally, in order to resolve any Pages module URIs to the right place I developed the Slavedriver add-on: https://github.com/thisisjamessmith/Slavedriver

Works fairly well in my opinion, though the Publish screens can get a little overwhelming. There's also Publisher, which might help instead: https://boldminded.com/add-ons/publisher ... it's touted as multi-lingual, but the approach is really the same.

Come to think of it, this approach would probably also work without MSM (notwithstanding the licensing issue you mentioned). (In my case MSM was necessary for other reasons anyway)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.