Я также следовал руководству на Zend.com и обнаружил, что существует проблема с первым блоком кода, аргументы для Zend_Feed_Reader::addPrefixPath
расположены в неправильном порядке и должны быть такими :
if(!Zend_Feed_Reader::isRegistered('JungleBooks')) {
Zend_Feed_Reader::addPrefixPath(
'My_FeedReader_Extension', '/path/to/My/FeedReader/Extension'
);
Zend_Feed_Reader::registerExtension('JungleBooks');
}
Я полагаю, вы зарегистрировали свое расширение таким образом?
Это сделано, и с пользовательским расширением я продолжил.
Использование полного примера с Zend.com просто дало мне пустую строку.
Попробовав несколько разных обозначений для попадания в пространство имен, таких как двойные двоеточия ::
, скобки []
и даже @
символы, я почти сдался.
А потом что-то всплыло в голове; что если я попытаюсь получить свой XPath без string()
переноса, и я так и сделал (я использовал ваш код, чтобы сделать его еще более понятным):
class Zend_Feed_Reader_Extension_Media_Entry
extends Zend_Feed_Reader_Extension_EntryAbstract
{
public function getThumbnails()
{
if(isset($this->_data['thumbnails'])){
return $this->_data['thumbnails'];
}
$thumbnail_list = $this->_xpath->evaluate(
$this->getXpathPrefix() . '/media:thumbnail'
);
$thumbnails = array();
// According to your XML sample there are multiple thumbnails per item, so we're looping through them and adding them to a simple array
foreach($thumbnail_list as $_thumbnail_element){
array_push($thumbnails, array(
'url' => $_thumbnail_element->getAttribute('url'),
'width' => $_thumbnail_element->getAttribute('width'),
'height' => $_thumbnail_element->getAttribute('height'),
));
}
if(!count($thumbnails)){
$thumbnails = null;
}
$this->_data['thumbnails'] = $thumbnails;
return $this->_data['thumbnails'];
}
protected function _registerNamespaces()
{
$this->_xpath->registerNamespace('media', 'http://search.yahoo.com/mrss');
}
}
И вуаля, есть твои эскизы.