it-swarm.dev

Come ottenere l'immagine introduttiva di un articolo di Joomla

Sto cercando di personalizzare l'elenco delle categorie del mio sito Web. Quindi ho un'opzione di menu che mostra l'elenco di tutti gli articoli in una determinata categoria. In questo elenco vorrei mostrare anche l'immagine nell'articolo. Ma sfortunatamente non riesco a trovare il percorso di questa immagine introduttiva di ogni articolo per inserirlo nel tag ''.

Questo codice prende la prima immagine nell'articolo. Che non è quello che voglio.

<?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" />';}

?>

Quindi ho bisogno di ottenere l'URL dell'immagine introduttiva e impostarlo su $ image. Qualche idea per farlo?

6
Danial

Tale codice viene visualizzato nel testo dell'articolo che è necessario nella chiamata delle immagini. È codificato in json quindi devi prima decodificarlo.

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

echo $images->image_intro;

Dai un'occhiata al modello com_content/article/default.php per vedere alcune delle altre parti di dati che puoi usare per le immagini.

12
tristanbailey

Ho avuto lo stesso problema su Twitter. Stavo cercando di aggiungere la mia immagine di collegamento proprio come fa Facebook automaticamente, ma ho dovuto indagare sul CARD Validator qui https://cards-dev.Twitter.com/validator ... Per come lo faccio funzionare su Joomla 3.9.11 sta aggiungendo questo codice nella testa del mio template default.php ... Sono stato in grado di aggiungere correttamente il titolo, la descrizione e l'immagine giusta, di solito il primo sull'articolo.

<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

Quanto sopra funziona per me nella vista blog categoria, potrebbe essere diverso nella vista elenco categorie. Non dimenticare di aggiungere ovviamente i tag php. Puoi sempre usare <?php // print_r($images); ?> per stampare tutte le opzioni disponibili che potrebbero darti un indizio. O potenzialmente questo <?php // print_r($this->item); ?>

L'ho fatto in questo modo.

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

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