当所有单独的主题颜色都定义为文件中的 PHP 变量时,如何使用 PHP 更改主题?
Howto change a theme using PHP when all separate theme colors are defined as PHP variables in a file?
我已经创建了一个自己的 PHP 框架来构建网站。我开始在名为 "definitions.php" 的文件中定义一些基本变量。在其中的其他配置中,我还通过 PHP 变量定义了配色方案,这些变量在其他 PHP 文件中使用,这些文件加载“definition.php(例如在 '')。
definitions.php:
<?php
[lots of variable-based definitions not interesting here]
// Color Composition 02 (#F0F8FF - AliceBlue)
/*
$DARK_MODE = 0;
$SECURITY_MODE = 'multi';
$DATE_COLOR = '#FFD700';
$RESP_COLOR = '#FFD700';
$TD_COLOR_LEFT = '#F0F8FF';
$TD_COLOR_RIGHT = '#F0F8FF';
$TR_COLOR_RIGHT = '#F0F8FF';
$TR_COLOR_RIGHT_02 = '#F0F8FF';
$TD_COLOR_INSIDE_EMPTY = '#F0F8FF';
$BORDER_TABLE = '0px';
$DATA_COLOR = '#F0F8FF';
$FOREGR_COLOR = 'lightgray';
$REV_COLOR = 'lightgreen';
$OBLIG_COLOR = 'lightblue';
$INPUT_BG_COLOR = 'lightgray';
$INPUT_COLOR = 'blue';
$INPUT_WEIGHT = 'normal'; // 'bold';
$MENU_SURROUND_COLOR = '#302D26';
$SPINNER_COLOR = '#4D4B48';
$HR_COLOR = 'darkgray';
$BODY_MARGIN_TOP = '5px';
*/
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
$DARK_MODE = 1;
$SECURITY_MODE = 'single';
$DATE_COLOR = '#4D4B48';
$RESP_COLOR = '#4D4B48';
$TD_COLOR_LEFT = '#4D4B48';
$TD_COLOR_RIGHT = '#302D26';
$TR_COLOR_RIGHT = '#302D26';
$TR_COLOR_RIGHT_02 = '#F0F8FF';
$TD_COLOR_INSIDE_EMPTY = '#4D4B48';
$BORDER_TABLE = '0px';
$DATA_COLOR = '#4D4B48'; // '#302D26';
$FOREGR_COLOR = 'lightgray';
$REV_COLOR = 'lightgreen';
$OBLIG_COLOR = 'lightblue';
$INPUT_BG_COLOR = 'lightgray';
$INPUT_COLOR = 'blue';
$INPUT_WEIGHT = 'normal'; // 'bold';
$MENU_SURROUND_COLOR = '#302D26';
$SPINNER_COLOR = '#4D4B48';
$HR_COLOR = 'darkgray';
$BODY_MARGIN_TOP = '5px';
?>
arbitrary.php:
<?php
error_reporting(-1);
//ini_set('display_errors', 'On');
ob_start();
require_once('definitions.php');
?>
[HTML-Code, CSS and JavaScript file import etc. plus PHP conditions]
<body style="background-color: <?= $DATA_COLOR ?>; color: <?= $FOREGR_COLOR ?>; margin-top: <?= $BODY_MARGIN_TOP ?>;">
[more HTML, more PHP]
由于所有主题 - 如此称呼 - 深色模式/夜间模式的定义都作为变量包含在文件 "definitions.php" 中,我想让用户能够选择这样的主题并将其保存在她的文件中/ 数据库设置中自己的用户参数。
现在,如您所见,这些颜色变量定义中的第一个被注释掉了。只有黑暗模式处于活动状态。我这样做是因为我最近才向这个文件添加了几种配色方案。
我现在想做的是在我的 PHP GUI 上向用户展示一个按钮/下拉选项,她/他可以从中选择几个这样的主题意义上的配色方案,如所解释的.显然,这不适用于未注释的配色方案。我的想法是这样的:
<?php
if user decides for AliceBlue then
activate these color variables and save them in her / his user parameters
elseif user decides for Dark Mode then
activate those color variables and save them respectively
?>
另一点要注意的是,我的系统是一个多用户框架,只有一个应用程序文件服务器包含整个框架。因此,只能有一个通用文件 "definitions.php".
有没有办法在给定条件下处理这个问题?
创建一个按钮,该按钮使用 "dark" 或 "light" 主题中的一个参数向自身发送 ajax 请求。
然后在文件的开头检查用户选择的主题并将其保存在会话中。
使用普通的 if 语句检查 "theme" 用户从中选择并加载这些值。
使用您现有的框架,只需保存用户的首选项 aliceblue
或数据库 and/or 会话变量中的任何内容,然后将其用于 select 来自 [=14= 中的数组]:
// Color Composition 02 (#F0F8FF - AliceBlue)
$THEME['aliceblue']['DARK_MODE'] = 0;
$THEME['aliceblue']['SECURITY_MODE'] = 'multi';
//etc...
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
$THEME['nightmode']['DARK_MODE'] = 1;
$THEME['nightmode']['SECURITY_MODE'] = 'single';
//etc...
然后分配:
$pref = //users preference
$DARK_MODE = $THEME[$pref]['DARK_MODE'];
$SECURITY_MODE = $THEME[$pref]['SECURITY_MODE'];
//etc...
//or extract vars from the proper array
extract($THEME[$pref]);
或者,您可以在开关中定义它们:
$pref = //users preference
switch($pref) {
// Color Composition 02 (#F0F8FF - AliceBlue)
case 'aliceblue':
$DARK_MODE = 0;
$SECURITY_MODE = 'multi';
//etc...
break;
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
case 'nightmode':
$DARK_MODE = 1;
$SECURITY_MODE = 'single';
//etc...
break;
}
我认为你在这方面走错了路。使用 php 动态生成主题是一个非常糟糕的主意。
首先,如果您正在开发 php 框架(或任何后端框架),该框架的代码不应该知道任何 UI 细节。或者您使用了错误的术语来描述您正在制作的东西。
至于主题,有相应的工具:您应该查看 SASS/SCSS。 UI 主题应该由专门用于此目的的技术来处理。
如果我没猜错的话,你是在混淆 "framework" 和 "cms" 这样的东西。另外,我觉得您仍在 include oriented 范式中工作。
哦 .. require
不是函数。
并停止在 php 文件末尾使用 ?>
:这通常会导致 "header already sent" 错误。
我已经创建了一个自己的 PHP 框架来构建网站。我开始在名为 "definitions.php" 的文件中定义一些基本变量。在其中的其他配置中,我还通过 PHP 变量定义了配色方案,这些变量在其他 PHP 文件中使用,这些文件加载“definition.php(例如在 '')。
definitions.php:
<?php
[lots of variable-based definitions not interesting here]
// Color Composition 02 (#F0F8FF - AliceBlue)
/*
$DARK_MODE = 0;
$SECURITY_MODE = 'multi';
$DATE_COLOR = '#FFD700';
$RESP_COLOR = '#FFD700';
$TD_COLOR_LEFT = '#F0F8FF';
$TD_COLOR_RIGHT = '#F0F8FF';
$TR_COLOR_RIGHT = '#F0F8FF';
$TR_COLOR_RIGHT_02 = '#F0F8FF';
$TD_COLOR_INSIDE_EMPTY = '#F0F8FF';
$BORDER_TABLE = '0px';
$DATA_COLOR = '#F0F8FF';
$FOREGR_COLOR = 'lightgray';
$REV_COLOR = 'lightgreen';
$OBLIG_COLOR = 'lightblue';
$INPUT_BG_COLOR = 'lightgray';
$INPUT_COLOR = 'blue';
$INPUT_WEIGHT = 'normal'; // 'bold';
$MENU_SURROUND_COLOR = '#302D26';
$SPINNER_COLOR = '#4D4B48';
$HR_COLOR = 'darkgray';
$BODY_MARGIN_TOP = '5px';
*/
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
$DARK_MODE = 1;
$SECURITY_MODE = 'single';
$DATE_COLOR = '#4D4B48';
$RESP_COLOR = '#4D4B48';
$TD_COLOR_LEFT = '#4D4B48';
$TD_COLOR_RIGHT = '#302D26';
$TR_COLOR_RIGHT = '#302D26';
$TR_COLOR_RIGHT_02 = '#F0F8FF';
$TD_COLOR_INSIDE_EMPTY = '#4D4B48';
$BORDER_TABLE = '0px';
$DATA_COLOR = '#4D4B48'; // '#302D26';
$FOREGR_COLOR = 'lightgray';
$REV_COLOR = 'lightgreen';
$OBLIG_COLOR = 'lightblue';
$INPUT_BG_COLOR = 'lightgray';
$INPUT_COLOR = 'blue';
$INPUT_WEIGHT = 'normal'; // 'bold';
$MENU_SURROUND_COLOR = '#302D26';
$SPINNER_COLOR = '#4D4B48';
$HR_COLOR = 'darkgray';
$BODY_MARGIN_TOP = '5px';
?>
arbitrary.php:
<?php
error_reporting(-1);
//ini_set('display_errors', 'On');
ob_start();
require_once('definitions.php');
?>
[HTML-Code, CSS and JavaScript file import etc. plus PHP conditions]
<body style="background-color: <?= $DATA_COLOR ?>; color: <?= $FOREGR_COLOR ?>; margin-top: <?= $BODY_MARGIN_TOP ?>;">
[more HTML, more PHP]
由于所有主题 - 如此称呼 - 深色模式/夜间模式的定义都作为变量包含在文件 "definitions.php" 中,我想让用户能够选择这样的主题并将其保存在她的文件中/ 数据库设置中自己的用户参数。
现在,如您所见,这些颜色变量定义中的第一个被注释掉了。只有黑暗模式处于活动状态。我这样做是因为我最近才向这个文件添加了几种配色方案。
我现在想做的是在我的 PHP GUI 上向用户展示一个按钮/下拉选项,她/他可以从中选择几个这样的主题意义上的配色方案,如所解释的.显然,这不适用于未注释的配色方案。我的想法是这样的:
<?php
if user decides for AliceBlue then
activate these color variables and save them in her / his user parameters
elseif user decides for Dark Mode then
activate those color variables and save them respectively
?>
另一点要注意的是,我的系统是一个多用户框架,只有一个应用程序文件服务器包含整个框架。因此,只能有一个通用文件 "definitions.php".
有没有办法在给定条件下处理这个问题?
创建一个按钮,该按钮使用 "dark" 或 "light" 主题中的一个参数向自身发送 ajax 请求。 然后在文件的开头检查用户选择的主题并将其保存在会话中。 使用普通的 if 语句检查 "theme" 用户从中选择并加载这些值。
使用您现有的框架,只需保存用户的首选项 aliceblue
或数据库 and/or 会话变量中的任何内容,然后将其用于 select 来自 [=14= 中的数组]:
// Color Composition 02 (#F0F8FF - AliceBlue)
$THEME['aliceblue']['DARK_MODE'] = 0;
$THEME['aliceblue']['SECURITY_MODE'] = 'multi';
//etc...
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
$THEME['nightmode']['DARK_MODE'] = 1;
$THEME['nightmode']['SECURITY_MODE'] = 'single';
//etc...
然后分配:
$pref = //users preference
$DARK_MODE = $THEME[$pref]['DARK_MODE'];
$SECURITY_MODE = $THEME[$pref]['SECURITY_MODE'];
//etc...
//or extract vars from the proper array
extract($THEME[$pref]);
或者,您可以在开关中定义它们:
$pref = //users preference
switch($pref) {
// Color Composition 02 (#F0F8FF - AliceBlue)
case 'aliceblue':
$DARK_MODE = 0;
$SECURITY_MODE = 'multi';
//etc...
break;
// Color Composition 03 (#F0F8FF - Night Mode / Dark Mode)
case 'nightmode':
$DARK_MODE = 1;
$SECURITY_MODE = 'single';
//etc...
break;
}
我认为你在这方面走错了路。使用 php 动态生成主题是一个非常糟糕的主意。
首先,如果您正在开发 php 框架(或任何后端框架),该框架的代码不应该知道任何 UI 细节。或者您使用了错误的术语来描述您正在制作的东西。
至于主题,有相应的工具:您应该查看 SASS/SCSS。 UI 主题应该由专门用于此目的的技术来处理。
如果我没猜错的话,你是在混淆 "framework" 和 "cms" 这样的东西。另外,我觉得您仍在 include oriented 范式中工作。
哦 .. require
不是函数。
并停止在 php 文件末尾使用 ?>
:这通常会导致 "header already sent" 错误。