Jak używać aliasu tytułu lub ścieżki węzła zamiast identyfikatora węzła w filtrze kontekstowym odwołania do węzła w widokach?


7

Mam węzeł A z odniesieniem do węzła B.

W widoku pokazuję wszystkie węzły A, do których odwołuje się konkretny węzeł B (nid: 123, tytuł: node-B-title).

Zamiast używać nid w filtrze kontekstowym chciałbym użyć tytułu węzła. Na przykład zamiast:

view-name/123

Chciałbym użyć

view-name/node-B-title

Jak mogłem to zrobić?

Odpowiedzi:


10

Miałem bardzo podobny problem i nie tylko znalazłem rozwiązanie, ale także nauczyłem się nowych rzeczy o tym, jak działa widok. Pozwól, że podzielę się tym, czego się nauczyłem i rozwiązaniem twojego problemu.

Podczas tworzenia widoku z jednym lub kilkoma filtrami kontekstowymi, widok musi skądś odebrać wartości tych filtrów. Można to zrobić przez -

  1. Pobieranie wartości filtru kontekstowego z adresu URL
    • Zazwyczaj do takich celów należy wyświetlić stronę, która ma adres URL formularza foo/%/barlub foo/bar/%pojedynczy filtr kontekstowy LUB formularza foo/%/bar/%lub foo/bar/%/%wielu filtrów
    • Jeśli masz wiele filtrów, wartość adresu URL, która pojawia się jako pierwsza, jest mapowana na pierwszy filtr, obok drugiego filtra i tak dalej.
  2. Widoki pozwalają określić, co zrobić, jeśli wartości filtru nie są dostępne w adresie URL . Jest to zwykle używane w widokach blokowych .
    • Możesz wybierać spośród różnych działań, a następnie również konfigurować wybór. Możesz wybierać spośród różnych działań, a następnie również konfigurować wybór. asdfj kajsdf
  3. Kolejną rzeczą, na którą pozwalają widoki, jest określenie, co zrobić z wartościami filtrów, jeśli znajdują się one w adresie URL, jak opisano w punkcie 1 powyżej. Typowe przypadki użycia to - tworzenie dynamicznych tytułów na podstawie wartości filtrów, sprawdzanie wartości filtrów itp.
    • Podczas sprawdzania poprawności wartości filtrów możesz także zmienić wartości! (Właśnie tam leży nasze rozwiązanie). Jest to bardzo podobne do sposobu, w jaki możemy zmieniać wartości $ form w wywołaniach zwrotnych walidacji formularzy drupal. wprowadź opis zdjęcia tutaj

Rozwiązanie konkretnego problemu polega na użyciu bardzo podobnego kodu w sekcjach wskazanych strzałkami na powyższym obrazku.

Ten link okazał się dla mnie bardzo pomocny. Oto fragment:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

Nie działało to dla mnie, ale spowodowało błąd ajax w widoku podczas zapisywania.
— DrCord,

1

To nie zadziała we wszystkich okolicznościach, ale jednym z podejść do problemu w pytaniu jest użycie rzeczywistego wyświetlenia węzła B (lub węzła typu B) i ustawienie jego ścieżki tak, jak chcesz, za pomocą modułu ścieżki lub pathauto. Następnie użyj bloku widoków, aby dodać relację treści i widok, który chcesz.

Użyj filtru kontekstowego na NID, a następnie ustaw Provide default value > Content ID from URL. Następnie dodaj blok widoków do swojej strony lub zestawu stron.

Jeśli kontekst pozwala na użycie bloku widoków w samym węźle, a nie strony widoków, znacznie ułatwi to uzyskanie żądanej ścieżki i wyświetlenie żądanych widoków.


1

Zredagowałem zaakceptowaną odpowiedź, ale chciałem dodać tutaj aktualny kod:

Użyj opcji sprawdzonej przez PHP w ramach opcji sprawdzania poprawności w filtrze kontekstowym.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

Argument widoku musi być odniesieniem do pola typu zawartości, a następnie wybierz opcję „Podaj argument domyślny” i zaznacz opcję Węzeł identyfikacyjny (coś takiego).

1) Dodaj argument „Odwołanie do pola X” 2) Sprawdź identyfikator węzła z adresu URL (dodaj domyślny argument) 3) W sekcji sprawdzania poprawności sprawdź typ treści węzła, a po ustawieniu „Typ węzła” wybierz „Identyfikator węzła

I gotowe. :)


„identyfikator treści z adresu URL” podaje tylko nid. Gdybym użył odwołania do terminu, mógłbym użyć „kryteriów sprawdzania poprawności” z „nazwą terminu przekonwertowanego na identyfikator terminu”. W przypadku odwołania do węzła nie ma podobnej opcji, aby przetłumaczyć tytuł na nid. Prawdopodobnie dlatego, że tytuły niekoniecznie są unikalne.
— uwe

Tak jest poprawne, ale jest konieczne argumentem musi być odwołanie do pola (nid), spróbuj tego.
— Eleo,

1) Dodaj argument „Odwołanie do pola X” 2) Sprawdź identyfikator węzła z adresu URL (dodaj domyślny argument) 3) W sekcji sprawdzania poprawności sprawdź typ treści węzła, a przy ustawieniu „Typ węzła” wybierz „Identyfikator węzła”
— Eleo

Rzeczywisty adres URL może mieć identyfikator nid, a aliasem ścieżki może być tytuł węzła. To działa, prawda?
— SGhosh

0

Stare pytanie, ale znalazłem je w Google i pomyślałem, że podzielę się moim rozwiązaniem dla każdego, kto znajdzie je w przyszłości:

Istnieje teraz moduł o nazwie safeword, który zasadniczo robi dokładnie to, co sugerował Sumeet Pareek: (automatycznie) tworzy pole przyjazne URL-owi.


0

Polecam Rozszerzone Ścieżka Pseudonimy (path_alias_xt) moduł . Naprawia ten problem, instalując go bez konfiguracji, najwyraźniej jest to po prostu magia. : D Niezupełnie, ale fragment strony modułu wychwala sposób, w jaki go właśnie instalujesz i rozwiązuje to i inne problemy, ale nie opisuje, w jaki sposób moduł robi to za kulisami ... O, cóż, zawsze możemy przeczytaj kod: D Nie wspominając o naprawianiu ścieżek widoków, ale użyłem go do tego i działa idealnie.

Lista problemów, które rozwiązuje, na stronie modułu:

  • Czy zastanawiałeś się kiedyś, dlaczego po zdefiniowaniu aliasu typu about-us, powiedzmy, node / 123, twoje strony wciąż są pełne brzydkich, generowanych maszynowo kart i linków, takich jak / node / 123 / edit, node / 123 / revisions itp. .?
  • Podobnie w przypadku linków / taksonomy / term /% i / user /%: czy spodziewałeś się zobaczyć / suszy / utwór, ale dostałeś / user / 5 / utwór?
  • Czy uważasz, że pasek adresu przeglądarki wyświetla te brzydkie liczby zamiast aliasów?
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.