如何使用php填充manifest.json文件?

3
我有一个manifest.json文件,当它放置在我的网站根目录中时可以正确加载。我不想让它成为静态文件,而是想使用我的站点内的php变量来填充manifest中的值。
我在规范中找不到任何相关信息,也不确定是否可行。
我已经尝试将我的manifest更名为manifest.php并在其中使用header('Content-Type: application/json')
在我的index文件头部:
<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\"     
  }]
}
";
?>

在manifest.php加载之前,文档头中定义了变量$SiteName、$Name、$PageDescription、$darkblue等

我所尝试的是否可行?


1
这应该可以正常工作。你从manifest.php得到了有效的JSON吗?你可以考虑构建一个数组并使用json_encode - 这可能更容易捕获问题。你究竟卡在哪里了? - ficuscr
我得到了有效的JSON,但是其中缺少值(应该是PHP的值)。我将使用json_encode并查看结果是否有所不同。 - Trob Frank
好的,$SiteName 被赋值在哪里呢?你的代码现在“可以工作”。 - ficuscr
1个回答

3

我有一个主要问题,这些常量是从哪里获取的?有时人们在服务器主机级别设置它们并导入它们(环境变量)。另一个选项(与您正在做的事情有点模糊)是解析INI文件

我会做如下操作:

<?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 - Trob Frank
1
作用域。幸运的是,register globals已经成为过去式...愿你永远不会遇到变量冲突的痛苦!看看如何定义常量,或者...在你更好地理解作用域之后,我们将探讨选项。 - ficuscr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接