Disons que j'étends la blockBase
classe pour créer un bloc personnalisé et j'implémente la blockBuild
méthode pour créer un balisage pour mon bloc. Quelque chose comme ça:
class YourModuleBlock extends BlockBase {
/**
* Implements \Drupal\block\BlockBase::blockBuild().
*/
public function build() {
return array(
'#markup' => 'This is a block!',
);
}
}
Si je voulais fournir un lien dans ce balisage, en D7 j'aurais utilisé la l
fonction, mais celle-ci n'est plus disponible ( voir ici ). J'ai donc besoin de rendre disponible la nouvelle méthode D8 pour générer des liens. Je pourrais simplement utiliser une <a>
balise, mais ce n'était jamais la meilleure pratique en D7.
Alors, quelle est la bonne méthode à utiliser pour créer des liens et comment la mettre à la disposition de ma fonction?
navigation
8
24ma13wg
la source
la source
Réponses:
\ Drupal :: l est obsolète. Peut-être que ce cas sera utile à quelqu'un
la source
toRenderable()
astuce est très utile, merci!Premièrement, ce n'est pas complet à 100%, consultez ce problème . Cela dit, permettez-moi de citer un code de l' avis de modification :
Drupal 7:
Drupal 8:
Modifier: les noms de route sont dans les
moduledirectory/modulename.routing.yml
fichiers et (par défaut) dans le{router}
tableau.la source
fromRoute('<front>')
Une autre option consiste à créer un lien dans un tableau de rendu
Drupal nous fournit quelques méthodes d'assistance pour créer des URL et des liens vers des entités.
Et
la source
#attributes
peut être ajouté car il s'agit d'un RenderElement .Voici quelques exemples de création de liens dans Drupal 8. Notez que $ this-> t ('du texte') est disponible dans les blocs qui étendent BlockBase. Si vous les copiez dans une autre classe qui ne les a pas ou les utilisez dans un fichier .module, vous devrez peut-être changer cela en t () 1 .
Lien de base vers un nœud:
Cela crée un tableau de rendu comme celui-ci:
Vous pouvez créer le tableau de rendu sans charger le nœud de cette façon:
Ou en utilisant la classe Link principale:
Si vous souhaitez utiliser le balisage dans le texte de votre lien, vous ne pouvez pas simplement insérer une chaîne. Vous devez utiliser un élément de tableau de rendu:
Pour créer un lien absolu, vous ajoutez cette option à l'URL, pas au lien:
Pour ajouter une classe à votre lien, vous devez également l'ajouter à l'URL, pas au lien:
Pour ajouter une chaîne de requête à votre lien, vous devez également le faire à l'URL, pas au lien:
Pour définir le lien à ouvrir dans une nouvelle fenêtre avec target = _blank:
Voici un lien vers une page de termes de taxonomie:
Voici un lien vers la page de modification du nœud:
Pour créer un lien externe:
Lien vers la page d'accueil:
Notez que sur n'importe lequel de ces objets url, vous pouvez obtenir l'url sous forme de chaîne en appelant:
Par exemple:
la source
link
méthode est obsolète.La possibilité de définir des attributs semble perdue ou compliquée dans les exemples précédents car la fonctionnalité n'est tout simplement pas évidente. Il y a deux façons de créer des liens selon qu'il a un itinéraire ou non et chacun se comporte un peu différemment alors voici les exemples.
Avec un itinéraire. Cela a le plus de sens, vous pouvez simplement le fournir dans les options.
Avec une URL externe. Celui-ci est un peu bizarre. Il n'y a pas d'argument d'option, donc cela peut sembler impossible mais c'est en fait OK. La raison en est que les liens inexplicables n'ont jamais d'options que l'URL qu'ils décrivent. Cela signifie que vous passez la classe à l'URL lorsque vous la créez et cela fonctionnera simplement.
Un corollaire à tout cela est que vous pouvez également le faire.
la source
Un exemple complet avec des attributs et un balisage HTML dans le texte du lien:
la source
J'avais besoin d'ajouter un lien vers la table en tant que #suffix, mais je devais le mettre en html, pour y parvenir, je l'ai fait
\Drupal\Core\Link::fromTextAndUrl("Add New page", Url::fromRoute('mymodule.add_new_page'))->toString();
Où mymodule.add_new_page est la route depuis mon fichier yml de module.
la source
Les réponses ici m'ont donné de bons conseils. Tout ce que je voulais, c'était de fournir un lien vers le nœud dans mes journaux ... Voici donc ce que j'ai fini avec
la source
la source