drupal9

En Drupal 9 y 10 pasar scripts de javascript a un template

  1.  Digamos que deseamos pasar una variable form que contiene un script a un template, por ejemplo desde un bloque, entonces el código nos quedaría así:

    class HubspotBlock extends BlockBase {
    
      public function build() {
    $field = '
    <script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/embed/v2.js"></script>
    <script>
     hbspt.forms.create({
       region: "na1",
       portalId: "123456",
       formId: "f46a4f4a64df6a4644a4f6a"
     });
    </script>
    ';
    
        return [
          '#theme' => 'nombre_del_template_declarado_en_el_hook_theme',
          '#form' => $field,
          '#cache' => [
            'contexts' => [
              'url',
            ],
          ]
        ];
      }
     
    }

 

       * Si ponemos cache 0 ó sin cache en el bloque, tomar en cuenta que es script no se repoducirá en el template debido a que el módulo Bigpipe impedirá que se complete la carga del script.

       * Por esa razón debemos poner una cache que se active sólo por rutas en nuesto boque

      '#cache' => [
        'contexts' => [
          'url',
        ],
      ]

      2. Y el template debería permitir que se admitan todas las etiquetas html  poniendo un format full_html.

       *  En el caso de los scripts que no se reproducirán en los bloques, esta forma es suficiente y no necesitamos poner cache por contexts en la url.

{%
  set form_hubspot = {
    '#type':   'processed_text',
    '#text':    form,
    '#format': 'full_html',
  }
%}
<div class="form-hubspot">
  {{ form_hubspot }}
</div>

Me pareció interesante el artículo

Deseo más información

O también puedes comunicarte con nosotros.

por whatsapp por whatsapp

Añadir nuevo comentario

Me gustaría más información sobre:

CAPTCHA