Skip to content

Instantly share code, notes, and snippets.

@benjaminrau
Last active August 29, 2015 13:58
Show Gist options
  • Select an option

  • Save benjaminrau/10394546 to your computer and use it in GitHub Desktop.

Select an option

Save benjaminrau/10394546 to your computer and use it in GitHub Desktop.
Prev / Next Links for tx_news detail view. Works only if your list view is sorted by "datetime desc"
{namespace vm=Vm\Vmtemplates\ViewHelpers}
<div class="navigation">
<vm:link.next newsItem="{newsItem}" settings="{settings}" class="news-next">
<span></span>
</vm:link.next>
<vm:link.prev newsItem="{newsItem}" settings="{settings}" class="news-prev">
<span></span>
</vm:link.prev>
</div>
<?php
namespace Vm\Vmtemplates\ViewHelpers;
/*****************************************************************
* Copyright notice
*
* (c) 2014 Benjamin Rau <rau@codearts.at>
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
*****************************************************************/
/**
* ViewHelper to render links for prev news
*/
class LinkViewHelper extends \Tx_News_ViewHelpers_LinkViewHelper {
/**
* @var array $orderings
*/
protected $orderings = array();
/**
* @var \Tx_News_Domain_Repository_NewsRepository
*/
protected $newsRepository;
/**
* @var \Tx_News_Domain_Repository_NewsRepository $newsRepository
* @return void
*/
public function injectNewsRepository(\Tx_News_Domain_Repository_NewsRepository $newsRepository) {
$this->newsRepository = $newsRepository;
}
/**
* Render link to news item or internal/external pages
*
* @param \Tx_News_Domain_Model_News $newsItem current news object
* @param array $settings
* @param boolean $uriOnly return only the url without the a-tag
* @param array $configuration optional typolink configuration
* @return string link
*/
public function render(\Tx_News_Domain_Model_News $newsItem, array $settings = array(), $uriOnly = FALSE, $configuration = array()) {
$objectManager = \t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager');
/** @var \Tx_Extbase_Persistence_Typo3QuerySettings $defaultQuerySettings */
$defaultQuerySettings = $objectManager->get('Tx_Extbase_Persistence_Typo3QuerySettings');
$defaultQuerySettings->setStoragePageIds(array($newsItem->getPid()));
$this->newsRepository->setDefaultQuerySettings($defaultQuerySettings);
$this->newsRepository->setDefaultOrderings($this->orderings);
$query = $this->newsRepository->createQuery();
$newsItems = $query->execute()->toArray();
$newsItemIndex = array_search($newsItem, $newsItems, TRUE);
if (0 === (integer) array_search($newsItem, $newsItems, TRUE)) {
return NULL;
}
$newsItem = $newsItems[$newsItemIndex-1];
return parent::render($newsItem, $settings, $uriOnly, $configuration);
}
}
<?php
namespace Vm\Vmtemplates\ViewHelpers\Link;
/*****************************************************************
* Copyright notice
*
* (c) 2014 Benjamin Rau <rau@codearts.at>
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
*****************************************************************/
use Vm\Vmtemplates\ViewHelpers\LinkViewHelper;
/**
* ViewHelper to render links for next news
*/
class NextViewHelper extends LinkViewHelper {
/**
* @var array $orderings
*/
protected $orderings = array(
'datetime' => \Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING,
'tstamp' => \Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING
);
}
<?php
namespace Vm\Vmtemplates\ViewHelpers\Link;
/*****************************************************************
* Copyright notice
*
* (c) 2014 Benjamin Rau <rau@codearts.at>
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
*****************************************************************/
use Vm\Vmtemplates\ViewHelpers\LinkViewHelper;
/**
* ViewHelper to render links for prev news
*/
class PrevViewHelper extends LinkViewHelper {
/**
* @var array $orderings
*/
protected $orderings = array(
'datetime' => \Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING,
'tstamp' => \Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment