ฉันต้องการส่งออกสตริง JSON โดยเป็นส่วนหนึ่งของแอตทริบิวต์ข้อมูลบนแท็ก HTML สำหรับเทมเพลตใน Drupal 7 ตลอดชีวิตของฉัน ฉันคิดไม่ออกว่าทำไมมันถึงใช้งานไม่ได้ (ทำงานได้อย่างสมบูรณ์แบบใน 8+)
ฉันต้องการรายการชุดของ URL รูปภาพและขนาดสื่อซึ่งแยกวิเคราะห์โดย Javascript ในภายหลัง
ใน template.php:
$variables['background_images'] = [];
$variables['background_images'][] = [
'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
'สื่อ' => '(ความกว้างต่ำสุด: 100rem)',
];
$variables['background_images'][] = [
'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
'สื่อ' => '(ความกว้างต่ำสุด: 48rem)',
];
$variables['background_images'] = json_encode($variables['background_images']);
ในไฟล์ tpl:
<div data-background="<?php print $background_images; ?>"></div>
ผลลัพธ์คือปัญหามากมายในเบราว์เซอร์ URL เป็นอักขระหลีก และมีเครื่องหมายคำพูดซ้ำซ้อนมากกว่าที่ฉันป้อนมาก:
data-background="[{" srcset":"https:\="" \="" placeimg.com\="" 1600\="" 600\="" เทคโนโลยี,="" https:\="" 3200\="" 1200","media":"(ความกว้างต่ำสุด:="" 100rem)"},{"srcset":"https:\="" 48rem)"}]"
ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงมีการเว้นวรรคพิเศษบนปุ่มหรือเหตุใดจึงหลุดออกไปก่อนกำหนดและทำให้ส่วนที่เหลือเสียหายมันดูถูกต้อง (สำหรับฉัน) ด้วย xdebug แต่เมื่อพิมพ์ไปยังเบราว์เซอร์มันผิด
วิธีที่สองที่ฉันได้ลอง (สร้างข้อมูลตัวอย่าง):
$รายการ = [];
สำหรับ ($x = 0; $x < 3; $x++) {
$รายการ[$x] = [
'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
'สื่อ' => '(ความกว้างต่ำสุด: 100rem)',
];
}
$variables['background_images'] = drupal_json_encode($items);