Tworzę witrynę z dużą ilością JS i zastanawiam się, gdzie powinienem umieścić kod JS. Optymalnie chciałbym zachować JS z każdym modułem, a nie warstwą motywu. Niektóre treści mogą być widoczne jako bloki itp.
Ale mam pewne problemy z pamięcią podręczną. W moim przykładzie muszę dodać JS i CSS do formularza edycji węzła. Użyłem widoku hook_block_view, ale jest on buforowany. Jeśli więc wystąpi błąd w formularzu edycji węzła, funkcje drupal_add_js i drupal_add_css nie są wywoływane. To samo wydaje się być prawdziwe w przypadku hook_node_prepare.
Gdzie wpisałbyś warstwę JS i CSS? i czy istnieją haki, które są wywoływane, nawet jeśli występuje błąd w formularzu edycji węzła?
#attached
jest zalecane w prawie każdym przypadku. Co więcej, drupal_add_js / css będzie przestarzałe w Drupal 8.Należy użyć właściwości #attached, aby upewnić się, że JS / CSS zawsze jest poprawnie ładowany wraz z innym elementem renderującym.
źródło
#attached
i może dodatkowych informacji na temat problemu, którego unikasz.Czułem, że te odpowiedzi i komentarze desperacko potrzebowały przykładowego kodu, szczególnie tych z @AyeshK i @Letharion. To jest za długie na komentarz, więc proszę wybaczyć odpowiedź. Jeśli okaże się to przydatne, proszę głosować za odpowiedzią Sumeet lub Letharion. Ponadto poniższy przykład oczywiście dodaje CSS, ale byłby prawie identyczny przy dodawaniu javascript.
Użycie odpowiedzi @ Sumeet, ale użycie
#attached
właściwości zamiastdrupal_add_css
wygląda następująco:Wreszcie, wycofanie
drupal_add_css
można znaleźć w tym poście . To może być wiadomość dla wielu, dla których drupal_add_xxx działał dobrze, tak jak dla mnie.źródło
#after_build
to, że według mojej najlepszej wiedzy bzdury i powinny zostać po prostu usunięte. (Istnieje podobny komentarz do odpowiedzi dostarczającej#after_build
rozwiązanie) Myślę, że to samo w sobie wyjaśnia, dlaczego moja krótka odpowiedź jest dobra. Jeśli po prostu spojrzysz na link, który podałem, znajdziesz ten sam kod, ale bez zbędnych elementów.W przypadku Drupala 8 radzę zajrzeć do tego artykułu
źródło