CodeIgniter 3 - 使用不同的CSS主题重新加载视图



我仍在尝试围绕控制器函数和URL请求之间的关系进行思考。

这就是我想要完成的:

我有一个包含完整 HTML 页面的视图(没有模板(。在此页面上,我希望用户能够从链接列表中选择主题。每个主题都有一个单独的 CSS 文件。我希望所选链接将值传递给控制器,然后控制器使用 $data 数组使用不同的 CSS 文件重新加载同一视图。

如果我上面描述的情况是可能的,或者如果有更智能的解决方案,那么我将非常感谢任何帮助或建议。

基本视图/控制器结构:

我已经用?????????标记了所有我不理解的内容

控制器/演示.php

public function ?????????
{
    $data['theme'] = array(
        'Normal' => "normal.css",
        'Dark' => "dark.css",
        'Light' => "light.css",
        'Ultraviolet' => "ultraviolet.css"
    );
    $this->load->view('demos/themeswap', $data);

视图/演示/主题交换.php

<!DOCTYPE html>
<html lang="en-us">
<head>
    <meta charset="utf-8">
    <title>Theme Swap Demo</title>
    <link rel="stylesheet" href="/assets/css/<?php echo $theme ?>.css" media="screen" />
</head>
<body>
    <header>
        <h1>Theme Swap Demo</h1>
        <nav>
            <ul>
                <li><a href="?????????">Standard</a></li>
                <li><a href="?????????">Dark</a></li>
                <li><a href="?????????">Light</a></li>
                <li><a href="?????????">Ultraviolet</a></li>
            </ul>
        </nav>
    </header>
<main>
    <h1>Some Rock-Solid Content</h1>
    <p>Behold! I am a paragraph!</p>
</main>
<footer>
    <p>What an amazing footer.</p>
</footer>

你的第一个??????(方法名称(应如下所示:

public function theme($theme) 

然后,或者您的主题交换.php视图:

        <ul>
            <li><a href="<?php echo base_url('demos/theme/standard'); ?>">Standard</a></li>
            <li><a href="<?php echo base_url('demos/theme/dark'); ?>">Dark</a></li>
            <li><a href="<?php echo base_url('demos/theme/light'); ?>">Light</a></li>
            <li><a href="<?php echo base_url('demos/theme/ultraviolet'); ?>">Ultraviolet</a></li>
        </ul>

在您的 URL 结构上,如果配置为删除索引.php并且不定义自定义路由,您通常会controller/method/variables

有关此内容的更多信息,请点击此处。

为什么你不使用jquery尝试它,它非常简单可靠,然后使用锚标签重定向。

<ul class="change_theme">
    <li data-theme="Standard">Standard</li>
    <li data-theme="Dark">Dark</li>
    <li data-theme="Light">Light</li>
    <li data-theme="Ultraviolet">Ultraviolet</li>
</ul>

设计主题,例如如果您在正文标签中更改一个类,更改将应用于整个页面

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var current_theme = "Standard";
              $('.change_theme [data-theme]').click(function(e) {
                e.preventDefault();
                var new_theme = $(this).data('theme');
                $('body').removeClass(current_theme);
                $('body').addClass(new_theme);
                current_theme = new_theme;
              });
        });
    </script>

小提琴上的演示

最新更新