2016-04-28 12 views
0

In meiner Drupal 8 Website habe ich Abschnitte mit Begriffen wie "Therapien" und "Team", wo die einzelnen Inhalte (jede Therapie, jede Person ...) sind Knoten mit Ankern. Die Knoten (das gesamte Team zum Beispiel) werden auf einer Seite angezeigt. In meinem Menü ist es kein Problem, den Anker-Hashtag anzuhängen, um genau zu der einzelnen Therapie oder dem Teammitglied zu scrollen.Node-Links in Drupal 8 mit Anker-Hashtag z./termname # title statt /termname/title.html

Aber: Ich verwende auch Entity-Referenzen, um die verschiedenen Knoten zu verknüpfen. Diese Links werden automatisch im System generiert (z. B. therapy/massage.html). Ich möchte nun eine Rewrite-Regel erstellen, die alle Knoten-Links zu (z. B.) xxx.xxx.com/therapy#massage umschreibt, wobei "massage" der Titel des Knotens ist.

Hinweis: Dies ist NICHT möglich mit pathauto! Das habe ich schon probiert.

Vielen Dank im Voraus und Hinsicht Fab

+0

Sie müssen wahrscheinlich in die Links und sie selbst einhaken. Schau mal hier: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/function/hook_link_alter/8.1.x – VJamie

+0

Hey Jamie, danke. Aber kannst du mir einen Hinweis geben, wie das aussehen könnte? Und wo muss ich diesen Code platzieren? Ich möchte, dass der Knotentitel als Anker-Hashtag angehängt wird. –

Antwort

0

Sieht aus wie es mit URL :: fromUserInput()

Werfen Sie einen Blick auf den folgenden Link möglich ist: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Url.php/function/Url%3A%3AfromUserInput/8.1.x

Ihr Code etwas aussehen wird Diese

$url = Url::fromUserInput('#' . $node->getTitle()); 

Wohin Sie das legen, hängt davon ab, wie Sie Ihre Seite erstellen. Wenn es sich um eine Standardansicht handelt (von der ich ausgehe), müssen Sie in die Erstellung Ihres Links eingreifen und die URL ändern.

Für die oben genannten müssen Sie ein Modul erstellen und fügen Sie den Haken in Ihre .Module-Datei.

Der Haken Sie gehen zu müssen, ist hook_link_alter(), können Sie die Dokumentation finden Sie hier: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/function/hook_link_alter/8.1.x

/** 
* Implements hook_link_alter(). 
*/ 
function module_link_alter(&$variables) { 
    /** @var NodeInterface $node */ 
    $node = $variables['options']['node']; 

    if ($node != NULL){ 
    $variables['url'] = Url::fromUserInput('#' . $node->getTitle()); 
    } 

Der obige Code sollten Sie auf Ihrem Weg, ich bin nicht ganz sicher, ob es Ich werde arbeiten, seit ich es noch nicht ausprobiert habe.

Hoffe, das hilft!

+0

Hallo Jamie und danke nochmal für deine Antwort. Muss ich das in eine template.php oder wo? Entschuldigung, ich bin neu bei Drupal 8:/ Könnten Sie einen Hinweis darauf geben? Wäre perfekt, vielen Dank im Voraus. –

+0

@FabUlous Meine Antwort aktualisiert – VJamie

+0

Wow super! Ich werde das nach dem Start testen. Vielen Dank! Da ich dieses Projekt schnell beenden musste, fand ich eine Umgehung: Es ist möglich, ein Hash-Zeichen direkt in das Feld URL-Alias ​​im Knoten-Bearbeitungsformular einzufügen. Und diese URL wird auch für das gesamte Referenzmaterial verwendet. Es ist keine perfekte Lösung, da es eine Fehleranfälligkeit gibt, wenn man die URL falsch eingibt, aber da ich den Inhalt für den Kunden erstelle und bearbeite, ist es in Ordnung. Ich verstehe nicht, warum es nicht möglich ist, das Hash-Zeichen in pathauto hinzuzufügen. Wäre SO so einfach gewesen! –