【问题标题】:Different css for different company - Laravel不同公司的不同CSS - Laravel
【发布时间】:2017-01-23 08:39:12
【问题描述】:

我制作了一个有 1 个设计的网站。可能有不同角色的用户。接下来是角色:

  • 普通用户
  • 公司管理员
  • 工人
  • ...

网站上的每个用户都有他的公司(在数据库中的整数字段中),我想让每个使用role - admin of company 的用户都可以更改他公司的网站设计(用于正文、页眉、页脚等的起始颜色)。 )。例如company 1 有黄色设计,company 2 红色等。到目前为止,我已经想出了这样的想法:

在表公司中,为其他列(body_color-string、footer_color-string 等)扩展表架构,并将每个公司的值写入数据库。

用户成功登录后,这些值会在会话中从数据库中加载,并且在我的app.blade.php 中,会用会话部分覆盖 css 部分。

例如,如果我有 div

<div class="test123">Something</div> 

我会在 app.blade.php 中覆盖该值,如果未设置会话,则应用默认颜色 white

<style>
    .test123 {
        background-color:{{ Session::get('body_color',"white") }}}
</style>

这行得通,但有点乱,所以我会在以后寻求一些建议或改进(当我可能有一些元素的高度、宽度等时)......

我这样做是否正确,或者这可以更容易地完成?

【问题讨论】:

  • 只是一个想法。如果您的模板从基本布局模板继承。您可以创建自定义基本模板,然后根据用户的偏好在每个模板之间进行更改。这样你就可以避免存储类和类似的东西并在 css 标签上使用 ifs。
  • 通过制作模板,我限制公司管理员在 n 个创建的模板之间更改设计。有了颜色,他就有更多的空间来定制设计。
  • 是的。也许您可以使用@M.Max 告诉您的解决方案,将所有 CSS 存储在一个字段中,然后将其放在样式标签之间。根据用户的角色存储它,然后使用相同的逻辑检索它。
  • 如果用户对 CSS 不太了解,你可以预定义一些类,然后使用 ColorPicker 之类的 jquery 插件来存储用户喜欢的颜色,这样他们只选择颜色,而不要'不要乱用 CSS。

标签: php css laravel laravel-5.1


【解决方案1】:

你可以这样:

您将用户设置的所有样式保存到数据库中(companyId,样式)

并添加到页面上的&lt;head&gt;

<style type="text/css">
   <?php echo $styles ?>
</style>

$styles - 来自服务器的用户公司所有样式的字符串,您可以使用会话等。

【讨论】:

  • 公司的管理员必须将所有样式都写成字符串?这些用户中的大多数都不太了解 css,这种方法只对开发人员有用,对最终用户不利。
  • 不,我的意思是你会有用户的表单,但保存元素的样式,而不是一个值,例如:用户选择灰色的身体颜色 -> 你保存 - “body {background-color: #D8D8D8}”。然后在页面上加载它。
  • 好的,我会尝试使用这种方法,看看效果如何
  • 如果您有任何问题 - 在 cmets 中提问,我会尽力提供帮助 :)
【解决方案2】:

我使用了一个类似的功能,并像下面这样构建它:

  1. 创建一个名为 StyleAttribute 的模型及其表以存储可由管理员填写的属性。列如下:id、name、default_value。
  2. 创建一个名为 Style 的模型及其包含列的表,例如:id、user_id、style_attribute_id、value。
  3. 在管理页面上,使用以下内容循环遍历所有可用属性:

    样式属性::all()

并为每一个创建一个表单域。

  1. 现在您可以将填充的值存储在 Style 模型中,对应于正确的用户。

  2. 在前端 &lt;head&gt; 中,您可以在 &lt;style&gt; 元素内执行以下操作:

    样式::where('user_id', $current_user_id)->get();

或者在 Eloquent 中使用预定义的关系。那么你唯一需要做的就是回显属性名称和值,然后你就设置好了。

这种方法的优点是,当您想使另一个样式属性可用时,您只需将其添加到 style_attribute 表中即可。祝你好运!

【讨论】:

    【解决方案3】:

    保存设置后为每个公司生成一个样式表。

    然后在加载现有样式后将其放入刀片中:

    @if($hasCustomStylesheet){
        <link rel="stylesheet" href="/css/{{ $customeStyleSheetName }}">
    @endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2021-05-03
      • 1970-01-01
      相关资源
      最近更新 更多