#php
#php
Вопрос:
Я пытаюсь включить анализатор php, который будет извлекать файл rss 2.0:
<?php
$doc = new DOMDocument();
$doc->load('http://www.domain.com/blog/feed/');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
);
array_push($arrFeeds, $itemRSS);
}
//And trying to parse the return into a template:
$view_doc->assign("DOCID", $arrFeeds);
?>
Но полученный результат — это просто «Массив» 🙁
Я надеюсь, что вы можете дать мне несколько советов, ребята 🙂
С уважением!
Комментарии:
1. Рассматривали ли вы возможность использования открытого проекта SimplePie? Я использовал его в прошлом для обработки RSS, и он очень хорош!
Ответ №1:
Удалите $docidtrue = return $arrFeeds;
и замените $docidtrue
на $arrFeeds
. Это должно работать так, как вы хотели.
Это выглядело бы так:
<?php
$doc = new DOMDocument();
$doc->load('http://www.domain.com/blog/feed/');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
);
array_push($arrFeeds, $itemRSS);
}
//And trying to parse the return into a template:
$view_doc->assign("DOCID", $arrFeeds);
?>
return
это не то, что вы хотели. Возможно, вы искали break
(который завершает весь текущий цикл) или continue
(который завершает текущую итерацию цикла и переходит к следующему).
Редактировать:
Поскольку вам нужна некоторая строка для передачи в assign()
метод, мы можем создать что-то, что будет отображать список элементов вместо того, чтобы собирать их для дальнейшей обработки 🙂
<?php
$doc = new DOMDocument();
$doc->load('http://www.domain.com/blog/feed/');
$feeds = '';
foreach ($doc->getElementsByTagName('item') as $node) {
$feeds .= '<div>'
.'<h2>'.$node->getElementsByTagName('title')->item(0)->nodeValue.'</h2>' // title
.'<p>'.$node->getElementsByTagName('description')->item(0)->nodeValue.'</p>' // desc
.'<p><a href="'.$node->getElementsByTagName('link')->item(0)->nodeValue.'">link</a></p>' // link
.'<p>'.$node->getElementsByTagName('pubDate')->item(0)->nodeValue.'</p>' // date
.'</div>';
}
//And trying to parse the return into a template:
$view_doc->assign("DOCID", $feeds);
?>
Это должно сработать 🙂
Но помните — то, что я только что сделал, просто неправильно. Вы должны проанализировать переменную, полученную из исходного решения в шаблоне. Я только что создал его в неправильном месте и передал сгенерированную строку в представление. Просмотр предназначен только для преобразования данных в отображаемый код (HTML).
Комментарии:
1. Некоторые подробности о
return
здесь: php.net/manual/en/function.return.php2. @Tadeck пробовал это раньше, и результат просто выглядит как «массив» : ( Спасибо.
3. Это потому, что то, что вы делаете в $view_doc->assign(). Если бы вы могли указать его источник или хотя бы сказать, чего вы ожидаете от его второго параметра, это было бы полезно. Из того, что вы говорите, я могу просто предположить, что это
$view_doc->assign("DOCID", $some_option)
пытается отображаться$some_option
в виде строки, и это оценивается как «массив».4. Скажите: 1) что такое $ view_doc?, 2) что нужно передать в $ view_doc-> assign() в качестве второго параметра.
5. Я прошу прощения, что не сделал ссылки на движок за сценой, действительно ли XTemplate понимает то, что вы сказали, я посмотрю, какую информацию я могу проанализировать
Ответ №2:
$docidtrue = return $arrFeeds;
Правильно, return
просто возвращает значение вызывающей функции. Вы не можете назначить это чему-либо, потому что это сразу покидает функцию.
Я понимаю это, но я перепробовал все возможные способы, даже как предложил Тадек, и на выходе получается просто «Массив»
$view_doc->assign("DOCID", $docidtrue);
Что такое $view_doc
? Поскольку он вызывается assign
, я собираюсь предположить, что это какой-то движок для создания шаблонов, скорее всего smarty, и если да, то как выглядит шаблон, который печатает результаты?
Комментарии:
1. Я понимаю это, но я перепробовал все возможные способы, даже как предложил Тадек, и на выходе получается просто «Массив»
2. @Souza Смотрите запрос на разъяснения в строке.
3. @Tadeck Также, как отмечалось в комментарии выше, Souza получает вывод «Array», но эхо отсутствует. Скорее всего, это означает, что массив не зацикливается должным образом в шаблоне, поэтому я запрашиваю код шаблона
4. О, мы просто оба просили об одном и том же, но вы были первым на 2 минуты 🙂 Да, я знаю, что это было бы полезно — лучшее, что нужно сделать, это изменить код, отображающий это в представлении, но из-за отсутствия того, что нам нужно изменить, я предложил временное решение с генерацией строки и передачей ее вместо массива. Я знаю, что это нарушает хорошие практики, но Соуза учится 🙂 и ему нужно с чем-то поиграть — если он предоставит код шаблона, мы сможем помочь ему больше.
Ответ №3:
вы не можете написать: $docidtrue = return $arrFeeds; особенно в foreach, это означает, что он просто прервется с первого раза … более того, вы не можете изменить возврат
Ответ №4:
проблема здесь выглядит как код «$ docidtrue = return $ arrFeeds;», основанный на сообщении «неожиданный T_RETURN». Я бы сказал, что вам, вероятно, следует удалить «$ docid =»