Tạo bí danh đường dẫn theo chương trình khi nút được tạo


8

Tôi có một loại nội dung tùy chỉnh được tạo bởi một mô-đun. Có một hook nào tôi có thể sử dụng để đặt bí danh đường dẫn của loại nội dung tùy chỉnh của mình khi một nút được tạo không?

Một trong các trường của tôi là mã alpha-số và tôi muốn sử dụng mã đó trong đường dẫn. ví dụ: 'sự kiện / myc0d3'

Tôi nhận thấy rằng hàm này ( path_set_alias ) tồn tại trong 6, nhưng tôi không thể tìm thấy tương đương với 7. Và không biết tôi sẽ gọi nó ở đâu.

Câu trả lời:


10

Thay vì sử dụng hook, mô-đun Pathauto nên được sử dụng để bạn có thể xác định mẫu cụ thể cách tạo bí danh cho mỗi loại nội dung (at /admin/config/search/path/patterns). Trong đó bạn có thể sử dụng các mẫu thay thế hoặc mã của riêng bạn. Đó là cách tiếp cận sạch sẽ hơn nhiều.

Nếu không, bạn có thể thử hook_node_presave($node)và thay đổi bí danh trực tiếp:

$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";

hoặc sử dụng path_save(&$path)chức năng trực tiếp như dưới đây:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);

Đối với tôi chỉ có cả hai kết hợp làm việc, do đó, cuối cùng bên trong trường văn bản bí danh, bí danh bên phải được viết. Chỉ làm path_save () hoạt động nhưng sau đó tôi có bí danh sai trong trường văn bản bí danh khi chỉnh sửa nút, do đó, một lần lưu lại đơn giản sẽ lại đưa tôi bí danh sai.
leymannx

9

Hàm bây giờ được gọi là path_save () , xem path_taxonomy_term_insert () để biết ví dụ.


4
bạn thực sự nên mở rộng câu trả lời này để không chỉ liên kết đến các tài nguyên ngoại vi, tuy nhiên các liên kết, miễn là chúng còn hiệu lực, là hữu ích.
DrCord

9

hook_node_insert () không hoạt động trong trường hợp của tôi và với một số tìm kiếm tôi đã đưa ra bài đăng trên blog này . Tôi đã triển khai hook_insert () theo cùng một cách và uy tín.

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}

2
Để lưu ý rằng hook_insert()chỉ được sử dụng khi mô-đun triển khai, nó đang xác định loại nội dung; hook không thể được sử dụng để hành động trên một nút cho một loại nội dung được xác định từ một mô-đun khác.
kiamlaluno

đây chính xác là lý do tại sao không nên chỉ liên kết đến các bài viết mà thay vào đó để mở rộng câu trả lời và trích xuất thông tin hữu ích chính từ các bài viết đó - liên kết 'bài đăng trên blog' không còn hợp lệ và dẫn đến 404
Titi

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.