Carew\Event\Listener\Documents\Tags::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'];
        $tags = array();
        foreach ($globals->tags as $tagName => $documentList) {
            $tagDocument = new Document();
            $tagDocument->setLayout('default.html.twig')->setBody('{{ render_documents(carew.documents) }}')->setPath(sprintf('tags/%s.html', $this->inflector->urlize($tagName)))->setTitle('Tag #' . $tagName)->setFilePath('tags/' . $tagName)->setNavigations(array('tags', 'sub-tags'))->setVar('documents', $documentList);
            $documents[$tagDocument->getFilePath()] = $tagDocument;
            $tags[$tagDocument->getFilePath()] = $tagDocument;
        }
        $tagsDocument = new Document();
        $tagsDocument->setLayout('default.html.twig')->setBody('{{ render_documents(carew.tags) }}')->setPath('tags/index.html')->setTitle('Tags')->setFilePath('tags')->setNavigations('tags')->setVar('tags', $tags);
        $documents[$tagsDocument->getFilePath()] = $tagsDocument;
        $globals->documents = array_replace($globals->documents, $documents);
        $event->setSubject($documents);
    }

Usage Example

Beispiel #1
0
 public function testOnDocuments()
 {
     $tags = new Tags();
     $documents = array();
     for ($i = 1; $i <= 20; ++$i) {
         $document = new Document();
         $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));
     $tags->onDocuments($event);
     $documents = $event->getSubject();
     // 20 post, 1 page for all tags, 5 tags
     $this->assertCount(26, $documents);
     $this->assertSame('tags/tag-1.html', $documents['tags/Tag #1']->getPath());
 }