web-dev-qa-db-fra.com

Comment obtenir l'image d'introduction d'un article de joomla

J'essaie de personnaliser la liste des catégories de mon site Web. J'ai donc une option de menu qui montre la liste de tous les articles est une certaine catégorie. Dans cette liste, je voudrais également montrer l'image de l'article. Mais malheureusement, je ne trouve pas le chemin de cette image d'introduction de chaque article pour le mettre dans la balise ''.

Ce code prend la première image de l'article. Ce qui n'est pas ce que je veux.

<?php
$text = $article->introtext;
if(preg_match('/<\s*img[^>]+>/Ui', $text, $matches)){

   $image=$matches[0];
   $text = str_replace($image,'',$text);
}
if ($matches) {
$image = str_replace('img src="','img width="150px" src="/demo/persianlondon/',$image);
$image = str_replace("caption","", $image);
echo '' . $image . '';
}
else {echo '<img width="150px" src="http://goo.gl/k47rNN" class="defaultArticleImage" />';}

?>

Il me faut donc récupérer l'URL de l'image d'introduction et la définir pour $ image. Une idée de le faire?

6
Danial

Ce code cherche dans le texte de l'article dont vous avez besoin est dans l'appel à images. Il est encodé en json, vous devez donc d'abord le décoder.

$images  = json_decode($this->item->images);

echo $images->image_intro;

Consultez le modèle com_content/article/default.php pour voir certaines des autres parties de données que vous pouvez utiliser pour les images.

12
tristanbailey

J'ai eu le même problème sur Twitter. J'essayais d'ajouter ma photo de lien comme Facebook le fait automatiquement, mais j'ai dû examiner le validateur de la carte ici https://cards-dev.Twitter.com/validator ... La façon dont je le fais fonctionne sur Joomla 3.9.11 ajoute ce code dans l'en-tête de mon modèle default.php ... J'ai pu ajouter correctement le titre, la description et la bonne image, généralement la première de l'article.

<head>

<?php 
//Added for Twitter
$option = JRequest::getCmd('option');
$view = JRequest::getCmd('view');
if ($option=="com_content" && $view=="article") {
    $ids = explode(':',JRequest::getString('id'));
    $article_id = $ids[0];
    $article =& JTable::getInstance("content");
    $article->load($article_id);
    $theArticle = $article->get("title");
    $theImages = $article->get("images");   
    $pictures = json_decode($theImages); // Split the parameters apart
    $timage= "http://yourdomain.com/".$pictures->{'image_intro'};
}
$doc =& JFactory::getDocument();
$doc->addCustomTag( '
<meta name="Twitter:title" content="'.mb_strimwidth(strip_tags($theArticle),0,225, " ...").'"=""/>
<meta name="Twitter:card" content="summary_large_image">
<meta name="Twitter:site" content="yoursite">
<meta name="Twitter:creator" content="yourcreator">
<meta name="Twitter:url" content="'.JURI::current().'">
<meta name="Twitter:description" content="'.mb_strimwidth(strip_tags($doc->getMetaData( 'description' )),0,225, " ...").'"=""/>
<meta name="Twitter:image" content="'.$timage.'">
');
?>
    <jdoc:include type="head" />
    <?php $this->loadBlock('head') ?>

</head>
2
Luis H Cabrejo

Ce qui précède fonctionne pour moi dans la vue de la catégorie blog, il peut être différent dans la vue liste des catégories. N'oubliez pas d'ajouter les balises php évidemment. Vous pouvez toujours utiliser <?php // print_r($images); ?> pour imprimer toutes les options disponibles qui pourraient vous donner un indice. Ou potentiellement cette <?php // print_r($this->item); ?>

Je l'ai fait de cette façon.

<?php
$images         = json_decode($this->item->images); 
$introImage   = $images->image_intro;
?>

...src="<?php echo $introImage ; ?>"....
0
Eoin