Hi Tiffany,
This is a great idea. I've been toying with doing something like this to
make it possible to give skins color themes, and be able to change multiple
settings all at once. As usual your solution is simple and elegant.
I will change the core code to put a hook in the BOLTskinSettings function
so you don't have bother creating a custom myBOLTmakePage function. And I
think I would like to include some of your idea into the core as well.
Here's what I'm looking at for the next release:
function BOLTskinSettings($var, $skin=true) {
## RETRIEVES DATA FROM CODE.SETTINGS PAGE TO FILL {VARS} MARKUPS IN YOUR
SKIN, OR REGULAR PAGES.
if (function_exists('myBOLTskinSettings')) return myBOLTskinSettings($var,
$skin);
global $BOLTzone, $BOLTcssPrefix;
$zone = BOLTinit('SKIN', $BOLTzone);
$out = BOLTvars("code.settings::{$BOLTcssPrefix}_$var", false);
if ($out == '') $out = BOLTvars("code.settings::$var", false);
if ($out != '') return BOLTdomarkup($out, '', $zone); // should reflect
local zones too?
if (inlist($var, 'skin,script,shared,field,files,domain')) return
BOLTvars($var);
}
You'll see it creates a $BOLTcssPrefix variable rather than making it a
part of BOLTconfig. Not sure the pro's or cons either way--just seemed
simpler to me. And second I did not include the feature of allowing members
to override settings by simple info vars--as it seemed a bit risky by
default. I would also suggest using data vars rather than info vars (or
perhaps info vars in a data var). This way you don't have to display a
member's preferences on their page--and it may be easier to present their
preference selection in a nice form. If you did this and include my var
instead of using BOLTconfig, the plugin might look like this:
(Warning: Haven't tested this...)
function myBOLTskinSettings($var, $skin=true) {
## RETRIEVES DATA FROM CODE.SETTINGS PAGE TO FILL {VARS} MARKUPS IN YOUR
SKIN, OR REGULAR PAGES.
global $BOLTzone, $BOLTcssPrefix;
$zone = BOLTinit('SKIN', $BOLTzone);
if (inlist($var, 'skin,script,shared,field,files,domain')) return
BOLTvars($var);
if (set($BOLTcssPrefix)) {
$out = BOLTvars("member.$BOLTid:{$BOLTcssPrefix}_$var", false); // DATA
VAR HERE
if ($out == '') $out = BOLTvars("code.settings::{$BOLTcssPrefix}_$var",
false);
}
if ($out == "default" || $out == '') $out = BOLTvars("member.$BOLTid:$var",
false); // ARE YOU SURE YOU WANT TO ALLOW THIS?
if ($out == '') $out = BOLTvars("code.settings::$var", false);
if ($out != '') return BOLTdomarkup($out, '', $zone); // should reflect
local zones too?
return $out;
}
Of course, since it is a plugin, you could set this up anyway you want. Let
me know what you'd prefer and I can upload it to the server...
Cheers,
Dan
On Sun, Oct 26, 2014 at 3:59 AM, Tiffany Grenier <[email protected]>
wrote:
> Hello again!
>
> I just wrote a small plugin allowing to change the values of the skinvars
> for some members or on somepages only.
> I called it cssprefix, because it works by adding a prefix to the
> skinvars, and I mainly used it to change the colors of some pages without
> even touching the skin file.
> I would gladly maintain this plugin, if it is published on the website.
>
> To use it, choose a prefix name (let's say "test"), and write in
> config.settings things like test_sitename: Test website or
> test_text_color:violet in order to change the sitename or the text color on
> pages with test cssprefix enabled.
> Then, to use prefix test only on page plugins and its subpages, edit your
> config file and write: if(in_array("plugins",$pageArray))
> $BOLTconfig['cssPrefix'] = "test";
> Or to use prefix test on page plugins only, edit your config file and
> write: if($pageLink == "plugins") $BOLTconfig['cssPrefix'] = "test";
> Members can also write on their profile "member" page:
> /*test_background_color: #0000ff*/ if they want to change the background
> color for pages with test cssprefix enabled. But, with this customization
> plugin, members can also write on their profile page: /*background_color:
> dimgray*/
>
> The plugin could probably be edited to disallow personal customization for
> members, or limit it to certain skinvars, like colors but not sitename, and
> I'll probably add that feature later, but you can also not tell your
> members the name of your skinvars, and/or not tell them about this feature;
> they won't think of it by themselves ;-)
>
> The cssprefix.php file contains the following:
> <?php if (!defined('BOLTWIRE')) exit();
>
> function myBOLTmakePage($out) {//the only change is the call to
> myBOLTskinSettings instead of BOLTskinSettings; this should be limited to
> the page content generation, since we only want the layout to be
> customizable
> global $pageLink,$BOLTreplaceHTML,$BOLTserverHeaders;
> BOLTstopWatch('Skin creation begun');
> $out = preg_replace('/\<\<([-_a-z0-9\.]+)\>\>/ie',
> "BOLTloadskin('$1')", $out); // Code zone--like <<css>>
> $out = preg_replace('/\=\=(.*?)\=\=/e', 'BOLTdomarkup("$1", $pageLink,
> "SKIN")', $out); // Put markup in skin directly--like ==[(function)]==
> BOLTstopWatch('Skin creation complete');
> preg_match_all('/\[\[([-_a-z0-9]+)\]\]/i', $out, $matches); //
> identify zones
> $BOLTvar['zones'] = strtolower(implode(',', $matches[1]));
> foreach($matches[1] as $zone) $BOLTvar["zone_$zone"] =
> BOLTgetlink($zone);
> foreach($matches[1] as $zone) {
> BOLTstopWatch("Zone $zone begun");
> $out = str_replace("[[$zone]]", BOLTgetzones($zone), $out); // Do
> each zone
> BOLTstopWatch("Zone $zone complete");
> }
> $out = preg_replace('/\{([-_a-z0-9:]+)\}/ie',
> "myBOLTskinSettings('$1')", $out); // Inserts {cssprefix-vars} from
> code.settings or member page
> $out = BOLTescape($out, false); // Undo escaped content
> $out = preg_replace('/\[messages( [~,-_a-z0-9]+)?\]/ie',
> 'BOLTmessageDisplay("$1")', $out); // Display messages
> if (BOLTconfig('robotBlock') != '') { // can turn specific pages off
> for robots. Use site*,test.block
> if (BOLTpageCheck(BOLTconfig('robotBlock'))) {
> $BOLTreplaceHTML['find'][] = '</head>';
> $BOLTreplaceHTML['replace'][] = "<meta name='robots'
> content='noindex'>\n</head>";
> }
> }
> if (is_array($BOLTreplaceHTML)) $out =
> str_replace($BOLTreplaceHTML['find'], $BOLTreplaceHTML['replace'], $out);
> // Any custom code replacements
> if (is_array($BOLTserverHeaders)) { foreach($BOLTserverHeaders as $h)
> header($h); } // Add custom headers
> return $out;
> }
>
> function myBOLTskinSettings($var, $skin=true) {
> global $BOLTzone,$BOLTconfig,$BOLTid;
> $zone = BOLTinit('SKIN', $BOLTzone);
> if (inlist($var, 'skin,script,shared,field,files,domain')) return
> BOLTvars($var);
> if (!empty($BOLTconfig['cssPrefix'])) {
> $out =
> BOLTvars("member.$BOLTid::".$BOLTconfig['cssPrefix']."_".$var, false);
> if ($out == '') $out =
> BOLTvars("code.settings::".$BOLTconfig['cssPrefix']."_".$var, false);
> }
> if ($out == "default" || $out == '') $out =
> BOLTvars("member.$BOLTid::$var", false);
> if ($out == '') $out = BOLTvars("code.settings::$var", false);
> if ($out != '') return BOLTdomarkup($out, '', $zone); // should
> reflect local zones too?
> return $out;
> }
>
> --
> 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.
>
--
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.