2016-06-22 8 views
0

Ich habe eine Drupal 8 Seite und ich muss eine http-Anfrage an einen anderen Server (für den Inhalt) und fügen Sie es in die Seite wie Fußzeile. Ich kann das nicht tun, nachdem DOM wegen SEO-Problemen geladen wurde.Drupal 8, HTTP-Anfrage an den Server und an die Website anfügen

Ich bin vertraut mit WordPress und so einfach, es mit WP zu tun. Ich bin jedoch verwirrt darüber, wie man das mit .twig, Drupal 8 macht. Irgendwelche Vorschläge wären großartig. Vielen Dank.

+0

Mögliche Duplikate von [Populate Zweigvorlage von externen API] (http://StackOverflow.com/Questions/37716934/Populate-Twig-Template-from-External-API) – acrosman

Antwort

0

Wenn Sie möchten, dass der Inhalt Teil des DOM ist, wenn er an den Browser gesendet wird, sollten Sie den Inhalt nicht früher in Twig laden.

Sie können create a module that defines custom block und platzieren Sie diesen Block in der richtigen Region Ihres Themas.

Für die Block-Plug-in-Klasse müssen Sie eine build()-Methode schreiben, die ein Render-Array für Ihren Block zurückgibt. Innerhalb build() können Sie tun, was Sie brauchen, um den Inhalt zu erwerben, einschließlich der Herstellung einer HTTP-Anforderung mit Symfony des Guzzle Client:

public function build() { 
    $url = 'https://www.example.com/remote/service'; 
    $client = \Drupal::httpClient(); 
    $request = $client->createRequest('GET', $url); 
    // Do whatever's needed to extract the data you need from the request... 
    $build = ['my_remote_block' => [ 
     '#theme' => 'my_custom_theme_function', 
     '#attributes' => [ 
     //An array of variables to pass to the theme 
     ], 
     '#cache' => [ 
     //Some appropriate cache settings 
     ], 
    ], 
    ]; 

Wenn Sie HTML werden immer wieder von Ihrer Anfrage können Sie die benutzerdefinierte Thema Funktion überspringen und ein Array zurück mit '#type' => 'markup' und dann ein Feld für das Markup. Der Rest dieses Beispiels geht davon aus, dass Sie Daten zurückerhalten und sie selbst rendern möchten.

In der Moduldatei Ihres Moduls können Sie die benutzerdefinierte Designfunktion definieren (so können Sie eine Zweigdatei Ihres eigenen Designs verwenden).

function my_module_theme($existing, $type, $theme, $path) { 
    return [ 
    'my_custom_theme_function' => [ 
     'variables'=> [ 
     // defaults for variables used in this block. 
     ], 
    ], 
    ]; 
} 

Dann endlich können Sie einen Zweig Datei named my-custom-theme-function.html.twig, um die Ausgabe zu machen erstellen.

Oft sind diese Setups ziemlich langsam (da die Anfrage des Browsers dann eine weitere HTTP-Anfrage + Verarbeitungszeit auslöst) sollten Sie entweder den Block so weit wie möglich zwischenspeichern oder eine Technik wie BigPipe verwenden (was wahrscheinlich keine ist) Option für Sie basierend auf Ihrer Frage, aber schien es wert, darauf hingewiesen zu werden).

+0

Danke acrosman. – chatu

+0

Ich habe diesen Teil getan. Könntest du mit dem nächsten Teil aushelfen? http://stackoverflow.com/questions/38024507/drupal-8-fetch-content-and-serve-without-footer @acrosman – chatu