2017-07-28 1 views
0

Ich bin ein Neuling in Drupal, und ich möchte ein benutzerdefiniertes Modul in Drupal8 machen. Ich habe das Modul entwickelt, aber es gibt einige Probleme zu lösen.Wann wird das Modul in Drupal gerendert?

Das Modul zeigt den GET-Parameterwert an, wenn Benutzern eine Seite mit dem Modul angezeigt wird.

Zum Beispiel, ich verbinde mich mit http://localhost/drupal/?keyword=banana und das Modul zeigt "Banane".

Aber nach dem oben genannten, wenn ich wieder mit http://localhost/drupal/?keyword=apple verbinden, dann zeigt das Modul auch "Banane".

Mit anderen Worten, das Modul funktioniert gut, wenn die Seite, die das Modul enthält, zuerst angezeigt wird und falsch funktioniert, wenn ich die zweite, dritte usw. Verbindung herstelle.

Ich habe einige getestet und build() -Methode im Modul wird nur einmal aufgerufen. Also ich denke, dass das Modul nur einmal gerendert wird, wenn ich eine Verbindung zur Seite herstelle und nicht nach dem ersten gerendert werden kann.

Auch ich denke, dass es das Problem im Zusammenhang mit dem Cache sein kann, aber ich setze Admin/Konfiguration/Performance/Cache auf "No-Cache".

Ich bin nicht sicher, ob es möglich ist, "Apfel" anzuzeigen, nachdem "Banane" vom Modul angezeigt wird.

Bitte helfen Sie mir und lassen Sie mich mehr Details wissen ...

Dank.

+0

nehmen ein schau https://www.drupal.org/node/2598914 – Fky

+0

Danke für deine Pflege. Ich mache mit dem Modul auf drupal8. aber es wird einige Probleme geben. Wenn das Modul gut funktioniert, mit anderen Worten, die Entwicklung ist abgeschlossen und ich lege den Cache für meine Site fest, wie wird das Modul funktionieren? Können Sie sicherstellen, dass es genauso gut funktioniert wie während der Entwicklung? Ich meine, dass Sie denken, dass meine Probleme mit dem Cache zusammenhängen, also schlagen Sie vor, es während der Entwicklung zu deaktivieren. Aber wie wäre es mit der Aktivierung des Cache nach der Entwicklung? – NewComer

+0

Ich kann nicht Standort: Modus zu Entwicklung festlegen. Ich habe drupal Konsole 1.0.0 Alpha1 und RC26 installiert, aber CommandNotFoundException aufgetreten. Es gibt nur 4 Modi zur Verfügung, wie neu, installieren, importieren: lokale Debug für Site: -Modus.Ich kann es nicht mehr machen – NewComer

Antwort

0

Abhängig von Ihren Einschränkungen gibt es mehrere mögliche Lösungen: Deaktivieren Sie den Cache für diese bestimmte Seite oder verwenden Sie Platzhalter für Routings.

Sie können mithilfe der Seite Cache Kill-Schalter-Service, der Sie so auslösen in Ihrem Controller den Cache auf einer bestimmten Seite deaktivieren:

\Drupal::service('page_cache_kill_switch')->trigger(); 

Dies wird deaktivieren Sie den Cache nur für diese spezielle Anforderung, so Sie werden nicht den Eindruck haben, veralteten Inhalt zu sehen.

Eine bessere Lösung, wenn möglich, ist die Verwendung von Routing-Parametern anstelle Ihrer GET-Parameter. Auf diese Weise können Ihre separaten URLs (z. B. Seite/Banane, Seite/Apfel usw.) zwischengespeichert werden und weiterhin die Inhalte anzeigen, die Sie möchten. Zum Beispiel in Ihrer module.routing.yml Datei:

mymodule.route: 
    path: '/path/{parameter}' 
    defaults: 
    _controller: '\Drupal\mymodule\Controller\MyModuleController::page' 
    _title: 'My Module Page' 
    requirements: 
    _permission: 'access content' 

Der {Parameter} Parameter kann dann in Ihrem Controller wie so zugegriffen werden:

public function page($parameter) { 
    return ['#markup' => $parameter]; 
} 

Weitere Informationen: https://www.drupal.org/node/2186285

Verwandte Themen