[英]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.