web-dev-qa-db-fra.com

Comment extraire une image Joomla PHP pour Opengraph

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.

1
Ompit

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.

2
johanpw

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.

2
subashbasnet8