J'ai essayé de développer mon propre opengraphe. J'ai trouvé des codes en ligne et j'essaie de les fusionner, mais en vain. Je me demande si je l'ai mal fait.
// Try to find image in article
$img = 0;
$fulltext = '';
if (isset($row->fulltext) && $row->fulltext != '') {
$fulltext = $row->fulltext;
}
$introtext = '';
if (isset($row->introtext) && $row->introtext != '') {
$fulltext = $row->introtext;
}
$content = $introtext . $fulltext;
preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $content, $src);
if (isset($src[1]) && $src[1] != '') {
$timage = htmlspecialchars($src[1]));
$img = 1;
}
$doc =& JFactory::getDocument();
$doc->addCustomTag( '
<meta property="og:title" content="'.$this->escape($this->item->title).'"/>
<meta property="og:type" content="article"/>
<meta property="og:image" content="'.$timage.'";/>
');
Deuxième code que j'expérimente (j'ai reçu la variable non définie: timage
function get_joomla_image($url)
{
if (preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $url, $match)) {
$timage = $match[1];
echo $match[1];
}
}
// get the corresponding thumbnail images
if (isset($match[1]) and !empty($match[1]))
{
$timage= htmlspecialchars(JURI::root().$match[1]);
}
$doc =& JFactory::getDocument();
$doc->addCustomTag( '
<meta name="og:image" content="'.$timage.'">
Merci gourou Joomla pour votre aide.
Pourquoi ne pas utiliser DOMDocument au lieu de preg_match
? De cette façon, vous devriez pouvoir obtenir toutes les images du corps en utilisant getElementsByTagName()
. Peut-être que quelque chose comme ceci pourrait fonctionner:
$buffer = JResponse::getBody();
$document = new DOMDocument();
@$document->loadHTML($buffer);
$images = $document->getElementsByTagName('img');
$images
Sera un objet contenant tous les éléments (images) de votre document. Si vous voulez obtenir l'URL de la première image, vous pouvez utiliser
$image = $images->item(0)->getAttribute('src');
puis
$doc = JFactory::getDocument();
$doc->addCustomTag( '
<meta name="og:image" content="'.$image.'">
');
Quelques idées rapides, vous devrez probablement modifier le code pour le faire fonctionner.
Pour votre erreur: - Variable non définie: timage
J'ai remarqué que la variable $ timage est déclarée à l'intérieur de instruction de condition dans les deux codes.
if (isset($src[1]) && $src[1] != '') {
$timage = htmlspecialchars($src[1]));
$img = 1;
}
Si la condition ci-dessus échoue, la variable $ timage ne sera jamais déclarée. Essayez de déclarer cette variable en dehors de l'instruction et modifiez la valeur selon la condition. J'espère que cela t'aides.