Không cần kiểm tra URL tôi muốn biết trang hiện tại có phải là trang nút không. Chúng tôi dự định sử dụng các bí danh URL để chúng tôi không muốn dựa vào cấu trúc '/ nút / *'.
Có một số biến trang hoặc một cái gì đó sẽ chỉ ra một trang nút?
Không cần kiểm tra URL tôi muốn biết trang hiện tại có phải là trang nút không. Chúng tôi dự định sử dụng các bí danh URL để chúng tôi không muốn dựa vào cấu trúc '/ nút / *'.
Có một số biến trang hoặc một cái gì đó sẽ chỉ ra một trang nút?
Câu trả lời:
\Drupal::request()->attributes->get('node');
Lấy từ đây: https://api.drupal.org/api/drupal/core!lib!Drupal.php/feft/Drupal%3A%3Arequest/8
Bây giờ các tài liệu nói không bao giờ sử dụng chức năng này, nhưng tôi đã sử dụng điều này để xác định loại trang nào tôi đang truy cập.
Có một chức năng khác, nhưng tôi không chắc nó áp dụng trong trường hợp của bạn:
https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/feft/node_is_page/8
Ít nhất, nếu bạn không có thực thể, bạn có thể bắt chước điều đó trong mã của bạn:
$route_match = \Drupal::routeMatch();
if ($route_match->getRouteName() == 'entity.node.canonical') {
return true;
}
$route_match->getRouteName() == 'entity.node.revision'
để làm việc trên phiên bản là tốt.
Trong mẫu trang, một biến cho nút đã có sẵn, bạn có thể sử dụng theo twig.
Để biết, nếu trang hiện tại là một nút, bạn có thể kiểm tra, nếu node
tồn tại:
trang.html.twig
{% if node %}
<h1>This is a node</h1>
{% endif %}
Điều này là có thể, bởi vì mã này là cốt lõi:
core/includes/theme.inc:
function template_preprocess_page(&$variables) {
...
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$variables['node'] = $node;
}
}
Điều này sẽ hoạt động trên / node / [id] và bí danh url.
core/includes/theme.inc
.
Các câu trả lời hiện tại không hoạt động để xem trước hoặc sửa đổi. Nhưng thông thường, bạn cũng muốn đoạn logic đó được đưa vào xem trước hoặc sửa đổi. Đặc biệt ở cấp độ theo chủ đề mà bạn tốt nhất sẽ thấy nút sẽ trông như thế nào sau khi nó được lưu và / hoặc xuất bản.
Vì vậy, đây là một đoạn mã nhận được nút hiện tại bất kể bạn xem nút đầy đủ hay bản xem trước hoặc sửa đổi của nó. Điều này có thể được đặt bên trong một chức năng của trình trợ giúp MYMODULE/src/Utils
để được truy cập theo nguyên trạng hoặc để làm cho nó trở thành một dịch vụ.
$node = FALSE;
$route_match = \Drupal::routeMatch();
if ($route_match->getRouteName() == 'entity.node.canonical') {
$node = $route_match->getParameter('node');
}
elseif ($route_match->getRouteName() == 'entity.node.revision') {
$revision_id = $route_match->getParameter('node_revision');
$node = node_revision_load($revision_id);
}
elseif ($route_match->getRouteName() == 'entity.node.preview') {
$node = $route_match->getParameter('node_preview');
}
return $node;
BTW tương tự áp dụng cho node_is_page()
chức năng hiện không hoạt động trên các bản sửa đổi hoặc xem trước. Tôi đã mở một vấn đề và cung cấp một bản vá trên https://www.drupal.org/project/drupal/issues/3005029 .