Drupal 7 ma kilka naprawdę rewelacyjnych rozwiązań, jedną z takich wprowadzonych funkcjonalności jest moduł Overlay. Oferuje on otwieranie administracyjnych stron na warstwie jedynie za pomocą wywołania adresu w postaci bazowy_adres_strony.pl/podstrona#overlay=adres_strony_otwieranej_na_warstwie. Drupal już sam dba o wywołanie odpowiednich funkcji, aby taką stronę obsłużyć. Dzięki temu użytkownik unika niepotrzebnych ładowań stron, może bez przeładowania powrócić do strony, na której otworzył warstwę, natomiast w przypadku, gdy user nie ma włączonego JavaScript w swojej przeglądarce nastąpi najzwyczajniejsze w świecie przekierowanie na docelową stronę. Same plusy.

Jedyny minus jest taki, że Drupal otwiera na warstwach tylko strony określone jako administracyjne. Wydaje mi się to sporym marnotrawstwem, ponieważ sama idea jest godna podziwu, nie wymaga praktycznie znajomości pisania jakiegokolwiek kodu i jest przyjazna dla użytkowników.

Istnieje jednakże pewien trick umożliwiający uruchamianie modalnego okna dla stron innych niż administracyjne. Drupal 7 i Drupal 8 oferują nowego hooka - hook_admin_paths_alter(). Pozwala on na dodawanie nowych stron do sekcji administracyjnej i usuwanie już istniejących. Standardowo wszystkie strony posiadające ścieżkę drupalową admin są stronami administracyjnymi (dodatkowo jeszcze strony użytkowników i dodawania node'ów), jednakże dzięki temu hookowi można do nich dodawać nowe pozycje... a więc tym samym otwierać je na warstwach.

Tak więc w przypadku, gdy chcemy otworzyć zwyczajną stronę na warstwie we własnym module należy wykonać odpowiedniego hooka:

<?php
function mymodule_admin_paths_alter(&$paths) {
  // Drupal potraktuje ponizsze strony jako administracyjne
  $paths['moja/fajna/sciezka'] = TRUE;
  // Standardowo znak * symbolizuje
  // dowolne ciagi znakow
  $paths['duzo/sciezek/*'] = TRUE;
}
Przykład z projektów własnych dotyczący przeglądarkowej gry, pozwalający zaatakować nieprzyjaciela; tabela z wyborem jednostek nieprzyjacielskich jest stworzona przez własny moduł, dzięki zastosowaniu odpowiednich hooków jest jednak w stanie otworzyć się jako modalne okno.
Przykład z wersji developerskiej mojego projektu zapoznawczego "Drupal 7 z przymrużeniem oka"

Należy również pamiętać, aby na stronie admin/people/permissions ustawić uprawnienia do korzystania z Overlaya dla innych użytkowników niż administrator. W przypadku gdy Drupal przekierowuje użytkownika do strony, zamiast wyświetlać jej zawartość na warstwie niezbędne może się okazać również wyczyszczenie cache'u, które można przeprowadzić na stronie admin/config/development/performance lub za pomocą modułu Devel.

Powiem szczerze, że mam wielką nadzieję iż w następnych wersjach Drupala do otwierania stron na warstwach nie potrzeba będzie już żadnego pisania kodu. Przedstawiony sposób jest bowiem bardziej work-aroundem niż pełnoprawną funkcjonalnością. Minusem jest różny wygląd strony wywołującej i strony wywoływanej, jeśli mamy ustawioną inną skórkę domyślną i inną administratorską. Moim zdaniem to jednak zdecydowanie niewystarczające powody, aby przestać używać w nie-administracyjnych miejscach genialnego Overlaya.

// edit
Pojawił się moduł Overlay Paths, który dostarcza takiej samej funkcjonalności z interfejsu użytkownika.

Dodaj komentarz