2017-08-22 5 views
1

J'ai un fichier manifest.json qui se charge correctement lorsqu'il est placé dans le répertoire racine de mon site. Au lieu que ce soit un fichier statique, je voudrais utiliser les variables php à partir de mon site pour remplir les valeurs à l'intérieur du manifeste.Comment puis-je utiliser php pour remplir un fichier manifest.json?

Je ne trouve aucune information sur ce in the spec, et je ne sais pas si c'est possible.

J'ai essayé de changer le nom de mon manifeste en manifest.php et j'y ai utilisé header('Content-Type: application/json').

Dans ma tête de fichier d'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"> 

intérieur de mon 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\"  
    }] 
} 
"; 
?> 

Les variables $SiteName, $Name, $PageDescription, $darkblue, etc sont tous définis dans la tête de document avant le manifest.php est chargé.

Est ce que j'essaye possible?

+1

Cela devrait fonctionner très bien. Obtenez-vous un JSON valide à partir de manifest.php? Vous pourriez envisager de construire un tableau et d'utiliser 'json_encode' - il pourrait être plus facile d'intercepter les problèmes. Sur quoi êtes-vous exactement coincé? – ficuscr

+0

Je reçois un JSON valide, mais avec des valeurs manquantes (où le PHP devrait être). Aller à utiliser json_encode et voir si les résultats varient –

+0

Eh bien, où '$ SiteName' est-il affecté d'une valeur? Votre code "fonctionne" tel quel. – ficuscr

Répondre

1

La principale question que j'ai est de savoir d'où proviennent ces constantes? Parfois, les utilisateurs les définissent au niveau de l'hôte du serveur et les importent (environment variables). Une autre option (sorte de flous avec ce que vous faites) est de parse an INI file.

je ferais quelque chose comme ce qui suit:

<?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); 
+0

Les variables sont juste des chaînes à l'intérieur du fichier index.php, avant l'appel de manifest.php. Ce que vous avez posté ici fonctionne, cependant quand je déplace le '$ siteName' dans mon fichier d'index, il est enregistré comme' null' –

+1

Scope. Heureusement [register globals] (http://php.net/manual/en/security.globals.php) est une chose du passé ... Puissiez-vous ne jamais connaître la douleur des collisions variables! Regardez comment vous définissez une constante (http://php.net/manual/fr/function.define.php) ou ... nous explorerons les options une fois que vous aurez une meilleure compréhension de la portée. – ficuscr