Extbase / Fluid blog_example Generierung eines Archive Menüs (AMENU)


Hier ein Beispiel, wie man dem Blog_Example ein Amenu hinzufügen kann:
Zunächst in Classes/Domain/Repository/PostRepository.php eine neue SelectionsMethode hinzufügen:

/**
 * Finds most recent posts by the specified blog
 *
 * @return array of years containing array of months
 */
public function findAllDates () {
  $query = $this->createQuery();
	$res = $query
		->setOrderings(array('date' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING))
		->execute();
	$yearArray = array();
	foreach($res as $row) {
		$date = $row->getDate();
		$year = $date->format('Y');
		$month = $date->format('m');
		$day = $date->format('d');
		if(!isset($yearArray[$year]))
			$yearArray[$year] = array('count' => 0);
		if(!isset($yearArray[$year]['months'][$month]))
			$yearArray[$year]['months'][$month] = array('count' => 0);
		if(!isset($yearArray[$year]['months'][$month]['days'][$day]))
		  $yearArray[$year]['months'][$month]['days'][$day] = array('count' => 0);
		$yearArray[$year]['count']++;
		$yearArray[$year]['months'][$month]['count']++;
		$yearArray[$year]['months'][$month]['days'][$day]['count']++;
	  	$yearArray[$year]['value'] = intval($year);
		$yearArray[$year]['datetime'] = $date;
		$yearArray[$year]['months'][$month]['value'] = intval($month);
		$yearArray[$year]['months'][$month]['datetime'] = $date;
		$yearArray[$year]['months'][$month]['days'][$day]['value'] = intval($day);
		$yearArray[$year]['months'][$month]['days'][$day]['datetime'] = $date;
	}
	return $yearArray;
}

Ergebniss ist ein Array, welches alle vorhandenen Jahre und die Anzahl der Posts darin enthält darin ein Array, dass alle vorhandenen Monate enthält, darin alle vorhandene Tage.

Dann im PostController die Action hinzufügen: Classes/Controller/PostController.php

/**
 * Displays an archive Menu a new post
 *
 * @return string
 */
public function generateArchiveMenuAction() {
  $this->view->assign('years', $this->postRepository->findAllDates());
}

und diese natürlich in der ext_localconf.php zur Liste der erlaubten Actions hinzufügen. Dann ein zugehöriges Template erstellen:
Resources/Private/Templates/Post/generateArchiveMenu.html

<f:if condition="{years}">
  <f:then>
    <ul>
      <f:for each="{years}" as="year">
        <f:for each="{year.months}" as="month">
          <li>
              <f:link.action action="list" controller="Post" pageUid="11"  arguments="{year: year.value, month : month.value}">
                <f:format.date format="F Y">{month.datetime}</f:format.date>
              </f:link.action> ({month.count})
          </li>
        </f:for>
      </f:for>
    </ul>
  </f:then>
</f:if>

Lässt man die innere for-Schleife und die Ausgabe des Monats weg, hat man eine Ausgabe nach Jahren; fügt man eine weitere for-Schleife hinzu, hat man eine Aufschlüsselung nach Monaten.

In einem nächsten Schritt muss man nun für eine Listenansicht mit Respektierung des Datums sorgen.

Getagged mit: ,
Veröffentlicht unter TYPO3 Technik
Ein Kommentar auf “Extbase / Fluid blog_example Generierung eines Archive Menüs (AMENU)
  1. Jonas sagt:

    Habt Ihr den ExtBase Pager von Nils gesehen?
    http://forge.typo3.org/projects/show/extension-extbase_pager

    Man kann damit super einfach Pager erstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*