【问题标题】:CodeIgniter - pass variables to CSSCodeIgniter - 将变量传递给 CSS
【发布时间】:2011-06-29 07:29:25
【问题描述】:

我正在 Code Igniter 上重写网站,我需要加载外部 TTF。 MySQL db 指向该 TTF 的路径。我可以以某种方式将这些变量传递给 CSS 并使 foreach 循环“加载”这些字体。

我试过了

$this->load->vars($data);

【问题讨论】:

    标签: php html css codeigniter


    【解决方案1】:

    首先,处理提供动态 CSS。我的网站有一个名为“resource”的控制器,它允许我提供 CSS、JS 等(将来可能是图像)。它根据在 url 中传递给它的段加载视图。

    所以,当http://mysite.com/resource/css/main.css 被请求时:

    • 我的 Resource 控制器 (.../controllers/resource) 处理数据处理的任何细节(与 MVC 控制器一样)。然后加载:
    • 通用视图:".../views/resources/css.php",将所需 css 文件的名称传递给它。此视图打印出标题,指定 Content-Type(重要!)和任何其他通用内容。然后继续加载:
    • 指定的实际 CSS 文件,此处为 ".../views/resources/css/main.css.php"

    这有点矫枉过正,但提供了很大的灵活性,就像你听起来需要的那样。

    控制器:

    ...
    $segments = $this->uri->segment_array();
    array_shift($segments);   // remove the first two
    array_shift($segments);
    $content['stylesheet'] = $segments[0] . ".php";  //e.g. main.css.php
    $content['data'] = array();                      //Font data, etc
    $this->load->view('resources/css.php', $content);
    ..
    

    通用资源/css.php 这会加载实际的 .css.php 样式表

    <?php header("Content-Type: text/css"); // This is key! ?>  
    /* MySite CSS File (c) 2011 bla bla */
    <?php
         $this->load->view("resources/css/$stylesheet", $data);
         echo "\n";
    ?>
    

    具体资源/css/main.css.php

    <?php echo "/* I can use PHP in my CSS! */\n"; ?>
    body { background-color: <?=$data['bg_color']?>; }
    p { font-family: <?=$data['p_font_fam'];?>; }
    

    【讨论】:

    • 这样我需要将链接放在我的页面正文中...?或者就是这样。实际上我使用的是加载 3 个子视图的视图。第一个视图:页眉,第二个:内容,第三个:页脚。
    • 是的,您仍然需要在 HTML 中包含 CSS 文件,就像它是常规的静态 css 文件一样:
    【解决方案2】:

    您可能需要了解如何从 db 中检索数据以及如何显示它们: http://codeigniter.com/user_guide/database/index.html 祝你好运

    编辑: 你需要的可能是这样的: 在您从数据库中检索到链接之后,假设您将它们称为 $ttf_links

     <?php 
              foreach($ttf_links as $link){
            echo "<link rel='stylesheet' type='text/css' href={$link['row_name']} media='screen' />"
        }
        ?>
    

    然后在你的css中调用你需要的字体

    【讨论】:

    • 我从控制器中的 db 检索数据。我想将它传递给 view->css.
    • 这样行得通。但这是正确的方法吗?通过这种方式,我重新包含 css,因为每一个字体?超载呢?
    • 我要做的是在我的配置文件中包含一个字符串(或一组链接),并从那里在视图中调用它,而不是每次加载页面时从数据库中一次又一次地调用它
    • @Rabidmchine9 - 问题是我的数据只在控制器中......而不是配置。
    • 您的数据仅在控制器中是什么意思?
    【解决方案3】:

    据我所知,将变量传递给 CSS 不起作用。

    我已经阅读了一些关于使用 PHP 进行 CSS 模板的内容,但我再也找不到链接了。找到链接后将立即更新此答案。不过你也可以自己找。

    更新

    找到了!:http://www.barelyfitz.com/projects/csscolor/

    【讨论】:

      【解决方案4】:

      我看到您这样做的最简单方法是使用文件级 CSS 并以通常的方式更改值。

      【讨论】:

        【解决方案5】:

        一种解决方法是在页面本身中使用 CSS 来加载字体。

        【讨论】:

          【解决方案6】:

          这是答案,我已经实现并且工作正常

          https://ellislab.com/forums/viewthread/220105/#1014374

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多