Agregar CSS y JS para formar con archivos adjuntos

36

Necesito agregar algunos archivos CSS y JavaScript externos y locales a un formulario, pero parece que no puedo encontrar la manera correcta de hacerlo. ¿Simplemente agrego las rutas y las URL para los archivos JS y CSS?

Supongo $form['#attached']['css'][]y $form['#attached']['js'][]son los lugares correctos para hacer esto, por lo que se vuelven a cargar en las reconstrucciones de formularios. Parece que me falta algo.

vintorg
fuente

Respuestas:

71

¿Has mirado la documentación?

Adjunte CSS y JS para formar

http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#attached

$form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';

$form['#attached']['js'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.js';

Archivos externos

http://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_process_attached/7

Los archivos externos 'js' y 'css' también se pueden cargar. Por ejemplo:

$build['#attached']['js']['http://code.jquery.com/jquery-1.4.2.min.js'] = array('type' => 'external');
Alex Gill
fuente
Yo tengo. ¿Me puede decir dónde hace referencia a cómo manejar archivos CSS externos?
vintorg
2
Solo una nota: puede agregar JavaScript como se describe anteriormente a un formulario específico agregando una función nombrada <module name>_form_<form id>_altera su módulo. La identificación del formulario de búsqueda se describe aquí: drupal.stackexchange.com/questions/5802/…
Nux
1
¡Este ejemplo es un poco malo porque está asumiendo que este será el ÚNICO archivo adjunto en el formulario!
doublejosh
66
Comentario por doublejosh significa: por lo general, uno debe agregar a la matriz en lugar de reemplazarla. Entonces, el ejemplo debería ser $form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';etc.
tanius
11

Aquí está el método para agregar CSS en línea a los formularios ...

$form['#attached']['css'][] = array(
  'data' => '.my-example-element { display: none; }',
  'type' => 'inline',
);

Tenga en cuenta que debe agregar a la matriz css en lugar de reemplazarla . Lo que significa que debe usar: en ['css'][] =lugar de ['css'] =evitar aplastar otras adiciones.

doublejosh
fuente
6

Aquí hay una forma de hacer esto a través de. llamar a una función usando #after_buildpropiedad. Simplemente pase su identificación de formulario en la caja del interruptor.

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'my_form':
      $form['#after_build'][] = 'mymodule_after_build';
      break;
  }
}

function mymodule_after_build($form, &$form_state) {
  $path = drupal_get_path('module', 'mymodule');
  drupal_add_js ("$path/mymodule.js");
  return $form; 
}

También puedes seguir este buen tutorial Agregando css y js a formularios drupal

Espero que esto ayude. :)

Prerit Mohan
fuente
Si bien esto todavía funciona en Drupal 7, parece ser un hack D6 , necesario porque #attachedno existía en D6 .
tanius
No debe usar drupal_add_jsen un formulario. Terminará con problemas de estado de validación.
doublejosh
1
@doublejosh Esta es una respuesta de tres años :)
Prerit Mohan