javascript - 如何实现html页面的主题/模板加载

标签 javascript php node.js express templates

我有一个显示博客文章列表的网页。我需要一种方法能够为用户可以使用设置页面设​​置的页面提供不同的主题(html 结构和样式)。选择主题后,整个页面结构和样式都会更改为当前主题。我想使用 Nodejs 或 Php 来实现这个。

最佳答案

如果我要尝试完成此任务,我将使用 PHP 来完成此操作:

  1. 将他们的主题偏好设置存储在数据库中,并声明所做的更改将在他们注销并重新登录后可用。
  2. 每当他们再次登录时,请在您编写的任何登录/身份验证函数中将首选项设置为 session 变量。
  3. 创建一个 PHP 函数来检查他们的主题偏好并回显相应的 CSS 链接。
  4. 将您刚刚创建的函数放在主题应应用到的每个 .php 文件的头部(如果使用 MVC,则为模板)。

只是一个简短的例子:

数据库至少应该具备什么

mysql> select * from _users;
+----+-------+-------+--------+
| id | _user | _pass | _theme |
+----+-------+-------+--------+
|  1 |  john | ***** | dkblue |
|  2 |  jane | ***** | redgld |
|  3 |  bill | ***** | blkwht |
+----+-------+-------+--------+

主题偏好作为 session 变量

  function authenticate($username, $password) {
    # authenticate
      //
      // code to authenticate...
    # retrieve user's theme (can also be a separate function)
      $stmt = $sql->prepare("SELECT _theme FROM _users WHERE _user = '$username'");
      $stmt->execute();
      $results = $stmt->fetch(PDO::FETCH_ASSOC);
    # establish session variables
      $_SESSION['theme'] = $results['_theme'];
      //
      // other session variable code...
  }

主题检查功能

  function checkTheme($theme) {
    # remember to place function between <head> tags
    switch ($theme) {
      case 'dkblue':
        $stylesheet = '/inc/css/darkblue.css';
        break;
      case 'redgld':
        $stylesheet = '/inc/css/red-gold.css';
        break;
      case 'blkwht':
        $stylesheet = '/inc/css/black-white.css';
        break;
      default:
        # will default to this theme if no preference has been chosen
        $stylesheet = '/inc/css/default.css';
        break;
    }
    echo '<link rel="stylesheet" href="' . $stylesheet . '">';
  }

blog.php

<?=session_start();?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>Blog</title>

    <?=checkTheme($_SESSION['theme']);?>
  </head>

关于javascript - 如何实现html页面的主题/模板加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675359/

相关文章:

c# - 如何将 Javascript Unicode 解码为 C# 字符串

javascript - CSS 根据类名控制旋转

Javascript - 为什么排他性 if 子句中的声明被认为是重复的?

php - : when placed before execution, PDO准备好的语句是否进行多次sql调用到底是什么

php - 如何使用 PHP 将用户随机映射到组中并保持组计数的平等

javascript - 如何在 Electron renderer.js 文件中使用 Node.js 解析 JSON?

node.js - Angular 通用 |火力管理|代码 : 'app/invalid-credential' |socket hang up on

javascript - CreateJS/Adobe Animate CC : testing a simple function

php - 在 MYSQL 中重新格式化日期以在 PHP 中输​​出

node.js - 执行 find() 时在 Mongoose 中调用虚方法