📅  最后修改于: 2023-12-03 15:30:34.297000             🧑  作者: Mango
Drupal是一款流行的开源内容管理系统,可用于构建各种网站和应用程序。在Drupal 8中,我们可以使用JavaScript编写主题,并通过Drupal API获取和操纵节点。
在本文中,我们将探讨如何使用JavaScript和Drupal 8 API获取节点。
首先,我们需要创建一个新的Custom主题。在Drupal 8中,我们可以通过执行以下命令来创建一个新的Custom主题:
$ drupal generate:theme
该命令将提示您输入新主题的名称和描述等信息。完成后,Drupal将生成一个基本的主题文件结构。
在我们的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获取节点。回调函数将在请求成功时执行。
接下来,我们将添加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格式,然后返回响应。
最后,我们将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文件添加到主题中。这个过程可能有点复杂,但是一旦你掌握了它,获取和操纵节点将变得很简单。