web-dev-qa-db-ja.com

Joomla記事のイントロ画像を取得する方法

ウェブサイトのカテゴリリストをカスタマイズしようとしています。だから私はすべての記事のリストが特定のカテゴリであることを示すメニューオプションがあります。このリストでは、記事の画像も紹介したいと思います。ただし、残念ながら、各記事のこの紹介画像を ''タグに配置するためのパスが見つかりません。

このコードは、記事の最初の画像を取ります。それは私が望むものではありません。

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

?>

したがって、イントロ画像のURLを取得し、$ imageに設定する必要があります。それを行うアイデアはありますか?

6
Danial

そのコードは、画像の呼び出しで必要な記事のテキストを探しています。これはJSONエンコードされているため、最初にデコードする必要があります。

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

echo $images->image_intro;

Com_content/article/default.phpテンプレートを見て、画像に使用できるデータの他の部分のいくつかを確認してください。

12
tristanbailey

Twitterでも同じ問題がありました。 Facebookが自動的に行うようにリンク画像を追加しようとしましたが、ここでCARDバリデーターを調査する必要がありました https://cards-dev.Twitter.com/validator ... Joomla 3.9.11では、テンプレートdefault.phpの先頭にこのコードを追加しています...タイトル、説明、適切な画像(通常は記事の最初の画像)を適切に追加できました。

<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

上記はカテゴリブログビューで機能しますが、カテゴリリストビューでは異なる場合があります。 phpタグを追加することを忘れないでください。いつでも<?php // print_r($images); ?>を使用して、手掛かりになる可能性のあるすべての使用可能なオプションを出力できます。または潜在的にこれ<?php // print_r($this->item); ?>

私はこのようにしました。

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

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