Bonjour,
Je viens ici pour poser une petite question qui semble bête mais qui me pourrie ces derniers jours ^^
Je souhaite utiliser les metadata d'OpenGraph (l'API de Facebook).
En gros je souhaite pouvoir me servir des meta pour forcer le partage facebook à avoir les informations de l'article à partager (photo de couverture, texte, auteur etc..)
Cependant, mon site est ainsi :
Je charge la page index.php en premier lieu, et je charge les articles dans une div "content" avec un include PHP.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Mon super site</title>
<!-- Injecter des metadata ici provenant de la page article plus bas -->
</head>
<body>
<div id="content">
<?php
switch($_GET['page']) {
case 'contact':
include('./inc/contact.php');
break;
case 'article':
include('./inc/article.php');
break;
default:
include('./inc/default.php');
break;
}
?>
</div>
</body>
</html>
Ce qui fait que j'ignore comment "ré-injecter" des metadata de CES articles vu que les headers dont déjà envoyés avec index.php
Si vous avez une idée, je suis preneur
Merci !
et si tu utilise un moteur de template (ex : blade).
Par exemple en blade:
Dans ton template.blade.php (qui serait ton parent) :
<html>
<head>
@yield('meta')
</head>
<body>
@yield('content')
</body>
</html>
Dans ton contact.blade.php
@extends('template')
@section('meta')
<meta charset="UTF-8">
@endsection
@section('content')
<p>Du blabla</p>
@endsection
Et pour les autres le meme système.
Bon cette histoire de template, m'a fait essayer quelque chose dans le même genre.
En gros, voilà comment je procède, c'est pas très élégant, mais c'est tout ce que j'ai trouvé :
La page article type:
<meta property="og:locale" content="fr_FR" />
<meta property="og:type" content="article" />
etc...
<?php
// Oui c'est pas très beau, mais dans le fond ça fonctionne
$head = ob_get_contents();
ob_end_clean();
ob_start();
?>
..Et ici le contenu de l'article..
<?php
ob_start();
switch($_GET['page']) {
case 'contact':
include('./inc/contact.php');
break;
case 'article':
include('./inc/article.php');
break;
default:
include('./inc/default.php');
break;
}
$content = ob_get_contents();
ob_end_clean();
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Mon super site</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<?php
echo $head; // Mes metas OpenGraph chargé dans le ob_start plus haut
?>
</head>
<body>
<div id="content">
<?= $content; ?>
</div>
</body>
</html>
Les metas apparaissent bien maintenant dans le code source, tout fonctionne, c'est pas très beau, mais ça fera l'affaire ;)
Je ne connais pas Opengraph mais peut-être insérer tes meta via le selecteur head, en te servant de jquery.
par ex avec la méthode append().
Le problème est qu'elle est générée du coup après. Si on regarde le devtool, ça fonctionne, mais si on regarde le code source, c'est inexistant. Et j'ai bien peur que OpenGraph se sert de ce qu'il trouve dans le code source :/
Oulà, trop compliqué et long à mettre en place, c'est pour un petit site d'une association bénévole, je vais pas rentrer dans le compliqué
Ca n'a pourtant rien de long et compliqué, tu peux utiliser le template uniquement pour les balises mêtas ;)