使用 laravel 控制主页内容的简便方法
Easy way to control homepage content with laravel
所以我已经为 e-commerce 创建了 cms,它将处理产品、类别等的所有操作,现在我想控制主页的内容,比如设置特色产品、优惠, 和新 collections.
制作一个简单的控制页面来编辑此内容的最佳想法是什么?
我试过像这样使用 Presets:
当然,应该还有别的想法
我会用table这样的品类来做,但只是为了控制电商之家。
另一种选择是使用多态 tables。多态关系允许目标模型使用单个关联属于不止一种类型的模型。
然后你可以制作一个 table 就像你在问题中提出的那样,但是有相关的产品、横幅或类别,这样你就不会接触你不应该接触的资源。
您可以阅读更多相关信息here
这是我在现场使用过的
所有很少改动的内容
- 已创建 table
site_contents
包含 cols id、page、key、value(text)
该值是 jsonable,在您的模型中提到它可以自动转换为数组或对象,这样您就不必一直 json_decode
$casts = ['value' => 'array']
现在在控制器上,您可以将每个页面查询为 SiteContent::where('key', $page)->get(['id', 'key', 'value'])
如果可以有多个键(如横幅),保存时使用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 和跟踪事件会更加困难。
应该动态的是您的产品、类别以获取它们并将它们添加到您的视图中。
所以我已经为 e-commerce 创建了 cms,它将处理产品、类别等的所有操作,现在我想控制主页的内容,比如设置特色产品、优惠, 和新 collections.
制作一个简单的控制页面来编辑此内容的最佳想法是什么?
我试过像这样使用 Presets:
当然,应该还有别的想法
我会用table这样的品类来做,但只是为了控制电商之家。
另一种选择是使用多态 tables。多态关系允许目标模型使用单个关联属于不止一种类型的模型。
然后你可以制作一个 table 就像你在问题中提出的那样,但是有相关的产品、横幅或类别,这样你就不会接触你不应该接触的资源。
您可以阅读更多相关信息here
这是我在现场使用过的
所有很少改动的内容
- 已创建 table
site_contents
包含 cols id、page、key、value(text)
该值是 jsonable,在您的模型中提到它可以自动转换为数组或对象,这样您就不必一直 json_decode
$casts = ['value' => 'array']
现在在控制器上,您可以将每个页面查询为
SiteContent::where('key', $page)->get(['id', 'key', 'value'])
如果可以有多个键(如横幅),保存时使用
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 和跟踪事件会更加困难。
应该动态的是您的产品、类别以获取它们并将它们添加到您的视图中。