it-swarm.com.de

Richtiger Weg, um JS und CSS zu Node / Edit und anderen Formularen hinzuzufügen

Ich erstelle eine Site mit vielen JS und frage mich, wo ich den JS-Code ablegen soll. Optimalerweise möchte ich die JS bei jedem Modul und nicht bei der Themenebene behalten. Einige Inhalte können als Blöcke usw. angezeigt werden.

Aber ich habe einige Probleme mit dem Cache. In meinem Beispiel muss ich JS & CSS zum Knotenbearbeitungsformular hinzufügen. Ich habe hook_block_view verwendet, aber es wird zwischengespeichert. Wenn also ein Fehler im Knotenbearbeitungsformular auftritt, werden die Funktionen drupal_add_js & drupal_add_css nicht aufgerufen. Gleiches scheint für hook_node_prepare zu gelten.

Wo würden Sie die JS & CSS-Ebene eingeben? und gibt es Hooks, die aufgerufen werden, auch wenn im Knotenbearbeitungsformular ein Fehler vorliegt?

10
Jens

Wenn Sie JS und CSS zur Knotenbearbeitungsseite im Besonderen (oder zu einem beliebigen Formular im Allgemeinen) hinzufügen möchten, ist der beste und richtige Ort dafür hook_form_alter (). Die Eigenschaft, die Sie verwenden sollten, ist #after_build.

Dieser Kommentar zu DO sagt Ihnen genau, was zu tun ist - http://drupal.org/node/1253520#comment-4881588

Hoffe das hilft :-)

6
Sumeet Pareek

Sie sollten die Eigenschaft # angehängt verwenden, um sicherzustellen, dass JS/CSS immer zusammen mit einem anderen Renderelement ordnungsgemäß geladen wird.

6
Letharion

Ich hatte das Gefühl, dass diese Antworten und Kommentare dringend Beispielcode benötigten, insbesondere die von @AyeshK und @Letharion. Dies ist zu lang für einen Kommentar. Bitte verzeihen Sie die Antwort. Wenn es für Sie nützlich ist, stimmen Sie entweder die Antwort von Sumeet oder Letharion ab. Das folgende Beispiel fügt natürlich CSS hinzu, wäre jedoch für das Hinzufügen von Javascript nahezu identisch.

Verwenden Sie die Antwort von @ Sumeet, aber verwenden Sie das #attached Eigenschaft anstelle von drupal_add_css , sieht so aus:

/* Implements hook_form_FORM_ID_alter() */
function MY_MODULE_form_MY_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $form['#after_build'][] = 'MY_MODULE_some_function_name_after_build';
}

function MY_MODULE_some_function_name_after_build($form, &$form_state) {
  $style_path = drupal_get_path('module','MY_MODULE') . '/css/my_css.css';
  // drupal_add_css('file', $style_path);
  $form['#attached']['css'][] = $style_path;
  return $form;
}

Schließlich ist die Abwertung von drupal_add_css finden Sie in dieser Beitrag . Das mag für viele neu sein, für die drupal_add_xxx genauso gut funktioniert hat wie für mich.

3

Für Drupal 8) würde ich Ihnen raten, sich diesen Artikel anzusehen

library.yml

something: 
  version: VERSION
  js: 
    js/something.js: {}
  dependencies: 
    - core/jquery

. module

function MODULE_page_attachments(array &$page) {
  $page['#attached']['library'][] = MODULE/something;
}
0
Chris Happy