/** * @param Channel $channel * @return string */ public function build(Channel $channel) { $doc = new DOMDocument('1.0'); $doc->formatOutput = true; $rss = $doc->createElement('rss'); $doc->appendChild($rss); $rss->setAttribute('version', '2.0'); $channelNode = $doc->createElement('channel'); $rss->appendChild($channelNode); foreach (self::$channelFields as $field) { if ('item' === $field) { foreach ($channel->getItems() as $item) { $itemNode = $doc->createElement('item'); foreach (self::$itemFields as $itemField) { $valueItem = call_user_func(array($item, 'get' . ucfirst($itemField))); if (null === $valueItem) { continue; } switch ($itemField) { case 'guid': break; case 'pubDate': $valueItem = $valueItem->format(DATE_RSS); default: $itemNode->appendChild($this->createTextNode($doc, $itemField, $valueItem)); } } $channelNode->appendChild($itemNode); } } else { if ('category' === $field) { /* foreach ($channel->getCategories() as $category) { }*/ } else { if ('image' === $field) { $this->appendImageNode($doc, $channelNode, $channel->getImage()); } else { if ('skipHours' === $field) { } else { if ('skipDays' === $field) { } else { $value = call_user_func(array($channel, 'get' . ucfirst($field))); if (null === $value) { continue; } if ('lastBuildDate' == $field || 'pubDate' == $field) { $value = $value->format(DATE_RSS); } $channelNode->appendChild($this->createTextNode($doc, $field, $value)); } } } } } } return $doc->saveXML(); }
protected function sortItems(Channel $channel) { $items = $channel->getItems(); $channel = clone $channel; $channel->clearItems(); $dates = array(); foreach ($items as $item) { $dates[] = $item->getPubDate()->format('U'); } array_multisort($dates, SORT_DESC, $items); $channel->addItems($items); return $channel; }