Utwórz alias ścieżki programowo podczas tworzenia węzła


8

Mam niestandardowy typ zawartości, który jest tworzony przez moduł. Czy istnieje haczyk, którego można użyć do ustawienia aliasu ścieżki dla mojego niestandardowego typu treści podczas tworzenia węzła?

Jednym z moich pól jest kod alfanumeryczny i chcę go użyć na ścieżce. np .: „event / myc0d3”

Zauważyłem, że ta funkcja ( path_set_alias ) istniała w 6, ale nie mogę znaleźć odpowiednika dla 7. I nie wiem, jak ją nazwać.

Odpowiedzi:


10

Zamiast używać hooka , należy użyć modułu Pathauto , w którym można zdefiniować określony wzorzec, w jaki sposób generowane są aliasy dla każdego typu zawartości (at /admin/config/search/path/patterns). Tam możesz użyć wzorów zastępczych lub zakodować własny. To znacznie czystsze podejście.

W przeciwnym razie możesz spróbować hook_node_presave($node)zmienić alias bezpośrednio:

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

lub użyj path_save(&$path)funkcji bezpośrednio jak poniżej:

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

Dla mnie działały tylko obie kombinacje, więc na końcu wewnątrz pola tekstowego aliasu zapisywany jest odpowiedni alias. Wykonanie tylko path_save () działało, ale potem miałem zły alias w polu tekstowym aliasu podczas edycji węzła, więc zwykłe ponowne zapisanie spowodowałoby, że ponownie otrzymałem niewłaściwy alias.
leymannx,


9

hook_node_insert () nie działał w moim przypadku i przy niektórych wyszukiwaniach wymyśliłem ten post na blogu . Zaimplementowałem hook_insert () w ten sam sposób i presto.

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

2
Zauważ, że hook_insert()jest używane tylko wtedy, gdy moduł implementujący go definiuje typ zawartości; haka nie można użyć do działania na węźle dla typu zawartości zdefiniowanego w innym module.
kiamlaluno

to jest właśnie powód, dla którego nie zaleca się po prostu linkowania do artykułów, ale zamiast tego rozwinąć odpowiedź i wyodrębnić główne przydatne informacje z tych artykułów - ten link „post na blogu” nie jest już ważny i powoduje 404
Titi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.