【问题标题】:How do I make css load from a database with codeigniter如何使用 codeigniter 从数据库加载 css
【发布时间】:2012-06-20 23:06:30
【问题描述】:

我正在开发一个 CMS,因此我需要将每个站点的全局 css 文件存储在数据库中并加载。我有一个名为 util 的控制器,该方法称为 sitecss。所以我的主要包装视图如下所示:

<link rel="stylesheet" type="text/css" href="/util/sitecss">

css 加载,但没有效果。如果我在页面上查看源代码,然后单击链接,我可以看到 css 就好了。所以我知道它正在加载。它不是来自文件吗?或者浏览器假设它没有被缓存?

如果我制作一个静态文件并将上面的更改为

<link rel="stylesheet" type="text/css" href="/css/site.css">

一切正常。如果我在 .NET 中使用处理程序 ashx 文件执行此操作,则它可以正常工作。我遇到问题是在带有 Codeigniter 的 php 中。我知道有人会问“为什么不直接制作静态文件?”答案是,这对于这个应用程序是不实用的。这适用于部署速度非常快的数千个站点。

提前致谢!

编辑:

我的控制器方法如下所示:

function sitecss() {
    $cssdata = $this->cmsutils->loadCss($this->session->userdata('sitecss'));
    echo $cssdata;
}

那么我可以先回显一个 mime 类型吗?这似乎不起作用,因为我在

【问题讨论】:

  • 您是否尝试过将动态生成的 CSS 文件的内容类型返回为text/css?它可能会将其作为浏览器不解释为 CSS 的不同类型发送,然后忽略。

标签: css codeigniter


【解决方案1】:

编写一个缓存库以从数据库中提取并在缓存文件夹中创建一个 css 文件。

您将需要:

库类

  • 与 css 交互并创建一个表单来执行 CRUD
  • 处理缓存文件监控 CRUD(每小时,甚至在表单的每个 C、U、D 上)
  • 将样式表缓存文件注入到 DOM 视图中

型号

  • 与数据库交互并执行 CRUD 操作
  • 向控制器返回数据以创建缓存文件

查看

  • 将值解析为 css 样式表文件格式

另一种选择是使用控制器定义一个 mime 类型,然后加载一个样式表格式正确的视图。不写入文件系统或任何东西。在 URI 的末尾添加一个 .css 扩展名并称之为好...


我为刚刚发布的应用程序做同样的事情。我在具有指定文本字段的应用程序的管理部分的视图中有一个表单。用户输入十六进制颜色代码,然后保存/更新数据库中的数据。然后,该库会创建一个在标题视图中引用的缓存 css 文件。当我们将应用程序部署到多个客户端时,我们这样做是为了消除在特殊目录中添加 .gitignore 文件的需要。

【讨论】:

    【解决方案2】:

    您是否可以通过将 css 从控制器传递到视图来加载 css,然后在标题中的某处或视图中的其他位置回显它,如下所示:

    控制器:

    $data['css_rules'] = $this->yourcssmodel->get_css_rules_function();
    $this->load->view('yadayadayada, $data);
    

    视图:(可能在标题中)

    ?>
    <style>
    <?echo $css_rules;?>
    </style>
    

    【讨论】:

    • 这样做的问题是它将在每个请求上发送,而不是利用用户的浏览器缓存。
    • 嗯嗯嗯。那时我可能误解了这个问题。我认为部分问题是他不希望 css 缓存。
    • 缓存无关紧要。我可以按照您的建议显示它,但我不想这样做。我宁愿做负载。我无法理解的是浏览器向服务器发出请求,然后服务器发回一些文本。它如何知道从数据库加载的一堆文本和从文件加载的一堆文本之间的区别。它们应该是一样的。我一直在 .NET 中使用处理程序来执行此操作。
    • @DougWolfgram 这可能不是与“一堆文本”一起发回的正确内容类型或 MIME 类型。它必须是text/css,否则浏览器很可能会忽略它。您可以在将任何内容回显到页面之前在 PHP 中设置标头,看看是否可以解决问题。
    • 是的,它可能是 jblasco 所说的 mime 类型。您的 sitecss 函数究竟是什么渲染/做什么?如果没有其他人的建议可以解决问题,您可以发布代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多