私は自分のオープングラフを開発しようとしています。オンラインでいくつかのコードを見つけ、それらをマージしようとしましたが、役に立ちませんでした。私はそれを間違ったのかしら。
// 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.'";/>
');
実験中の2番目のコード(未定義の変数を受け取った: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.'">
Joomla guruにご協力いただきありがとうございます。
_preg_match
_の代わりに DOMDocument を使用するのはどうですか?そうすれば、getElementsByTagName()
を使用して本文内のすべての画像を取得できるはずです。多分このようなものがうまくいくかもしれません:
_$buffer = JResponse::getBody();
$document = new DOMDocument();
@$document->loadHTML($buffer);
$images = $document->getElementsByTagName('img');
_
_$images
_は、ドキュメント内のすべての要素(画像)を含むオブジェクトになります。最初の画像のURLを取得したい場合は、
_ $image = $images->item(0)->getAttribute('src');
_
その後
_$doc = JFactory::getDocument();
$doc->addCustomTag( '
<meta name="og:image" content="'.$image.'">
');
_
簡単なアイデアをいくつか挙げると、コードを変更して機能させる必要があるでしょう。
エラーの場合:-未定義の変数:timage
$ timage変数が条件ステートメント内で両方のコードで宣言されていることに気づきました。
if (isset($src[1]) && $src[1] != '') {
$timage = htmlspecialchars($src[1]));
$img = 1;
}
上記の条件が満たされない場合、$ timage変数は宣言されません。ステートメントの外側でこの変数を宣言してみて、条件に従って値を変更してください。お役に立てれば。