PrevnextService.php in Prevnext 2.0.x
File
src/PrevnextService.php
View source
<?php
namespace Drupal\prevnext;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\node\Entity\Node;
use Drupal\node\NodeInterface;
class PrevnextService implements PrevnextServiceInterface {
protected $entityTypeManager;
public $prevnext;
public function __construct(EntityTypeManager $entityTypeManager) {
$this->entityTypeManager = $entityTypeManager;
}
public function getPreviousNext(Node $node) {
$nodes = $this
->getNodesOfType($node);
$current_nid = $node
->id();
$current_key = array_search($current_nid, $nodes);
$this->prevnext['prev'] = $current_key == 0 ? '' : $nodes[$current_key - 1];
$this->prevnext['next'] = $current_key == count($nodes) - 1 ? '' : $nodes[$current_key + 1];
return $this->prevnext;
}
protected function getNodesOfType(Node $node) {
$query = $this->entityTypeManager
->getStorage('node')
->getQuery();
$bundle = $node
->bundle();
$langcode = $node
->language()
->getId();
$nodes = $query
->condition('status', NodeInterface::PUBLISHED)
->condition('type', $bundle)
->condition('langcode', $langcode)
->addMetaData('type', $bundle)
->addMetaData('langcode', $langcode)
->addTag('prev_next_nodes_type')
->execute();
return array_values($nodes);
}
}