<span style="font-weight: bold;">INTRODUCTION</span><br style="font-weight: bold;"><br>among the key features i'm looking for in a cms is 'strong/flexible multi-site support'.<br><br>i
know there are discussion's of mutlsite functionality scattered
throughout both tw.o & bw.o. personally, find it
confusing to find it all, let alone figure out what's best practice ...<br><br>that said, my hope/intention with this particular wiki page is to:<br><ol><li>gather, summarize & provide examples of the way things *currently* work in bw.o</li><li>brainstorm
ideas, documenting 'issues' & 'wishlists' of 'how to make it
better' -- and end up with a functional design proposal to float for
development ...</li></ol>i'm generally new to bw.o myself, and<span style="font-weight: bold; font-style: italic;"> really</span> invite any/all interested to participate.<br>if in doing so, if we can keep it organized & readable to boot ... then, woot!<br><br>i'm gonna start by dumping *my* ideas/notes here ... please feel free to markup, comment, etc.<br><br>and,
yes! i realize that all of this may already be easily do-able in bw.o,
and i just haven't learned enuf yet. in that case, i'll at least
feel more organized :-)<br><br><span style="font-weight: bold;"></span><span style="font-weight: bold;">CURRENT STATE OF AFFAIRS ... bw.o</span><br style="font-weight: bold;"><span style="font-style: italic; text-decoration: underline;"></span><br>an out-of-the-box bw.o install is physically laid out as:<br><br><span style="font-family: monospace;"> ${main bw.o install}</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- util/</span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- smarty/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- adodb/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- ...</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- themes/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- admin/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- modules/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- templates/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- styles/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- basic/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- clean/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- jill/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- firebird/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- ...</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- ...</span><br style="font-family: monospace;"><br><br><span style="font-weight: bold;">GENERAL APPROACH</span><br style="font-weight: bold;"><br>prior
to moving to bw.o, or any cms project for that matter, when designing
my own smarty-based, multiple sites for a single server, i worry about
four things:<br><ol><li>physical & logical separation of app src, smarty src & site data</li><li>provide inheritable/overridable configs, from global default to local specific</li><li>insulate designs changes from other/coeexistent webapps</li><li>do not break access to other app APIs</li></ol><span style="font-weight: bold;"></span><br><span style="font-weight: bold;">FUNCTIONAL CONSIDERATIONS:</span><br style="font-weight: bold;"><br><br><span style="font-weight: bold;">BEST PRACTICES FROM OTHER PROJECTS ...</span><br><br>just
like just about everybody else, i've tried a number of 'other' CMS
frameworks. each has some nice features that make
life-with-multisites a bit easier.<br><br>there are ideas from various projects that might be worth 'adopting'.<br><br>the <span style="font-weight: bold; font-style: italic; text-decoration: underline;">drupal</span> project has what i consider to be a great start at multisite management:<br><ul><li>sites are 'created' by simply creating a subdirectory in its sites/ dir</li><li>directories are named as FQDNs; one exception is the 'default' site</li><li>a given site's URL is constructed from the subdirectory name</li><li>sites can be individual/unique domains, and/or subdomains</li><li>non-standard ports can be assigned for a site, prepending the portnum as the deepest subdomain</li></ul>so, for example, <br><br><div style="margin-left: 40px;">sites/default<br>sites/example.com<br>sites/sub.example.com<br>sites/www.domain.com<br>sites/8080.www.domain2.com <br></div><br>would all be valid sites ...<br><br>in drupal, each site can have its own site-specific modules and themes that are made available <span style="font-style: italic; text-decoration: underline;">in addition to</span> those installed in the installation's global 'modules' and 'themes' directories, e.g.:<br><br><span style="font-family: monospace;"> ${main drupal install}</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- themes/ (global)</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- modules/ (global)</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"> |</span><span style="font-family: monospace;">-- sites/</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | |-- default/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | | |-- </span><span style="font-family: monospace;">themes/ (site-specific)</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | | |-- modules</span><span style="font-family: monospace;">/ (site-specific)</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | | <br></span><span style="font-family: monospace;"> | |-- </span>www.domain.com<span style="font-family: monospace;">/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | | |-- </span><span style="font-family: monospace;">themes/ (site-specific)</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | | |-- modules</span><span style="font-family: monospace;">/</span><span style="font-family: monospace;"> (site-specific)</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><span style="font-family: monospace;"> </span><span style="font-family: monospace;"> | | <br></span><span style="font-family: monospace;"> | |-- ...<br></span><span style="font-family: monospace;"> |<br> |-- ...<br><br style="font-family: monospace;"></span><span style="font-family: monospace;"></span><br><span style="font-weight: bold;">SEPARATION/OVERRIDE OF UTILs & SITEs</span><br><br>in general, i'm a big believer in keeping separate:<br><ul><li>a core application's source</li><li>data & configuration files used by the application</li><li>third-party applications' src</li></ul>my primary rationale is to ensure that:<br><ul><li>application
source (core & 3rd party) upgrades never 'come near' -- &
possibly overwrite! -- my valuable data/config files. i consider
data files IN the app's src tree to be 'near'.</li><li>3rd party
applications can be located elsewhere -- either to share sinlge
instances amongst other apps, and/or to make available different
versions of a given app.</li><li>core & 3rd party applications can be -- with necessary caveats & cautions -- be asynchronously upgraded</li></ul>of
course, i think bundling a default/global set of apps/config/data into
a core app's distro is a 'good thing' -- as long as those default
locations/assignments can be overridden on a per-site basis.<br><br><span style="font-weight: bold;">A FRIENDLIER bw.o MULTI-SITE LAYOUT</span><br><span style="font-family: monospace;"><br></span>taking the drupal layout in conjunction with the keep-it-separate approach, consider a <span style="font-style: italic;">possible</span> bw.o layout of:<br><br><span style="font-family: monospace;"> ${main bw.o install}</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- util/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- smarty/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- adodb/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- ...</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- themes/</span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- admin/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- modules/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- templates/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- styles/</span><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- sites/</span><br style="font-family: monospace;"><span style="font-family: monospace;"> | |-- default/<br> | | |-- settings.php<br></span><span style="font-family: monospace;"> | | |-- modules/<br></span><span style="font-family: monospace;"> | | |-- themes/</span><span style="font-family: monospace;"><br></span><span style="font-family: monospace;"> | | |-- styles/<br></span><span style="font-family: monospace;"> | | |-- admin/<br></span><span style="font-family: monospace;"> | |</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | |-- "examples.com"/</span> <span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> | | |-- settings.php<br></span><span style="font-family: monospace;"> | | |-- modules/<br></span><span style="font-family: monospace;"> | | |-- themes/</span><span style="font-family: monospace;"><br></span><span style="font-family: monospace;"> | | |-- styles/<br></span><span style="font-family: monospace;"> | | |-- admin/<br></span><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | |-- www.domain.com/</span> (symlink to <span style="font-family: monospace;">${main my_sites location}/www.domain.com)</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | | |-- settings.php<br></span><span style="font-family: monospace;"> | | |-- modules/<br></span><span style="font-family: monospace;"> | | |-- themes/</span><span style="font-family: monospace;"><br></span><span style="font-family: monospace;"> | | |-- styles/<br></span><span style="font-family: monospace;"> | | |-- admin/<br></span><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><span style="font-family: monospace;"> | |-- ...</span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><br><span style="font-family: monospace;"> ${main my_sites location}<br></span><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- www.domain.com/<br></span><span style="font-family: monospace;"> |-- settings.php<br></span><span style="font-family: monospace;"> |-- modules/<br></span><span style="font-family: monospace;"> |-- themes/</span><span style="font-family: monospace;"><br></span><span style="font-family: monospace;"> |-- styles/<br></span><span style="font-family: monospace;"> |-- admin/<br></span><span style="font-family: monospace;"> |-- </span>cache/<br><span style="font-family: monospace;"> |-- </span>configs/<br><span style="font-family: monospace;"> |-- </span>include/<br><span style="font-family: monospace;"> |-- </span>locale/<br><span style="font-family: monospace;"> |-- </span>templates/<br><span style="font-family: monospace;"> |-- </span>templates_c/<br><span style="font-family: monospace;"></span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"></span><br><span style="font-family: monospace;"> ${main smarty install location}<br></span><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- smarty v2.5.x/<br></span><span style="font-family: monospace;"> |-- smarty v2.6.x/</span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- ...<br><br></span><span style="font-family: monospace;"> ${main adodb install location}<br></span><span style="font-family: monospace;"> |</span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- adodb v2.80/<br></span><span style="font-family: monospace;"> |-- adodb v2.70/</span><span style="font-family: monospace;"></span><br style="font-family: monospace;"><span style="font-family: monospace;"> |-- ...<br><br>where each site's "settings.php" can specify, e.g.:<br></span><ul><li><span style="font-family: monospace;">path to a specific version of adodb</span></li><li><span style="font-family: monospace;">path to a specific version of smarty libs</span></li><li><span style="font-family: monospace;">specific smarty class configs</span></li><ul><li><span style="font-family: monospace;"></span>custom delimiters</li><li>locations for templates_c & other smarty-specific dirs</li><li>etc etc</li></ul></ul><span style="font-family: monospace;">of course, in the absence of any override directive, values would fall back to bw.o global/default values.<br><br>ultimately,
this approach scales to src, data, cache & compiled templates, and
site files storable in any network-mountable location; think, e.g.:<br></span><ul><li><span style="font-family: monospace;">compiled templates in a RAM DISK</span></li><li><span style="font-family: monospace;">individual site dirs on indiv front-end boxes</span></li><li><span style="font-family: monospace;">shared drupal & smarty installs on a back-end box</span></li><li><span style="font-family: monospace;">etc</span></li></ul><span style="font-family: monospace;"><span style="font-weight: bold;">DATABASE ISSUES w/ MULTISITES</span><br></span><ul><li><span style="font-family: monospace;">multisites in multiple databases</span></li><li><span style="font-family: monospace;">multisites in single database, shared tables</span></li><li><span style="font-family: monospace;">sharing some tables ... e.g.:</span></li><ul><li><span style="font-family: monospace;"></span>consolidated single sign-on 'users/groups'<span style="font-family: monospace;"></span></li><li><span style="font-family: monospace;"></span>per-site-unique themes, modules & content</li><li>etc</li></ul><li>etc</li></ul><span style="font-family: monospace;"><br style="font-weight: bold;"><span style="font-weight: bold;">MULTISITE ADMINISTRATION</span><br><br>what's a admin GUI for all this look like?<br>is one evern necessary, or should it be left to manual admin?<br><span style="font-family: mon;"><span style="font-weight: bold;"><br>PER-SITE PAGE & 'other node' OVERRIDES<br><br></span></span></span><span style="font-family: monospace;"><span style="font-weight: bold;"></span></span>

enuf for tonite ... 3/28/06 21:17:57
Page History
Date/CommentUserIPVersion
01 Apr 2006 (19:50 UTC)
openmacnews70.231.29.2257
Current • Source
openmacnews70.231.29.2255
View • Compare • Difference • Source
openmacnews70.231.29.2254
View • Compare • Difference • Source