2 回答

TA貢獻1829條經驗 獲得超9個贊
DrupalCoreRenderMarkup應該可以解決問題:
<?php
use Drupal\Core\Render\Markup;
function module_page_attachments(array &$page)
{
? $tags = [
? ? ["name" => "twitter:card", "content" => "summary"],
? ? ["name" => "og:url", "content" => Markup::create("https://example.net/index.php?param1=1¶m2=2¶m3=3")],
? ? ["name" => "og:title", "content" => "My title"],
? ? ["name" => "og:description", "content" => "My description"],
? ? ["name" => "og:image", "content" => Markup::create("https://example.net/images?id=1&size=400")],
? ];
? foreach ($tags as $tag) {
? ? $headerTag = array(
? ? ? '#tag' => 'meta',
? ? ? '#attributes' => array(
? ? ? ? 'property' => $tag['name'],
? ? ? ? 'content' => $tag['content'],
? ? ? ),
? ? );
? ? $page['#attached']['html_head'][] = [$headerTag, $tag['name'] . "Id"];
? }
}

TA貢獻2019條經驗 獲得超9個贊
needs work在 drupal 的網站上有一個關于狀態問題的公開票。
解決此問題的一種方法是攔截頁面并在模塊文件中更改其模板,如下例所示:
文件名:example.module
/**
?* Drupal bug caused the application to escape links. Therefore the og:image and og:url
?* were not working. Drupal kept converting `&` to `&`
?* The solution here below converts the tags into inline templates
?*/
function spa_seo_page_attachments_alter(array &$attachments)
{
? if (isset($attachments['#attached']['html_head'])) {
? ? foreach ($attachments['#attached']['html_head'] as $key => $item) {
? ? ? $property = !empty($item[0]['#attributes']['property']) ? $item[0]['#attributes']['property'] : '';
? ? ? if ($property == "og:url" || $property == "og:image") {
? ? ? ? $content = $item[0]['#attributes']['content'];
? ? ? ? $property = $item[0]['#attributes']['property'];
? ? ? ? $attachments['#attached']['html_head'][$key][0] = [
? ? ? ? ? '#type' => 'inline_template',
? ? ? ? ? '#template' => "{{ meta|raw }}",
? ? ? ? ? '#context' => [
? ? ? ? ? ? 'meta' => '<meta property="' . $property . '" content="' . $content . '" />',
? ? ? ? ? ]
? ? ? ? ];
? ? ? }
? ? }
? }
}
筆記
請注意,這DrupalCoreRenderMarkup并不能解決問題,因為這是一個錯誤。
- 2 回答
- 0 關注
- 177 瀏覽
添加回答
舉報