กำลังพยายามเพิ่มแท็กส่วนหัว html ใน Drupal 8, beta 2


9

ด้วย Drupal 8.0 beta2, 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 Beta 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 ใน preprocess ดังนั้นจึงใช้งานไม่ได้ $ build จำเป็นต้องเป็นอาร์เรย์เรนเดอร์ที่เรนเดอร์ไว้ที่อื่น ฉันยังไม่เห็นว่ามันจะใช้งานได้ดีมาก่อนเพราะมันถูกแปลงเป็น template_preprocess_html () ก่อนที่ฟังก์ชันของคุณจะทำงาน

เพิ่ม hook_page_attachments (_alter) () และการเลิก hook_page_build / แก้ไข ()มีความมุ่งมั่นเพียงและเป็นรูปแบบที่คุณสามารถใช้ hook_page_attachments_alter () ดูตัวอย่างในแพทช์มุ่งมั่นเช่นcommon_test_page_attachments_alter ()

ดังนั้นสิ่งที่$page['#attached']['html_head'][] = [$viewport, 'viewport'];ควรจะมีใน


ขอบคุณสำหรับความช่วยเหลือของคุณ แต่ฉันก็ยังหลงทางอยู่ ฉันอยากรู้ว่าคุณจะได้งานนี้ไหม ฉันลองใช้ hook_page_build แล้วเปลี่ยน แต่ก็ยังไม่มีความสุข ฉันจับตัวอย่างจากแกนโดยไม่มีโชค ดูเหมือนจะไม่ยากขนาดนั้น
Danny Englander

1
อัปเดตคำถามของคุณด้วยตัวอย่างรหัสปัจจุบันของคุณแล้ว แน่นอนตัวอย่างที่ฉันชี้ไปจะทำงานตามที่ใช้สำหรับการทดสอบ ดังนั้นคุณต้องทำอะไรที่แตกต่าง เบ็ดที่ฉันแนะนำให้ใช้คือ hook_page_attachments_alter () ไม่ใช่ page_build () เมื่อใช้งาน hook และบางอย่างไม่ทำงานสิ่งแรกที่ต้องตรวจสอบคือหากรหัสของคุณถูกเรียกใช้ด้วยการเพิ่มการออก ตัวอย่างเช่น.
Berdir

hook_page_attachments_alterฉันเพิ่มรหัสที่ใช้ของปัญหาการทำงาน มีด้านหนึ่งส่งผลกระทบต่อตอนนี้ฉันมีแท็กวิวพอร์ตสองแท็กจากคอร์และแท็กที่เพิ่มจากธีมของฉันดังนั้นฉันไม่แน่ใจว่าจะจัดการกับสิ่งนั้นอย่างไร
Danny Englander

1
นั่นคือสิ่งที่อาร์กิวเมนต์ที่สองควรจะมีไว้สำหรับองค์ประกอบ html_head กำลังใช้สิ่งนั้นเพื่อทำให้สิ่งต่าง ๆ ไม่ซ้ำกัน ดูที่แกนองค์ประกอบนั้นจะถูกเพิ่มใน DefaultHtmlFragementRenderer :: setDefaultMetatags () API ใหม่ไม่มีวิธีระบุคีย์ซึ่งดูเหมือนว่าจะเป็นปัญหาร้ายแรง ฉันขอแนะนำให้คุณเปิดปัญหาสำหรับเรื่องนี้ อาจจะdrupal.org/node/2350943มีความเกี่ยวข้อง
Berdir

ฉันเปิดประเด็นหลัก: drupal.org/node/2359987
Danny Englander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.