Drupal 8 загрузка ноды по AJAX

Предлагаю «каркас» модуля для Drupal 8, который позволит вам получать ноды по их ID через AJAX. В приведенном ниже коде реализовано получение ноды с помощью метода Node::load, который пришел на замену функции node_load() и вывод заголовка и содержания ноды в виде JSON-объекта. Аналогично можно добавлять и другие поля ноды.

Собственно, код модуля:

< ?php
namespace Drupal\ajax_loader\Controller;
 
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\node\Entity\Node;
 
class Ajax_loaderController extends ControllerBase
{
    public function load()
    {
        $nid = intval($_GET['nid']);
	$node = Node::load($nid);
	$response = new JsonResponse();
        $response->setData(array('title' => $node->getTitle(), 'body' => $node->get("body")->value));
        return $response;
    }
}

Весь цимес заключается в том, что метод контроллера обязательно должен возвращать объект ответа, просто строку вернуть не получится. Однако, при возврате обычного ответа Drupal оборачивает его в HTML-шаблон, который при использовании AJAX нам не нужен. Для этого и используется JsonResponse::setData(), который возвращает JSON, сформированный из переданного массива.

UPD: Для получения ID ноды по ее алиасу можно использовать метод \Drupal::service(‘path.alias_manager’)->getPathByAlias($alias), который вернет системный путь вида node/XX

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *