Puncte:1

Ieșiți șirul JSON în fișierul PHPTemplate

drapel in

Vreau să scot un șir JSON ca parte a unui atribut de date pe o etichetă HTML pentru un șablon în Drupal 7. Pentru viața mea, nu îmi pot da seama de ce nu funcționează (funcționează perfect în 8+).

Trebuie să enumerez un set de adrese URL de imagini și dimensiuni media care sunt analizate de Javascript mai târziu.

În template.php:

    $variables['imagini_de_fondul'] = [];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'media' => '(lățimea minimă: 100 rem)',
    ];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'media' => '(lățimea minimă: 48 rem)',
    ];

    $variables['background_images'] = json_encode($variables['background_images']);

În fișierul tpl:

<div data-background="<?php print $background_images; ?>"></div>

Rezultatul este un amestec amestecat de probleme în browser. Adresele URL sunt eliminate și există mult mai multe ghilimele duble decât am introdus:

data-background="[{" srcset":"https:\="" \="" placeimg.com\="" 1600\="" 600\="" tech,="" https:\="" 3200\="" 1200","media":"(min-width:="" 100rem)"},{"srcset":"https:\="" 48rem)"}]"

Nu pot să-mi dau seama de ce există o spațiere suplimentară pe taste sau de ce scapă devreme și rupe restul.Mi se pare corect (mi se pare) cu xdebug, dar atunci când este tipărit în browser este greșit.

Am încercat și un al doilea mod (generați date exemplu):

    $articole = [];

    pentru ($x = 0; $x < 3; $x++) {
      $articole[$x] = [
        'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
        'media' => '(lățimea minimă: 100 rem)',
      ];
    }

    $variables['background_images'] = drupal_json_encode($items);

introduceți descrierea imaginii aici

drapel cn
Încercați în schimb `json_encode($variables['background_images'], JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT)`
drapel cn
De fapt, încercați doar `drupal_json_encode($variables['background_images'])`, face același lucru, dar mai puține caractere
Kevin avatar
drapel in
Am încercat asta, este un rezultat similar (super scăpat și malformat).
Kevin avatar
drapel in
pare să se sufoce din această parte: (lățime minimă: 48 rem)
Puncte:0
drapel cn

Ghilimelele duble sunt cele care cauzează problema, indiferent dacă au fost codificate JSON_HEX_QUOT sau nu. Trebuie să încurce un parser sau ceva undeva în conducta de randare.

Din fericire, este o soluție ușoară, utilizați doar ghilimele simple pentru atributul HTML:

<div data-background='<?php print $background_images; ?>'></div>

Aceeași problemă nu apare pentru ghilimele simple, atâta timp cât folosiți drupal_json_encode Decat json_encode (sau json_encode cu JSON_HEX_APOS steag). Deci, dacă șirurile dvs. includ vreodată ghilimele simple în viitor, aceasta va funcționa în continuare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.