Puncte:-1

Introduceți fragmente PHP în conținut

drapel in

Drupal 9 nu are modulul PHP Filter în nucleu. Trebuie să inserez fragmente PHP în editorul de conținut (de exemplu o variabilă Twig).

Există vreo modalitate de a insera fragmente PHP în conținutul Drupal?

drapel ru
Nu, nu poți, aceasta ar fi o problemă de securitate *URIAȘĂ*. Folosiți [Token filter](https://www.drupal.org/project/token_filter) în schimb, acest modul permite chestii precum ``
Kevin avatar
drapel in
Faceți asta cu jetoane. Aceasta este o practică excepțional de proastă.
Puncte:1
drapel us

Modulul PHP Filter a fost eliminat din nucleul Drupal, deoarece utilizarea necorespunzătoare a acestuia ar cauza probleme de securitate. Problemele de securitate au fost atenuate de faptul că numai utilizatorii cu utilizați PHP pentru setări permisiunea ar putea folosi filtrul de intrare, dar asta nu igienizează codul introdus de editori. Dacă atunci permisiunea a fost acordată necondiționat fiecărui editor, este ca și cum acea permisiune nu ar exista.

Modulul de bază Drupal este acum disponibil ca PHP modul, dar nu l-aș folosi.

Aș prefera să fac ce sugeră Hudri, și folosiți Filtru de jetoane modul. Cu acel modul și adăugând filtrul său de intrare la formatul de intrare utilizat pentru noduri, un utilizator ar putea introduce un simbol care ar fi înlocuit cu valoarea acestuia. În loc de fragmente PHP, aș implementa token-uri personalizate care sunt înlocuite cu valoarea returnată din codul PHP executat în hook_tokens(), unul dintre cârligele necesare modulelor care doresc să implementeze jetoane personalizate.

funcția mymodule_token_info() {
  $tip = [
    'nume' => t('Jetoane personalizate'),
    'description' => t('Jetoane personalizate de utilizat în câmpul corpului nodului.'),
  ];

  // Jetoane globale personalizate.
  $custom['custom01'] = [
    'nume' => t("Personalizat 01"),
  ];
  $custom['custom02'] = [
    'nume' => t("Personalizat 02"),
  ];

  întoarcere [
    'tipuri' => [
      'personalizat' => $type,
    ],
    'jetoane' => [
      'personalizat' => $personalizat,
    ],
  ];
}

funcția mymodule_tokens($tip, $tokens, array $date, array $opțiuni, BubbleableMetadata $bubbleable_metadata) {
  $inlocuiri = [];
  if ($tip == 'personalizat') {
    foreach ($tokens ca $name => $original) {
      dacă ($nume == 'personalizat01') {
        $replacements[$original] = // Setați valoarea token-ului custom01.
      }
      elseif ($nume == 'personalizat02') {
        $replacements[$original] = // Setați valoarea token-ului custom02.
      }
    }
  }
  returneaza $inlocuiri;
}

hook_tokens() ar putea returna, de asemenea, marcajul HTML folosit pentru câmpul corpul nodului. $bubbleable_metadata poate fi folosit pentru a adăuga dependențe de cache.

Această metodă este mai sigură, deoarece nu permite utilizatorilor să introducă cod PHP arbitrar care, potențial, ar putea schimba și parola pentru orice cont de utilizator, șterge tot conținutul site-ului sau trimite informații utilizatorilor către site-uri externe.
Chiar dacă numai utilizatorilor de încredere li s-a permis să utilizeze filtrul de intrare PHP, există întotdeauna șanse ca codul introdus să cauzeze probleme.

Alfred Armstrong avatar
drapel cn
Da, chiar dacă aveți cu adevărat, într-adevăr, încredere în utilizatorii care au permisiunea de a introduce PHP, site-ul dvs. poate fi rupt complet de o eroare de sintaxă.

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.