Drupal 8, 베타 2에서 HTML 헤드 태그를 추가하려고 함


9

드루팔 8.0 베타 2로, drupal_add_html_head() 사용되지 않습니다 찬성 #attached. 오래된 방법은 다음과 같습니다.

function MYTHEME_page_build(&$page) {
    $viewport = array(
          '#type' => 'html_tag',
          '#tag' => 'meta',
          '#attributes' => array(
            'name' => 'viewport',
            'content' => 'width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=0.55, user-scalable=yes',
          ),
        );
        drupal_add_html_head($viewport, 'viewport');
}

현재 사용 하고있는 변경 고지 에 따라 #attached. 따라서 위 코드는 본질적으로 마지막 부분이 다음과 같이 변경됩니다.

$build['#attached']['html_head'][] = [$viewport, 'viewport'];

이것은 작동하지 않으며 워치 독에 오류 메시지가 없습니다. 또한 변경 페이지에서이 퍼팅뿐만 아니라 교환 해봤 $build으로 $variables하고 $output있지만, 그것은 여전히 작동하지 않습니다. 또한 전체를 배열로 시도했습니다.

  $build['#attached']['html_head'][] = array(
    '#type' => 'html_tag',
    '#tag' => 'meta',
    '#attributes' => array(
      'name' => 'viewport',
      'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
    ),
  );

...하지만 작동하지 않았습니다. 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 작동 해야하는 것 같습니다.

최신 정보

다음은hook_page_attachments_alter D8 베타 2에없는 것을 사용 하는 작업 코드 입니다 .

function MYTHEME_page_attachments_alter(array &$page) {
    $viewport = array(
      '#type' => 'html_tag',
      '#tag' => 'meta',
      '#attributes' => array(
        'name' => 'viewport',
        'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
      ),
    );
    $page['#attached']['html_head'][] = [$viewport, 'viewport'];
  }

유일한 문제는 이제 코어의 뷰포트 태그를 덮어 쓰지 않으므로 사용자 정의 태그와 코어에 붙어 있다는 것입니다. 어떻게 처리해야합니까, 아니면 내 태그가 코어를 덮어 써야합니까?

여기에 이미지 설명을 입력하십시오

답변:


7

사전 프로세스에 $ build가 없으므로 그렇게 작동하지 않습니다. $ build는 어딘가에 렌더링되는 렌더 배열이어야합니다. 또한 함수가 실행되기 전에 template_preprocess_html ()에서 이미 변환되었으므로 이전에 어떻게 작동했는지 알 수 없습니다.

hook_page_attachments (_alter) ()를 추가하고 더 이상 사용되지 않는 hook_page_build / alter () 가 방금 커밋되었으며 테마로 hook_page_attachments_alter ()를 구현할 수 있습니다. 커밋 된 패치에서 common_test_page_attachments_alter () 와 같은 예제를 찾으십시오 .

그래서 $page['#attached']['html_head'][] = [$viewport, 'viewport'];거기에서 작동해야합니다.


글쎄, 당신의 도움에 감사하지만 난 여전히 길을 잃었다. 이 기능을 사용할 수 있는지 궁금합니다. hook_page_build를 시도하고 변경했지만 여전히 기쁨은 없습니다. 심지어 운이없는 코어에서 몇 가지 예를 들었습니다. 그렇게 힘들어 야 할 것 같지 않습니다.
Danny Englander

1
그런 다음 현재 코드 예제로 질문을 업데이트하십시오. 필자가 지적한 예제는 테스트에 사용되므로 작동하고 있습니다. 따라서 당신은 다르게 행동해야합니다. 사용하도록 제안한 후크는 page_build ()가 아닌 hook_page_attachments_alter ()입니다. 후크를 구현할 때 무언가가 작동하지 않는 경우 가장 먼저 확인해야 할 것은 종료를 추가하여 코드가 호출 된 경우입니다. 예를 들어.
Berdir

제안 된을 사용하는 작업 코드를 추가했습니다 hook_page_attachments_alter. 한 가지 영향이 있는데, 이제 두 개의 뷰포트 태그가 있습니다. 하나는 코어에서, 하나는 내 테마에서 추가 한 것이므로 처리 방법을 잘 모르겠습니다.
Danny Englander

1
html_head 요소는이 요소를 사용하여 일을 독특하게 유지할 수 있습니다. 핵심을 살펴보면 해당 요소가 DefaultHtmlFragementRenderer :: setDefaultMetatags ()에 추가됩니다. 새로운 API에는 키를 지정하는 방법이 없으므로 상당히 심각한 문제로 보입니다. 이것에 대한 문제를 열 ​​것을 제안합니다. 아마 drupal.org/node/2350943 과 관련이 있습니다.
Berdir

: 나는 핵심 문제 열 drupal.org/node/2359987
대니 잉글
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.