簡體   English   中英

Drupal 8,http請求到服務器並附加到站點

[英]Drupal 8, http request to server and append to the site

我有一個Drupal 8網站,我需要向其他服務器發出http請求(以獲取內容),然后像頁腳一樣將其附加到頁面中。 由於SEO問題,加載DOM后我無法執行此操作。

我熟悉WordPress,因此很容易使用WP來做。 但是,我對如何使用.twig Drupal 8感到困惑。任何建議都很好。 謝謝。

如果您希望內容在發送到瀏覽器時成為DOM的一部分,而這不是您在Twig中要做的事情,則應該在此過程的早期加載內容。

您可以創建一個定義自定義塊的模塊,並將該塊放置在主題的正確區域中。

塊插件類要求您編寫一個build()方法,該方法為您的塊返回一個渲染數組。 build()您可以執行獲取內容所需的任何操作,包括使用Symfony的Guzzle客戶端發出HTTP請求:

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
      ],
    ],
  ];

如果您是從請求中獲取HTML,則可以跳過自定義主題函數,並返回一個帶有'#type' => 'markup'的數組,然后返回一個用於標記的字段。 本示例的其余部分假定您獲取了數據並想自己渲染。

在模塊的.module文件中,您可以定義自定義主題功能(因此您可以使用自己設計的樹枝文件)。

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

最后,您可以創建一個named my-custom-theme-function.html.twig的樹枝文件來呈現輸出。

這些設置通常很慢(因為瀏覽器的請求隨后觸發另一個HTTP請求+處理時間),因此您應該考慮盡可能多地緩存塊或使用BigPipe之類的技術(這可能不是您的選擇)關於您的問題,但似乎值得指出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM