Powiedzmy, że rozszerzam blockBase
klasę, aby utworzyć niestandardowy blok, i implementuję blockBuild
metodę, aby utworzyć znaczniki dla mojego bloku. Coś takiego:
class YourModuleBlock extends BlockBase {
/**
* Implements \Drupal\block\BlockBase::blockBuild().
*/
public function build() {
return array(
'#markup' => 'This is a block!',
);
}
}
Gdybym chciał podać link w tym znaczniku, w D7 użyłbym tej l
funkcji, ale nie jest ona już dostępna ( patrz tutaj ). Muszę więc udostępnić nową metodę D8 do generowania linków. Mogłem po prostu użyć <a>
tagu, ale to nigdy nie było najlepszą praktyką w D7.
Jakiej metody użyć do tworzenia łączy i jak udostępnić ją mojej funkcji?
navigation
8
24ma13wg
źródło
źródło
Odpowiedzi:
\ Drupal :: l jest przestarzałe. Może ta sprawa będzie dla kogoś przydatna
źródło
toRenderable()
sztuczka jest bardzo przydatna, dzięki!Po pierwsze, nie jest to w 100% ukończone, zobacz ten problem . Powiedziawszy to, pozwól mi zacytować kod z zawiadomienia o zmianie :
Drupal 7:
Drupal 8:
Edycja: nazwy tras znajdują się w
moduledirectory/modulename.routing.yml
plikach i (domyślnie) w{router}
tabeli.źródło
fromRoute('<front>')
Inną opcją jest utworzenie łącza w tablicy renderowania
Drupal dostarcza nam kilka metod pomocniczych do tworzenia adresów URL i linków do bytów.
I
źródło
#attributes
można dodać, ponieważ jest to RenderElement .Oto kilka przykładów tworzenia łączy w Drupal 8. Zauważ, że $ this-> t ('some text') jest dostępny w blokach rozszerzających BlockBase. Jeśli skopiujesz je do innej klasy, która go nie ma lub użyjesz ich w pliku .module, być może będziesz musiał zmienić to na t () 1 .
Podstawowe łącze do węzła:
Spowoduje to utworzenie tablicy renderowania takiej:
Możesz utworzyć tablicę renderującą bez ładowania węzła w ten sposób:
Lub używając podstawowej klasy Link:
Jeśli chcesz użyć znaczników w tekście linku, nie możesz po prostu wstawić łańcucha. Musisz użyć elementu tablicy renderowania:
Aby utworzyć bezwzględny link, dodaj tę opcję do adresu URL, a nie do łącza:
Aby dodać klasę do linku, musisz również dodać to do adresu URL, a nie linku:
Aby dodać ciąg zapytania do linku, musisz to również zrobić w adresie URL, a nie w linku:
Aby ustawić link, aby otwierał się w nowym oknie z target = _blank:
Oto link do strony z terminem taksonomicznym:
Oto link do strony edycji węzła:
Aby utworzyć zewnętrzny link:
Link do strony głównej:
Zauważ, że na każdym z tych obiektów URL możesz uzyskać adres URL jako ciąg znaków, wywołując:
Na przykład:
źródło
link
Sposób jest przestarzała.Zdolność do ustawiania atrybutów wydaje się zagubiona lub skomplikowana w poprzednich przykładach, ponieważ funkcjonalność po prostu nie jest oczywista. Istnieją dwa sposoby tworzenia łączy w zależności od tego, czy ma trasę, czy nie, a każde zachowuje się nieco inaczej, więc oto przykłady.
Z trasą. Jest to najbardziej sensowne, wystarczy podać go w opcjach.
Z zewnętrznym adresem URL. Ten jest trochę dziwny. Nie ma argumentu opcji, więc może wydawać się niemożliwe, ale w rzeczywistości jest OK. Powodem jest to, że niewytłumaczalne linki nigdy nie mają opcji tylko opisywanego adresu URL. Oznacza to, że przekazujesz klasę do adresu URL podczas jego tworzenia, a on po prostu zadziała.
Następstwem tego wszystkiego jest to, że możesz to zrobić.
źródło
Kompletny przykład z atrybutami i znacznikami HTML w tekście łącza:
źródło
Musiałem dodać link do tabeli jako # suffix, ale musiałem umieścić go jako HTML, aby to osiągnąć, zrobiłem to
\Drupal\Core\Link::fromTextAndUrl("Add New page", Url::fromRoute('mymodule.add_new_page'))->toString();
Gdzie mymodule.add_new_page jest trasą z mojego pliku yml modułu.
źródło
Odpowiedzi tutaj dały mi kilka dobrych wskazówek. Chciałem tylko podać link do węzła w moich logach ... Oto co skończyłem
źródło
źródło