Najlepsza praktyka dotycząca budowania modułów za pomocą klas

19

Chcę zacząć budować moje moduły jako klasy teraz, gdy leniwe / automatyczne ładowanie jest w Drupal 7, i chciałbym spojrzeć na niektóre moduły (contrib lub core), które świetnie sobie z tym radzą.

Czy istnieje kreatywny sposób na zintegrowanie klasy jako haczyków? Czy implementuję każdą funkcję jako wtyczkę Ctools?

Każdy przechodzący powinien zauważyć, że D7 ma nowe files[]deklaracje w .infoplikach modułów dla klas / interfejsów auto / leniwych ładujących: Pisanie plików .info (Drupal 7.x) .

Poniżej znajduje się dobra lektura, aby uzyskać motywacje i konstytucję (niejako) ze społeczności Drupal Programowanie Drupal z perspektywy obiektowej .

electblake
źródło

Odpowiedzi:

16

Moduł, który nie jest klasą Crell, powinien być przeczytany jako pierwszy.

Największą częścią OOP w Drupal 7 jest nowa warstwa abstrakcji bazy danych (zaprojektowana przez tego samego Crell i innych). To implementuje wiele wzorców, które mogą i powinny być ponownie użyte.

Na przykład:

Coś, co jest nadal controversaly omówione jest ukrywanie informacji . DBTNG implementuje to, chroniąc właściwości klasy i uniemożliwiając bezpośredni dostęp. Z drugiej strony mamy hook_query_alter () i można je zmieniać prawie dowolnie za pomocą różnych metod getter referencyjnych .

Berdir
źródło
świetna odpowiedź, mnóstwo świetnych zasobów do aktualizacji mojego myślenia podczas tworzenia kodu modułu!
electblake
3

To interesujące pytanie.

Idea modułu Drupal jako klasy jest bardzo interesująca. Jednak nawet w modułach D7 po prostu implementuj funkcje przechwytujące, które są sprawdzane według nazwy, więc nawet jeśli utworzysz klasę dla swojego modułu, nadal będziesz musiał zaimplementować funkcje przechwytujące, aby je wywołać.

Jednak wiele modułów używa klas wewnętrznie i udostępnia te funkcje za pomocą tych klas. Najbardziej oczywistym przykładem są widoki. To może być dobre miejsce do patrzenia. Należy jednak pamiętać, że wiele modułów używa klas na swój sposób, więc to, czego się uczysz na podstawie widoków, może nie zawsze mieć zastosowanie.

Jeremy French
źródło
Dzięki za wgląd i założyłem, że nadal potrzebuję funkcji hook_functions, aby poprawnie zarejestrować się w Drupal, ale jestem ciekawy, jak moduły to implementują. Rzucę okiem na moduł widoków (i mam nadzieję, że się nie
zgubię
2

Entity API (moduł contrib) pozwala zadeklarować „klasę encji” dla każdego z typów encji, dzięki czemu cały kod związany z twoją encją (tworzenie, ładowanie, zapisywanie, dostęp itp.) Może przejść do klasy (zobacz, jak Organic Grupy to robią, na przykład).

To powiedziawszy, nie przesadzaj. Wtyczki ctools są dobre, gdy ich potrzebujesz (piszesz następne widoki, panele lub reguły), ale używanie klas wszędzie dla ideologicznej czystości nie przyniesie ci wiele dobrego.

Bojan Zivanovic
źródło