使用 laravel 控制主页内容的简便方法

Easy way to control homepage content with laravel

所以我已经为 e-commerce 创建了 cms,它将处理产品、类别等的所有操作,现在我想控制主页的内容,比如设置特色产品、优惠, 和新 collections.

制作一个简单的控制页面来编辑此内容的最佳想法是什么?

我试过像这样使用 Presets

当然,应该还有别的想法

我会用table这样的品类来做,但只是为了控制电商之家。

另一种选择是使用多态 tables。多态关系允许目标模型使用单个关联属于不止一种类型的模型。

然后你可以制作一个 table 就像你在问题中提出的那样,但是有相关的产品、横幅或类别,这样你就不会接触你不应该接触的资源。

您可以阅读更多相关信息here

这是我在现场使用过的

所有很少改动的内容

  1. 已创建 table site_contents 包含 cols id、page、key、value(text)

  1. 该值是 jsonable,在您的模型中提到它可以自动转换为数组或对象,这样您就不必一直 json_decode

    $casts = ['value' => 'array']

  2. 现在在控制器上,您可以将每个页面查询为 SiteContent::where('key', $page)->get(['id', 'key', 'value'])

  3. 如果可以有多个键(如横幅),保存时使用create()方法。如果密钥必须是唯一的(如任务),请使用 updateOrCreate() 方法

对于经常变化的内容

热门产品、特色产品或...经常发生变化 我建议向产品 table 添加 is_popular、is_featured、is_latest 标志,并在需要时手动查询它们

如果您想将其转储到 table,如您在问题中所示,将转储代码写入您的产品模型,如下所示

产品型号

protected static function boot()
{
    parent::boot();

    static::created(function ($product) {
        if ($product->is_featured) {
            // write your code to dump it to site_contents table
            // or create an event ProductCreated and fire that here
        }
    });

    static::updated(function ($product) {
        if ($product->isDirty('is_featured ')) {
            // someone changed the is_featured flag
            if($product->is_featured) {
              // dump to site_contents table
            } else {
              // remove from site_contents table
            }
        }
    });
}

我建议您开发 blade 上的页面,而不必从数据库中获取内容。相信我,这是值得的。因为您可以在视图中添加许多功能。

如果是电子商务网站,管理 seo 和跟踪事件会更加困难。

应该动态的是您的产品、类别以获取它们并将它们添加到您的视图中。