Buat path alias secara terprogram saat simpul dibuat

8

Saya memiliki tipe konten khusus yang dibuat oleh modul. Apakah ada kait yang bisa saya gunakan untuk menetapkan alias path dari tipe konten khusus saya ketika sebuah node dibuat?

Salah satu bidang saya adalah kode alfanumerik, dan saya ingin menggunakannya di jalur. mis .: 'event / myc0d3'

Saya perhatikan bahwa fungsi ini ( path_set_alias ) ada di 6, tapi saya tidak dapat menemukan yang setara untuk 7. Dan tidak tahu di mana saya akan menyebutnya.

cbaigorri
sumber

Jawaban:

10

Alih-alih menggunakan hook, modul Pathauto harus digunakan di mana Anda dapat menentukan pola spesifik bagaimana alias dihasilkan per jenis konten (at /admin/config/search/path/patterns). Di sana Anda dapat menggunakan pola atau kode pengganti Anda sendiri. Ini pendekatan yang jauh lebih bersih.

Kalau tidak, Anda dapat mencoba hook_node_presave($node)dan mengubah alias secara langsung:

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

atau gunakan path_save(&$path)fungsi secara langsung seperti di bawah ini:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);
kenorb
sumber
Bagi saya hanya keduanya dalam kombinasi yang berfungsi, sehingga pada akhirnya di dalam bidang teks alias alias yang tepat ditulis. Melakukan hanya path_save () bekerja tetapi kemudian saya memiliki alias yang salah di alias textfield pada node edit, jadi resave sederhana akan membuat saya alias salah lagi.
leymannx
9

Fungsi sekarang disebut path_save () , lihat path_taxonomy_term_insert () untuk contoh.

Berdir
sumber
4
Anda harus benar-benar memperluas jawaban ini untuk tidak hanya menautkan ke sumber daya luar, namun tautan, asalkan tetap berlaku, bermanfaat.
DrCord
9

hook_node_insert () tidak berfungsi dalam kasus saya, dan dengan beberapa pencarian saya datang dengan posting blog ini . Saya menerapkan hook_insert () dengan cara dan presto yang sama.

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}
cbaigorri
sumber
2
Untuk memperhatikan yang hook_insert()digunakan hanya ketika modul mengimplementasikannya menentukan jenis konten; hook tidak dapat digunakan untuk bertindak pada node untuk tipe konten yang ditentukan dari modul lain.
kiamlaluno
inilah alasan mengapa tidak disarankan untuk hanya menautkan ke artikel, tetapi untuk memperluas jawabannya sebagai gantinya dan mengekstrak informasi bermanfaat utama dari artikel-artikel tersebut - bahwa tautan 'posting blog' tidak lagi valid dan menghasilkan 404
Titi