Carew\Event\Listener\Documents\TagsFeed::onDocuments PHP Method

onDocuments() public method

public onDocuments ( CarewEvent $event )
$event Carew\Event\CarewEvent
    public function onDocuments(CarewEvent $event)
    {
        $documents = $event->getSubject();
        $globals = $event['globals'];
        foreach ($globals->tags as $tagName => $documentList) {
            $documentList = array_filter($documentList, function (Document $document) {
                return $document->isTypePost();
            });
            $document = new Document();
            $document->setLayout('index.atom.twig')->setPath(sprintf('tags/%s/feed/atom.xml', $this->inflector->urlize($tagName)))->setFilePath(sprintf('tags/%s/feed/atom', $tagName))->setVar('post', $documentList);
            $documents[$document->getFilePath()] = $document;
        }
        $event->setSubject($documents);
        $globals->documents = array_replace($globals->documents, $documents);
    }

Usage Example

Beispiel #1
0
 public function testOnDocuments()
 {
     $documents = array();
     for ($i = 1; $i <= 20; ++$i) {
         $document = new Document(null, null, Document::TYPE_POST);
         $document->setTitle('Post #' . $i);
         $document->setTags('Tag #' . $i % 5);
         $documents[] = $document;
     }
     for ($i = 1; $i <= 20; ++$i) {
         $document = new Document(null, null, Document::TYPE_PAGE);
         $document->setTitle('Post #' . $i);
         $document->setTags('Tag #' . $i % 5);
         $documents[] = $document;
     }
     $processor = new Processor();
     $globals = $processor->processGlobals($documents);
     $event = new CarewEvent($documents, array('globals' => $globals));
     $tagFeed = new TagsFeed();
     $tagFeed->onDocuments($event);
     $documents = $event->getSubject();
     // 20 posts, 20 pages, 5 tags index
     $this->assertCount(45, $documents);
     $this->assertSame('tags/tag-1/feed/atom.xml', $documents['tags/Tag #1/feed/atom']->getPath());
 }