web-dev-qa-db-ja.com

Joomla画像を抽出する方法PHP

私は自分のオープングラフを開発しようとしています。オンラインでいくつかのコードを見つけ、それらをマージしようとしましたが、役に立ちませんでした。私はそれを間違ったのかしら。

// 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にご協力いただきありがとうございます。

1
Ompit

_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.'">
');
_

簡単なアイデアをいくつか挙げると、コードを変更して機能させる必要があるでしょう。

2
johanpw

エラーの場合:-未定義の変数:timage

$ timage変数が条件ステートメント内で両方のコードで宣言されていることに気づきました。

 if (isset($src[1]) && $src[1] != '') {
            $timage = htmlspecialchars($src[1]));
            $img = 1;
         }

上記の条件が満たされない場合、$ timage変数は宣言されません。ステートメントの外側でこの変数を宣言してみて、条件に従って値を変更してください。お役に立てれば。

2
subashbasnet8