【问题标题】:Letting users write DB-stored CSS for custom layouts让用户为自定义布局编写数据库存储的 CSS
【发布时间】:2011-05-22 07:37:28
【问题描述】:

我目前正在构建一个 Web 应用程序(基于 Ruby on Rails),它可以让用户为自己的区域(个人博客页面)设置样式,并且想知道实现此目的的最佳方法是什么?

我认为用于模板的 Liquid 会很好,但是您将如何处理样式?我的目标是让每个博客都关联一个名为“样式”的数据库字段,该字段将存储自定义样式表,这是最好的方法吗?

到目前为止,我已经尝试过使用“sanitize_css”辅助方法,但它只是去除了“#stylebox”标签,这意味着什么都不会显示。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: ruby-on-rails css templates


    【解决方案1】:

    目前,我也在研究与您几乎相似的要求。我也在尝试为用户创建一个 CMS 来添加页面、设置样式等。

    我的方法如下

    每个用户都有他/她的子域。 (我使用 before_filter 来获取当前用户子域并加载他/她的网站)

    关于样式,我更喜欢将样式表作为物理文件。鉴于您的方法在编辑样式表方面具有更大的灵活性,我不喜欢将 stlesheet 代码放在页面顶部的想法。 Insted,我允许用户加载他们的样式表(使用回形针)

    因此,当网站加载时,我将从数据库中获取 css 路径并从路径中加载样式表。

    稍后我打算读取文件并将其加载到文本区域,以便用户可以编辑他们的样式表并在保存时覆盖现有文件;

    对于布局我也使用液体

    干杯

    同人

    【讨论】:

    • 感谢您的回复。上传包含代码的文件是否存在安全风险?
    【解决方案2】:

    老实说,我会在您的页面上允许主题化元素,然后将这些样式规则中的每一个存储为数据库中的一个字段(或将它们合并为一个巨大的字段)。执行一些验证以确保他们不使用任何有趣的业务(如果他们只为特定的div 编码,他们不应该使用任何花括号。)

    然后动态生成 CSS。

    原因?如果您想在自己的网站上投放广告,并且允许他们上传整个 CSS,他们可以轻松关闭广告 div 的可见性。

    我认为控制他们被允许的主题是“更安全”的;确保更高级的用户会被选中。但你真的想成为下一个 MySpace 吗? ;-)

    【讨论】:

    • 谢谢,看起来这是最安全的方法,对大多数用户来说应该足够了。拥有各种不同的框架,他们可以从中通过 DB 字段添加设计元素。
    【解决方案3】:

    如果代码过多,则序列化数据并将其作为文本存储在数据库中。 我觉得这样会好很多

    【讨论】:

      【解决方案4】:

      如果您要允许用户完全控制其 CSS 的区域,那么我可能会完全避免使用数据库并使用结构化文件系统方法。您可以为每个包含 main.css 的用户创建一个子域或文件夹。这还允许您随着用户(图片等)功能的增长而很好地扩展。

      话虽如此,正如 Robbie 所提到的,您可能需要考虑限制用户可以控制和不能控制的样式。否则,您可能会发现事情很快就会失控。对于这种方法,您可能希望使用数据库来存储可以修改的元素的属性值。

      【讨论】:

        猜你喜欢
        • 2016-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        相关资源
        最近更新 更多