<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><pre>    ${main bw.o install}</pre><pre>       |</pre><pre>       |-- util/</pre><pre>       |     |</pre><pre>       |     |-- smarty/</pre><pre>       |     |-- adodb/</pre><pre>       |     |-- ...</pre><pre>       |</pre><pre>       |-- themes/</pre><pre>       |     |-- admin/</pre><pre>       |     |-- modules/</pre><pre>       |     |-- templates/</pre><pre>       |     |-- styles/</pre><pre>       |</pre><pre>       |-- sites/</pre><pre>       |     |-- default/</pre><pre>       |     |   |-- settings.php</pre><pre>       |     |   |-- modules/</pre><pre>       |     |   |-- themes/</pre><pre>       |     |   |-- styles/</pre><pre>       |     |   |-- admin/</pre><pre>       |     |</pre><pre>       |     |-- "examples.com"/ </pre><pre>       |     |   |-- settings.php</pre><pre>       |     |   |-- modules/</pre><pre>       |     |   |-- themes/</pre><pre>       |     |   |-- styles/</pre><pre>       |     |   |-- admin/</pre><pre>       |</pre><pre>       |     |-- www.domain.com/               (symlink to ${main my_sites location}/www.domain.com)</pre><pre>       |     |   |-- settings.php</pre><pre>       |     |   |-- modules/</pre><pre>       |     |   |-- themes/</pre><pre>       |     |   |-- styles/</pre><pre>       |     |   |-- admin/</pre><pre>       |</pre><pre>       |     |-- ...</pre><pre></pre><pre>    ${main my_sites location}</pre><pre>       |</pre><pre>       |-- www.domain.com/</pre><pre>            |-- settings.php</pre><pre>           |-- modules/</pre><pre>           |-- themes/</pre><pre>           |-- styles/</pre><pre>           |-- admin/</pre><pre>               |-- cache/</pre><pre>               |-- configs/</pre><pre>               |-- include/</pre><pre>               |-- locale/</pre><pre>               |-- templates/</pre><pre>               |-- templates_c/</pre><pre></pre><pre></pre><pre>    ${main smarty install location}</pre><pre>       |</pre><pre>       |-- smarty v2.5.x/</pre><pre>       |-- smarty v2.6.x/</pre><pre>       |-- ...</pre><pre></pre><pre>    ${main adodb install location}</pre><pre>       |</pre><pre>       |-- adodb v2.80/</pre><pre>       |-- adodb v2.70/</pre><pre>       |-- ...</pre><pre><span
style="font-family: monospace;"></span></pre><span
style="font-family: monospace;"><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>
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