内联 JSON-LD 脚本块中的动态值
Dynamic values in inline JSON-LD script block
我将数据存储在我 select 的数据库中,并在我的 html 页面上回显,如下所示:
<article id="content_left_article_1">
<h1 class="main-heading">Get in Touch</h1>
<P><?php echo $rs_contactRows['ContactJobTitle']; ?>: <?php echo $rs_contactRows['ContactName']; ?></P>
<P>Email: <?php echo $rs_contactRows['ContactEmail']; ?></P>
<P>Mobile: <?php echo $rs_contactRows['ContactTelephone']; ?></P>
</article>
我知道我可以在页面上的单独脚本块中使用 JSON-LD 轻松标记此人的数据,如下所示:
<script type='application/ld+json'>
{
"@context": "http://www.schema.org",
"@type": "person",
"name": "Brian Keet",
"jobTitle": "Director",
"url": "http://tekiahfoundation.blogspot.co.za/",
"email": "briankeet@yahoo.com",
"telephone": "+27766261024"
}
</script>
但是,如果客户端要更新数据库中的任何这些详细信息(他们肯定会通过站点 CMS 进行更新),上面的静态 JSON-LD 脚本块将保留...好吧, 静态的。我一直在谷歌搜索和堆栈溢出疯狂地试图找到一个关于如何在 JSON-LD 脚本块中获得动态值的答案,
<script type='application/ld+json'>
{
"@context": "http://www.schema.org",
"@type": "person",
"name": "$user.name + $user.surname",
}
</script>
或通过 Google 结构化数据测试工具检查的其他方法。
我一直在尝试弄清楚如何使用 json_encoded($dataObject) 我在 php 中使用下面的 mysqli_query() 等(见下文)代码),并可能用 javascript 创建一个 JSON-LD 脚本块,但我不太确定这将如何工作。我也知道显然 "Google can read JSON-LD data even when it is dynamically injected into the page's contents, such as by Javascript code or embedded 'widgets'"。另外,如果我回显 json_encoded mysqli_fetch_assoc:
的结果
<?php
require('inc-conncvnl.php');
require('inc-function-escapestring.php');
$sql_contact = sprintf("SELECT * FROM tblcontact");
$rs_contact = mysqli_query($vconncvnl, $sql_contact);
$rs_contactRows = mysqli_fetch_assoc($rs_contact);
$contactData = json_encode($rs_contactRows);
echo $contactData;
?>
我在页面上收到数据回显,如下所示:json-encode echo on webpage
我很确定我错过了这个拼图的一些大块。如果有人能帮我想出一个成功的方法来解决这个问题,我将不胜感激。
您可以只输出 PHP 中的 JSON-LD,如下所示:
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Person",
"name": "<?php echo htmlentities($rs_contactRows['ContactName'], ENT_QUOTES); ?>",
"jobTitle": "<?php echo htmlentities($rs_contactRows['ContactJobTitle'], ENT_QUOTES); ?>",
"url": "<?php echo htmlentities($rs_contactRows['ContactUrl'], ENT_QUOTES); ?>",
"email": "<?php echo htmlentities($rs_contactRows['ContactEmail'], ENT_QUOTES); ?>",
"telephone": "<?php echo htmlentities($rs_contactRows['ContactTelephone'], ENT_QUOTES); ?>"
}
</script>
或者您在 PHP 中创建 JSON-LD 并输出:
$data = array(
'@context' => 'http://schema.org/',
'@type' => 'Person',
'name' => $rs_contactRows['ContactName'],
'jobTitle' => $rs_contactRows['ContactJobTitle'],
'url' => $rs_contactRows['ContactUrl'],
'email' => $rs_contactRows['ContactEmail'],
'telephone' => $rs_contactRows['ContactTelephone']
);
echo json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
旁注:输出 HTML 时应始终使用 htmlentities
,否则会有 XSS security vulnerabilities 的风险。
马库斯的回答是理解基础的正确方法。
下一步可能是找到并使用为您生成 LD-JSON 的 php 库。
例如,让我们看一下Torann json-ld库。
您可以通过更新 composer.json
使用 Composer 安装它:添加以下依赖项:
"require": {
"torann/json-ld": "^0.0" }
然后在你的页面中,你可以这样生成 ld-json(参见自述文件或单元测试):
$context = \JsonLd\Context::create('news_article', [
'headline' => 'Article headline',
'description' => 'A most wonderful article',
'mainEntityOfPage' => [
'url' => 'https://google.com/article',
],
'image' => [
'url' => 'https://google.com/thumbnail1.jpg',
'height' => 800,
'width' => 800,
],
'datePublished' => '2015-02-05T08:00:00+08:00',
'dateModified' => '2015-02-05T09:20:00+08:00',
'author' => [
'name' => 'John Doe',
],
'publisher' => [
'name' => 'Google',
'logo' => [
'url' => 'https://google.com/logo.jpg',
'width' => 600,
'height' => 60,
]
],
]);
echo $context; // Will output the script tag
NB/ 如果 Person context need to be improved, open an issue 满足你的需求(我可以解决),或者你自己提交一个 pull request。
我将数据存储在我 select 的数据库中,并在我的 html 页面上回显,如下所示:
<article id="content_left_article_1">
<h1 class="main-heading">Get in Touch</h1>
<P><?php echo $rs_contactRows['ContactJobTitle']; ?>: <?php echo $rs_contactRows['ContactName']; ?></P>
<P>Email: <?php echo $rs_contactRows['ContactEmail']; ?></P>
<P>Mobile: <?php echo $rs_contactRows['ContactTelephone']; ?></P>
</article>
我知道我可以在页面上的单独脚本块中使用 JSON-LD 轻松标记此人的数据,如下所示:
<script type='application/ld+json'>
{
"@context": "http://www.schema.org",
"@type": "person",
"name": "Brian Keet",
"jobTitle": "Director",
"url": "http://tekiahfoundation.blogspot.co.za/",
"email": "briankeet@yahoo.com",
"telephone": "+27766261024"
}
</script>
但是,如果客户端要更新数据库中的任何这些详细信息(他们肯定会通过站点 CMS 进行更新),上面的静态 JSON-LD 脚本块将保留...好吧, 静态的。我一直在谷歌搜索和堆栈溢出疯狂地试图找到一个关于如何在 JSON-LD 脚本块中获得动态值的答案,
<script type='application/ld+json'>
{
"@context": "http://www.schema.org",
"@type": "person",
"name": "$user.name + $user.surname",
}
</script>
或通过 Google 结构化数据测试工具检查的其他方法。
我一直在尝试弄清楚如何使用 json_encoded($dataObject) 我在 php 中使用下面的 mysqli_query() 等(见下文)代码),并可能用 javascript 创建一个 JSON-LD 脚本块,但我不太确定这将如何工作。我也知道显然 "Google can read JSON-LD data even when it is dynamically injected into the page's contents, such as by Javascript code or embedded 'widgets'"。另外,如果我回显 json_encoded mysqli_fetch_assoc:
的结果<?php
require('inc-conncvnl.php');
require('inc-function-escapestring.php');
$sql_contact = sprintf("SELECT * FROM tblcontact");
$rs_contact = mysqli_query($vconncvnl, $sql_contact);
$rs_contactRows = mysqli_fetch_assoc($rs_contact);
$contactData = json_encode($rs_contactRows);
echo $contactData;
?>
我在页面上收到数据回显,如下所示:json-encode echo on webpage
我很确定我错过了这个拼图的一些大块。如果有人能帮我想出一个成功的方法来解决这个问题,我将不胜感激。
您可以只输出 PHP 中的 JSON-LD,如下所示:
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Person",
"name": "<?php echo htmlentities($rs_contactRows['ContactName'], ENT_QUOTES); ?>",
"jobTitle": "<?php echo htmlentities($rs_contactRows['ContactJobTitle'], ENT_QUOTES); ?>",
"url": "<?php echo htmlentities($rs_contactRows['ContactUrl'], ENT_QUOTES); ?>",
"email": "<?php echo htmlentities($rs_contactRows['ContactEmail'], ENT_QUOTES); ?>",
"telephone": "<?php echo htmlentities($rs_contactRows['ContactTelephone'], ENT_QUOTES); ?>"
}
</script>
或者您在 PHP 中创建 JSON-LD 并输出:
$data = array(
'@context' => 'http://schema.org/',
'@type' => 'Person',
'name' => $rs_contactRows['ContactName'],
'jobTitle' => $rs_contactRows['ContactJobTitle'],
'url' => $rs_contactRows['ContactUrl'],
'email' => $rs_contactRows['ContactEmail'],
'telephone' => $rs_contactRows['ContactTelephone']
);
echo json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
旁注:输出 HTML 时应始终使用 htmlentities
,否则会有 XSS security vulnerabilities 的风险。
马库斯的回答是理解基础的正确方法。 下一步可能是找到并使用为您生成 LD-JSON 的 php 库。
例如,让我们看一下Torann json-ld库。
您可以通过更新 composer.json
使用 Composer 安装它:添加以下依赖项:
"require": { "torann/json-ld": "^0.0" }
然后在你的页面中,你可以这样生成 ld-json(参见自述文件或单元测试):
$context = \JsonLd\Context::create('news_article', [
'headline' => 'Article headline',
'description' => 'A most wonderful article',
'mainEntityOfPage' => [
'url' => 'https://google.com/article',
],
'image' => [
'url' => 'https://google.com/thumbnail1.jpg',
'height' => 800,
'width' => 800,
],
'datePublished' => '2015-02-05T08:00:00+08:00',
'dateModified' => '2015-02-05T09:20:00+08:00',
'author' => [
'name' => 'John Doe',
],
'publisher' => [
'name' => 'Google',
'logo' => [
'url' => 'https://google.com/logo.jpg',
'width' => 600,
'height' => 60,
]
],
]);
echo $context; // Will output the script tag
NB/ 如果 Person context need to be improved, open an issue 满足你的需求(我可以解决),或者你自己提交一个 pull request。