domxpath — ошибка PHP при попытке получить скрипт в цикле

Я использую WordPress с плагином Расширенные настраиваемые поля.

Я хочу получить внутренний текст с некоторых из моих веб-сайтов
если я делаю это с этим PHP-скриптом, он работает

$some_link = 'http://tweakers.net/';
$tagName = 'span';
$attrName = 'class';
$attrValue = 'subtitle';

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);

$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;

function getTags( $dom, $tagName, $attrName, $attrValue ){
$html = '';
$domxpath = new DOMXPath($dom);
$newDom = new DOMDocument;
$newDom->formatOutput = true;

$filtered = $domxpath->query("//$tagName" . '[@' . $attrName . "='$attrValue']");
// $filtered =  $domxpath->query('//div[@class="className"]');
// '//' when you don't know 'absolute' path

// since above returns DomNodeList Object
// I use following routine to convert it to string(html); copied it from someone's post in this site. Thank you.
$i = 0;
while( $myItem = $filtered->item($i++) ){
$node = $newDom->importNode( $myItem, true );    // import node
$newDom->appendChild($node);                    // append node
}
$html = $newDom->saveHTML();
return $html;
}

Только я хочу сделать это в цикле, чтобы я мог получить больше от различных сайтов

когда я ставлю код так:

$rows = get_field('get_attribute');
if($rows)
{
foreach($rows as $row)
{
THE SAME AS ABOVE PHP CODE
}
}

Тогда я получаю эту ошибку

  Fatal error: Call to undefined function getTags()

когда я ставлю функцию выше

        $html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;

я понял ошибку

 Fatal error: Cannot redeclare getTags()

когда я поднимаю все выше, я ничего не получаю без ошибок, это просто пусто

Я надеюсь, что кто-то может мне помочь, заранее спасибо

0

Решение

нашел это правильный путь

$rows = get_field('get_attribute');
if($rows)
{
foreach($rows as $row)
{
$some_link = $row['url'];
$tagName = $row['attribute'];
$attrName = $row['attribute_name'];
$attrValue = $row['attribute_value'];

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);

$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;

}
}

function getTags( $dom, $tagName, $attrName, $attrValue ){
$html = '';
$domxpath = new DOMXPath($dom);
$newDom = new DOMDocument;
$newDom->formatOutput = true;

$filtered = $domxpath->query("//$tagName" . '[@' . $attrName . "='$attrValue']");
// $filtered =  $domxpath->query('//div[@class="className"]');
// '//' when you don't know 'absolute' path

// since above returns DomNodeList Object
// I use following routine to convert it to string(html); copied it from someone's post in this site. Thank you.
$i = 0;
while( $myItem = $filtered->item($i++) ){
$node = $newDom->importNode( $myItem, true );    // import node
$newDom->appendChild($node);                    // append node
}
$html = $newDom->saveHTML();
return $html;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]