将元标记关键字显示为数据库中的 JSON 数据似乎不起作用
Posted
技术标签:
【中文标题】将元标记关键字显示为数据库中的 JSON 数据似乎不起作用【英文标题】:Displaying Meta Tag Keywords as JSON Data From Database Not Seem To Be Working 【发布时间】:2022-01-17 14:24:06 【问题描述】:我正在使用 Laravel 5.8,我想将我的页面元关键字更新为 JSON 数据。
所以我创建了一个名为prd_meta_keywords
的新列,并将其结构设置为JSON
。
现在我可以像这个例子一样成功地将 JSON 数据插入到这个列中:
[
"video product",
"new product"
]
为了在 Blade 上检索这些数据,我这样做了:
@section('meta')
<meta name="keywords" content="@if(!empty($product->prd_meta_keywords)) @if(is_array($product->prd_meta_keywords) || is_object($product->prd_meta_keywords)) @foreach(json_decode($product->prd_meta_keywords) as $keyword) $keyword$loop->remaining ? ',' : '' @endforeach @endif @endif">
@endsection
但如你所见,它不起作用,也没有在页面源代码上显示关键字:
<meta name="keywords" content=" ">
但是我可以从@dd(json_decode($product->prd_meta_keywords))
正确获取结果。
那么这里出了什么问题?如何在 Blade 中正确检索此 JSON 数据作为关键字标签?
【问题讨论】:
【参考方案1】:你可以在那里使用Laravel Casting。
只需 cast
您在相应模型中的专栏即可。因此它将自动将数据存储在JSON
中,并在检索时自动转换为 php 数组。
protected $casts = [
'prd_meta_keywords' => 'array',
];
检索数组后,您可以轻松地在 meta 中内爆,
<meta name="keywords" content=" ($product->prd_meta_keywords) ? implode(",", $product->prd_meta_keywords) : ''">
让我知道结果。
【讨论】:
它工作得很好,但我也想知道我的代码出了什么问题...... 可以分享@dd(json_decode($product->prd_meta_keywords))
的结果吗?
我认为问题是这个条件@if(is_array($product->prd_meta_keywords) || is_object($product->prd_meta_keywords))
只需删除这个条件。还将@foreach(json_decode($product->prd_meta_keywords) as $keyword)
替换为@foreach(json_decode($product->prd_meta_keywords, true) as $keyword)
。让我知道结果。
如果我删除它,我会得到Invalid argument supplied for foreach()
您是否也将@foreach(json_decode($product->prd_meta_keywords) as $keyword)
替换为@foreach(json_decode($product->prd_meta_keywords, true) as $keyword)
?以上是关于将元标记关键字显示为数据库中的 JSON 数据似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章
尝试将元数据添加到对象时,AWS S3 管道中的“无效 JSON”
使用 SWIFT 3 的单元格不显示没有 html 标记的更新 JSON
React Native - 来自 JSON 的地图数据可以显示为文本,但不能显示为地图标记坐标
将元数据添加到RESTful JSON响应的最佳做法是什么?
如何根据 JSON 数据中的 lat 和 long 使地图居中,当单击标记时,会弹出一个弹出窗口并在 vueJS 中显示名称?