<?php
namespace Drupal \ dfr_node_custom;
use Drupal \ node \ Entity \ Node;
класс TwigExtension extends \ Twig_Extension {/ ** * Формирует список всех фильтров Twig, которыеэто расширение определяет.* / public function getFunctions () {return [new \ Twig_SimpleFunction ('customPrevious', массив ($ this, 'customPrevious')), new \ Twig_SimpleFunction ('customNext', array ($ this, 'customNext'))];}
/**
* Gets a unique identifier for this Twig extension.
*/
public function getName() {
return 'dfr_node_custom.prevnextnode_extension';
}
/**
* Previous node
* @param $prevNextInfo
* @return array|bool
*/
public function customPrevious($prevNextInfo)
{
$node = Node::load($prevNextInfo['nid']);
return $this->getNodeInformation($prevNextInfo['node_type'], $node->getCreatedTime(), '<', 'DESC');
}
/**
* Next node
* @param $prevNextInfo
* @return array|bool
*/
public function customNext($prevNextInfo)
{
$node = Node::load($prevNextInfo['nid']);
return $this->getNodeInformation($prevNextInfo['node_type'], $node->getCreatedTime(), '>', 'ASC');
}
/**
* Get current langcode
* @return string
*/
public function getCurrentLangcode()
{
return \Drupal::languageManager()->getCurrentLanguage()->getId();
}
/**
* Previous or next node
* @param $node_type
* @param $date
* @param $date_comparator
* @param $sort_order
* @return array|bool
*/
public function getNodeInformation($node_type, $date, $date_comparator, $sort_order)
{
$prev_or_next = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('status', 1)
->condition('created', $date, $date_comparator)
->sort('created', $sort_order)
->range(0, 1)
->execute()
;
if(!$prev_or_next) return false;
// Get the node itself
$prev_or_next = Node::load(array_values($prev_or_next)[0]);
// Get the available languages for the given node
$available_languages = $prev_or_next->getTranslationLanguages();
// If the current language is defined in the available languages array
if(array_key_exists($this->getCurrentLangcode(), $available_languages)){
// Get the translated node
$translation = $prev_or_next->getTranslation($this->getCurrentLangcode());
// Return the information you need, can be w/e you want.
return [
'title' => $translation->getTitle(),
'id' => $translation->id(),
'path' => $translation->toUrl()->toString()
];
}
return false;
}
}?>
services: dfr_node_custom.twig.TwigExtension: class: Drupal \ dfr_node_custom \ Теги TwigExtension: - {name: twig.extension}
{% set prevNextInfo = {'node_type': 'article', 'nid': 2}%}
{% if prevNextInfo.node_type и prevNextInfo.nid и (customPrevious (prevNextInfo) или customNext (prevNextInfo))%} {% if customPrevious (prevNextInfo)%} {{'Предыдущий узел'}}: {{customPrevious (prevNextInfo) .title}} {% endif%} {% if customNext (prevNextInfo)%} {{'Следующий узел '}}: {{customNext (prevNextInfo) .title}} {% endif%} {% endif%}