I was thinking about a more complex plugin with this theming idea.
We could have code.skin.%skinname%.%themename% page (a real *site* page,
not like code.skin.%skinname%.css), and give reading/writing rights to some
users on these pages. I insist in the {skinname} part because skin variable
names may change from one skin to another...
And then we could call in the header page <(theme %themename% )> or <(theme
{~theme} %defaultcssprefix%)> where BOLTFtheme would be defined by:
function BOLTFtheme($args) {
global $BOLTcssPrefix,$BOLTtheme,$BOLTskin;
$default = BOLTinit(false,$args[2]);
if(BOLTFexists("code.skin.$BOLTskin.$args[1]")) //maybe check also the
user reading rights
$BOLTtheme = $args[1]; //the coexistence of this and of info
vars in code.settings allows users to overwrite default values for a given
prefix
elseif(false !== $default)
$BOLTcssPrefix = $default;
//else do not change the css prefix
}
with of course, on the plugin page:
function myBOLTskinSettings($var) {
global $BOLTcssPrefix,$BOLTskin,$BOLTtheme,$BOLTzone;
$zone = BOLTinit('SKIN', $BOLTzone);
if($var != "sitename" && $var != "slogan" &&
BOLTFexists("code.skin.$BOLTskin.$BOLTtheme"))//maybe check also the user
reading rights, and have a more generic way to select which skinvars can be
replaced by theme pages and which cannot
$out = myBOLTskinVar("code.skin.$BOLTskin.$BOLTtheme",$var);//this
comes before code.settings
if ($out == "default" || $out == '') $out =
myBOLTskinVar("code.settings",$var);
if($out == "default") $out = '';
if ($out != '') return BOLTdomarkup($out, '', $zone);
if (inlist($var, 'skin,script,shared,field,files,domain')) return
BOLTvars($var);
}
function myBOLTskinVar($varPage, $var) {
global $BOLTcssPrefix;
if(BOLTFexists($varPage)) {
$out = BOLTvars("$varPage::{$BOLTcssPrefix}_$var", false);
if ($out == "default" || $out == '') $out =
BOLTvars("$varPage::$var", false);
}
return out;
}
One of my usecases is that I allow the users to change the colors of some
pages, to which is assign very specific prefixes. So they need to be able
to change the values associated with these two prefixes, and not to choose
the css prefix to apply... In that case, I would just put <(theme
%basecssprefix%_{~theme} %basecssprefix%)> and allow users to create pages
like code.skin.%skinname%.%basecssprefix%_%theirtheme% where they can
"overwrite" for example firstprefix_text_color but keep
secondprefix_text_color unchanged (if
code.skin.%skinname%.secondprefix_%theirtheme% does not exist) :-D
This will even let them use themes created by other users, and it would
still be something designed to be applied to the whole site (these *are*
THEMES, not local prefixes). One can still copy some prefixed versions of a
theme page but not all, if one want a theme to be partially applied.
And this plugin could become very powerful if you decided to do <(theme
%basethemename%_{id} %defaultthemename%)> or <(theme {p0}_%basethemename%)>
or even <(theme blue blue)> to enforce blue as a theme (from
"code.skin.%skinname%.blue" does not exist) or at least as a prefix (from
code.settings) if the theme page does not exist. But anyway, should you add
this plugin to your website, I would be glad to maintain it (again, my
member id is maelite).
Cheers,
Tiffany
--
You received this message because you are subscribed to the Google Groups
"BoltWire" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/boltwire.
For more options, visit https://groups.google.com/d/optout.