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 !

9 réponses


Gold weavers
Réponse acceptée

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.

Genki
Auteur
Réponse acceptée

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().

Genki
Auteur

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 :/

Genki
Auteur

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é

Ahah, excuse moi. J'ai pas d'autre solution en tête pour le moment, désolé.

Genki
Auteur

C'est pas grave, je te remercie de t'être arrêter sur mon problème au moins :)

Ca n'a pourtant rien de long et compliqué, tu peux utiliser le template uniquement pour les balises mêtas ;)

Content d'avoir pu t'aider ;)