Có thể lập trình thêm một bí danh đường dẫn đến một nút được lập trình không?


11

Tôi đã tạo hook hook trước trong mô-đun đang điền vào nút của mình bằng cách tìm nạp thông tin từ nhiều API khác nhau. Tuy nhiên tôi không thể suy nghĩ về cách thêm bí danh nút vào nút mới được tạo. Có bất kỳ chức năng hoặc mô-đun hoặc một cái gì đó (Drupal 7 có path_auto) không? Hoặc tôi nên đi với chèn thô vào url_alias? Tôi có thể tự bắn vào chân mình bằng một động tác quyết liệt như vậy không?


2
Tôi nghĩ chưa có bản phát hành D8 nào cho loại mô-đun này. Bạn có thể lập trình xem drupal.org/node/1853148 .
Sumit Madan

Tuyệt vời đó là những gì tôi đang tìm kiếm.
Bogdan Kuštan 3/2/2015

BTW bạn hồ sơ pic là người đàn ông quá dễ thương .. :)
Sumit Madan

Câu trả lời:


11

Để tạo bí danh, trước tiên tôi kiểm tra xem bí danh đã được đặt trong giao diện người dùng chưa và nếu nó trống thì tôi đặt thủ công bằng cách sử dụng nhãn ().

use Drupal\Core\Entity\EntityInterface;

/**
 * hook_entity_insert
 */
function mymodule_entity_insert(EntityInterface $entity) {
    // Convert to lowercase, trim spaces, replace spaces with underscore and then truncate to 60 chars.
    $pathTitle = substr(str_replace(" ","_",trim(strtolower($entity->label()))),0,60);
    if ($entity->toArray()['path'][0]['alias'] == "") {
        $path = \Drupal::service('path.alias_storage')->save("/node/" . $entity->id(), "/mynewpath/" . $pathTitle, "en");
    }
}

https://www.drupal.org/node/1853148 để biết thêm thông tin


4

Sử dụng drupal 8, đây là cách tôi đã làm (sau khi tìm kiếm nhanh trong tệp pathauto.module ):

Bước 1: Tạo nút

$node = Node::create([
    'type' => 'article',
    'title' => 'Test article',
    'langcode' => 'en', // Get it however you want or hardcode it.
    'uid' => [USER_ID] // Get it however you want.
]);

Bước 2: Lưu nút

$node->save();

Bước 3: Chèn đường dẫn (đảm bảo mô-đun pathauto được cài đặt và thêm một mẫu cho loại nút cho)

pathauto_entity_insert($node)

Nếu bạn cần cập nhật nút theo chương trình, đừng quên cập nhật đường dẫn của nó: pathauto_entity_update($node)và đừng quên xóa nó nếu bạn xóa nút (xóa nó TRƯỚC KHI bạn xóa nút tất nhiên vì tham chiếu sẽ bị mất nếu bạn không 't làm điều đó):pathauto_entity_delete($node)


drupal.stackexchange.com/questions/216972/ Ấn là chìa khóa còn thiếu đối với tôi.
Francis Yaconiello

3

Kể từ Drupal 8.8, các bí danh đường dẫn hiện là các thực thể và phương thức tạo bí danh mới đã thay đổi.

Để lập trình lưu bí danh, bạn có thể làm như sau:

$path_alias = \Drupal\path_alias\Entity\PathAlias::create([
  'path' => '/unaliased/path',
  'alias' => '/aliased/path',
]);

$path_alias->save();


1

Chúng tôi đang duy trì một cổng không chính thức của mô-đun pathauto . Bạn cũng cần token.module, mà bạn có thể nhận được từ đây . Bạn có thể tự chịu rủi ro khi sử dụng, cấu trúc cấu hình có thể thay đổi hoặc các bản cập nhật cốt lõi có thể tạm thời phá vỡ mô-đun.

Công việc chỉ bắt đầu để đưa hai mô-đun trở lại drupal.org.


Có vẻ như bạn đã quên đặt liên kết trong bài viết của mình :)
Krishna Mohan

Sao chép và dán thất bại (từ drupal.stackexchange.com/questions/144227/ Ấn ) cảm ơn.
Berdir

0

Ngoài ra, nếu chỉ đi một thực thể nội dung tùy chỉnh và muốn thêm bí danh đường dẫn url vào biểu mẫu ...

cứ làm đi

/**
 * Implements hook_entity_base_field_info().
 */
function YOURMODULE_entity_base_field_info(EntityTypeInterface $entity_type) {
 if (in_array($entity_type->id(), ['ENTITYID'], TRUE)) {
$fields['path'] = BaseFieldDefinition::create('path')
  ->setLabel(t('URL alias'))
  ->setTranslatable(TRUE)
  ->setDisplayOptions('form', [
    'type' => 'path',
    'weight' => 30,
  ])
  ->setDisplayConfigurable('form', TRUE)
  ->setComputed(TRUE);

  return $fields;
}

}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.