📌  相关文章
📜  drupal 8 获取节点 - Javascript (1)

📅  最后修改于: 2023-12-03 15:30:34.297000             🧑  作者: Mango

Javascript主题:使用Drupal 8获取节点

简介

Drupal是一款流行的开源内容管理系统,可用于构建各种网站和应用程序。在Drupal 8中,我们可以使用JavaScript编写主题,并通过Drupal API获取和操纵节点。

在本文中,我们将探讨如何使用JavaScript和Drupal 8 API获取节点。

步骤
步骤1:创建一个空的Custom主题

首先,我们需要创建一个新的Custom主题。在Drupal 8中,我们可以通过执行以下命令来创建一个新的Custom主题:

$ drupal generate:theme

该命令将提示您输入新主题的名称和描述等信息。完成后,Drupal将生成一个基本的主题文件结构。

步骤2:编写JavaScript代码

在我们的Custom主题中,我们创建一个JavaScript文件,例如“custom.js”。然后,我们将添加以下代码以使用Drupal 8 API获取节点:

(function($) {
  $(document).ready(function() {
    // Load node by ID.
    Drupal.ajax({
      url: '/node/' + nodeId + '/json',
      success: function (data) {
        console.log(data);
      }
    }).execute();
  });
})(jQuery);

在这里,我们在document ready事件中使用jQuery准备了一个函数。我们通过Drupal.ajax函数使用节点ID和JSON格式的URL获取节点。回调函数将在请求成功时执行。

步骤3:添加Drupal路由和控制器

接下来,我们将添加Drupal路由和控制器以处理来自JS代码的请求。我们需要编辑自定义主题的“mytheme.routing.yml”文件。

mytheme.node_controller:
  path: '/node/{node}/json'
  defaults:
    _controller: '\Drupal\mytheme\Controller\NodeController::nodeJson'
    _title: 'Node JSON'
  requirements:
    _permission: 'access content'
    node: \d+

这是我们需要添加的路由段。在这里,我们定义了路由的参数,它需要一个数字节点ID。我们还定义了控制器处理程序以响应请求。

namespace Drupal\mytheme\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\node\Entity\Node;

/**
 * Defines the NodeController class.
 */
class NodeController extends ControllerBase {

  /**
   * Return node as a JSON object.
   */
  public function nodeJson($node) {
    $node = Node::load($node);
    $nodeSerialized = \Drupal::service('serializer')->serialize($node, 'json', ['plugin_id' => 'entity']);
    return JsonResponse::fromJsonString($nodeSerialized);
  }

}

在这里,我们创建了一个名为NodeController的控制器,并定义了nodeJson函数以获取节点,序列化为JSON格式,然后返回响应。

步骤4:将JavaScript文件添加到主题中

最后,我们将custom.js添加到Custom主题的.info.yml文件中,并定义Drupal behaviors,以在页面加载时调用JavaScript代码。

name: MyTheme
type: theme
description: 'Custom theme for Drupal 8.'
package: Custom
core: 8.x

libraries:
  - mytheme/my_behaviors

my_behaviors:
  version: 1.x
  js:
    js/custom.js: {}
  dependencies:
    - core/jquery
(function($) {
  Drupal.behaviors.myBehavior = {
    attach: function(context, settings) {
      // Your JavaScript code here
    }
  };
})(jQuery);
结论

在本文中,我们介绍了使用JavaScript和Drupal 8 API获取节点的方法。我们首先创建了一个Custom主题,然后编写了JavaScript代码和路由控制器处理程序,最后将JavaScript文件添加到主题中。这个过程可能有点复杂,但是一旦你掌握了它,获取和操纵节点将变得很简单。