【问题标题】:How can I use php to populate a manifest.json file?如何使用 php 填充 manifest.json 文件?
【发布时间】:2018-01-31 04:32:42
【问题描述】:

我有一个 manifest.json 文件,当放置在我的网站根目录中时可以正确加载。我想使用我的站点中的 php 变量来填充清单中的值,而不是它是一个静态文件。

我找不到关于此in the spec 的任何信息,我不确定是否可行。

我尝试将清单名称切换为 manifest.php 并在其中使用 header('Content-Type: application/json')

在我的索引文件头中:

<script src="<?php echo $SITE_URL;?>/main.js"></script>
<script src="<?php echo $SITE_URL;?>/sw.js"></script>
<link rel="manifest" href="<?php echo $SITE_URL;?>/manifest.php">

在我的 manifest.php 中:

<?php header('Content-Type: application/json');
echo "
{
  \"name\": \"$SiteName\",
  \"gcm_user_visible_only\": true,
  \"short_name\": \"$Name\",
  \"description\": \"$PageDescription.\",
  \"start_url\": \"/index.php\",
  \"display\": \"standalone\",
  \"orientation\": \"portrait\",
  \"background_color\": \"$darkblue\",
  \"theme_color\": \"#f0f0f0\",
  \"icons\": [{
    \"src\": \"logo-load.png\",
    \"sizes\": \"96x96 128x128 144x144\",
    \"type\": \"image/png\"
  },{
    \"src\": \"logo-icon.png\",
    \"sizes\": \"48x48 72x72\",
    \"type\": \"image/png\"     
  }]
}
";
?>

变量$SiteName, $Name, $PageDescription, $darkblue, etc 都是在加载 manifest.php 之前在我的文档头中定义的。

我正在尝试的可能吗?

【问题讨论】:

  • 这应该可以正常工作。您是否从 manifest.php 获得有效的 JSON?您可以考虑构建一个数组并使用json_encode - 可能更容易发现问题。你到底在坚持什么?
  • 我得到了有效的 JSON,但缺少值(php 应该在哪里)。打算使用 json_encode 看看结果是否不同
  • 那么,$SiteName 在哪里赋值?您的代码按原样“工作”。

标签: php json progressive-web-apps manifest.json


【解决方案1】:

我的主要问题是这些常量是从哪里提取的?有时人们将它们设置在服务器主机级别并导入它们(environment variables)。另一种选择(与您正在做的事情有点模糊)是parse an INI file

我会做如下的事情:

<?php

$siteName = 'foo';
$name = 'bar';
$pageDescription = 'baz';

$manifest = [
    "name" => $siteName,
    "gcm_user_visible_only" => true,
    "short_name" => $name,
    "description" => $pageDescription,
    "start_url" => "/index.php",
    "display" => "standalone",
    "orientation" => "portrait",
    "background_color" => $darkblue,
    "theme_color" => "#f0f0f0",
    "icons" => [
        "src" => "logo-load.png",
        "sizes"=> "96x96 128x128 144x144",
        "type" => "image/png"
    ],
    "src" => "logo-icon.png",
    "sizes" => "48x48 72x72",
    "type" => "image/png"
];

header('Content-Type: application/json');
echo json_encode($manifest);

【讨论】:

  • 变量只是 index.php 文件中的字符串,在 manifest.php 被调用之前。您在此处发布的内容有效,但是当我将 $siteName 移动到我的索引文件时,它被注册为 null
  • 范围。幸运的是register globals 已成为过去……愿你永远不知道变量碰撞的痛苦!看看您是如何define a constant 或...一旦您对范围有了更好的了解,我们将探索选项。
猜你喜欢
  • 2013-01-30
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多