Witamy na ziemi F T y p C onfiguration M ARZĄDZANIE, aka FCM ! Nie chodzi tylko o funkcje , a nie o zarządzanie konfiguracją (wprowadzone w Drupal w wersji 8). Zamiast tego, jest to szczególny przypadek S oftware C onfiguration M ARZĄDZANIE , aka SCM . Głównie dlatego, że Funkcje można uznać za generator kodu, podczas gdy wygenerowany kod należy migrować przez wiele środowisk. Czytaj dalej, aby uzyskać więcej informacji.
1 - Plusy i minusy korzystania z funkcji
Zalety korzystania z funkcji
- Zautomatyzuj wdrażanie zmian zastosowanych w witrynie deweloperskiej Drupal do co najmniej jednej docelowej (wcześniejszej) strony produkcyjnej Drupal (zamiast ręcznej instalacji).
- Ułatwia udostępnianie (wysyłkę) ciągłego rozwoju Drupal między deweloperami / twórcami witryn Drupal (np. Aby niektóre Widoki utworzone przez eksperta ds. Widoków były dostępne dla Drupala Themera pracującego w innej witrynie deweloperskiej w celu stworzenia motywu tego widoku).
- Wielka integracja zarówno GIT i Drush dla wysyłać kopię kodu generowanego przez funkcje (na miejscu) do rozwoju wybrany docelowych (wstępnie) zakładów produkcyjnych.
Wady korzystania z funkcji
- Unikanie konfliktów funkcji i / lub zarządzanie zależnościami funkcji może być trudne!
- Nie jest łatwo rozpocząć korzystanie z funkcji w istniejącej (produkcyjnej) witrynie.
- Instalowanie / włączanie modułu funkcji jest łatwe (tylko moduł), ale nauka prawidłowego korzystania z funkcji jest dużym wyzwaniem.
2 - Techniki pakowania funkcji
Korzystanie z funkcji zależy od Twojej wyobraźni, jak spakować (skomponować) zawartość funkcji. Oto kilka technik, które można do tego wykorzystać.
Jedna super funkcja
Jest to dość prosta technika pakowania: wszystko jest spakowane razem w jednej funkcji (niektórzy nazywają to funkcją „Boga” ...). Wydaje się to łatwe, dość do przodu itp. Ale ta technika prowadzi również do „konfliktów” (jak wyjaśniono poniżej) mniej więcej od razu…
Dobrym przykładem tego wydaje się tworzenie „dystrybucji Drupal”, w której zakłada się, że wszyscy użytkownicy używają tego samego zestawu modułów, konfiguracji itp. Jeśli jednak taka dystrybucja składa się z wielu funkcji strony internetowej (nie używać słowa „funkcje” ...), bardziej odpowiednie wydaje się podzielenie takich funkcji na wiele funkcji, jak wyjaśniono poniżej.
Na podstawie funkcjonalności strony internetowej
Ta technika pakowania tworzy oddzielną funkcję dla każdej funkcjonalności strony internetowej, taką jak:
- Cecha A = zaimplementuj „ * Galerię ”.
- Funkcja B = wdrożenie „ * Blog ”.
- Funkcja C = zaimplementuj „ * Kalendarz wydarzeń ”.
Na podstawie sekcji administracyjnych Drupala
Ta technika pakowania tworzy oddzielne funkcje dla każdej (głównej) sekcji administracyjnej strony internetowej Drupal, która jest używana do utworzenia strony, takie jak:
- Wszystkie wymagane moduły są zawarte w funkcji A,
- Wszystkie podstawowe definicje pól są zawarte w funkcji B,
- Wszystkie typy treści są zawarte w funkcji C,
- Wszystkie uprawnienia są zawarte w funkcji D,
- Wszystkie role są zawarte w funkcji E,
- Wszystkie zmienne są zawarte w funkcji F,
- Wszystkie (niestandardowe) widoki są zawarte w funkcji G,
- Wszystkie (niestandardowe) reguły są zawarte w funkcji H,
- Itp.
Powyższa lista jest praktycznie nieograniczona: w końcu możesz nawet pomyśleć o niej jako o 1 funkcji dla każdej opcji menu administratora Drupal ... jeśli chcesz posunąć się tak daleko.
IMO jest również najbardziej zalecanym podejściem do funkcji pakietu.
3 - Zmniejszenie prawdopodobieństwa konfliktów w funkcjach i / lub GIT
Nie używaj ponownie pól
Wydaje się, że wiele konfliktów jest spowodowanych ponownym użyciem pól w wielu typach treści. Np. W typie treści A masz pole z nazwą komputera field_somefield
, które jest również używane jako pole w typie treści B o tej samej nazwie komputera, field_somefield
ale które jest innym typem pola i / lub innymi ustawieniami pól, które są różne.
Nie wykorzystując ponownie pól wśród typów treści, unikniesz uruchamiania tego problemu. Zapoznaj się z interesującą konwencją nazewnictwa dla nazwy komputera typów zawartości i pól, jak pokazano w tabeli Architektura i dokumentacja informacji o opakowaniach , która jest częścią artykułów o „ Modelu względności dla Drupala ”. Więcej informacji na ten temat można znaleźć w mojej odpowiedzi na pytanie „ Jak modelować zawartość (typy) z punktu widzenia bazy danych? ”.
Podziel funkcje w zależności od tego, kto na czym pracuje
Jeśli w jednej witrynie pracuje wiele osób, liczbę konfliktów można zmniejszyć, organizując (= tworząc osobne) funkcje w zależności od tego, kto nad czym pracuje. Przykładem tego może być ten przykład:
4 - Zalecane środowiska Drupal
Wszystko powyżej powinno pomóc w jakiś sposób ułatwić korzystanie z Funkcji . Jednak, aby upewnić się, że wszystko będzie działało zgodnie z oczekiwaniami (zaprojektowane), musisz również mieć odpowiedni zestaw środowisk (logicznie powiązane strony Drupal) z zasadniczo następujących powodów:
- scalanie funkcjonalności zapewnianej przez wiele funkcji.
- przewidywać i rozwiązywać konflikty.
- testowanie przez użytkownika końcowego wszystkich scalonych funkcji, które są certyfikowane jako nie powodujące żadnych konfliktów.
W idealnym świecie te logicznie powiązane witryny Drupal powinny być skonfigurowane i używane w następujący sposób:
- Osobista witryna deweloperska - każdy programista witryny ma oddzielną witrynę programistyczną. Gdy część rozwoju jest gotowa do udostępnienia komuś innemu, tworzona jest odpowiednia funkcja, która jest dostarczana do środowiska testowego.
- Witryna z piaskownicą - jest to środowisko Drupal, które zawiera tylko rdzeń Drupala, używane do jednostkowego testowania kompletności pojedynczej funkcji. Jeśli funkcja przypadkowo ma jakieś nieoczekiwane zależności (np. Jakiś moduł, od którego ta funkcja zależy, co nie jest włączone w piaskownicy), wtedy właśnie ta zależność stanie się jasna.
- Witryna przejściowa - tutaj jest dostarczana jedna lub więcej funkcji (utworzonych w witrynie deweloperskiej). Może to być tylko poprawka dla jakiegoś problemu produkcyjnego lub może to być miejsce, w którym skonsolidowane są wszystkie prace nad nową wersją strony. Jeśli istnieją konflikty między wieloma funkcjami, jest to środowisko, w którym najpierw się pojawią ... i trzeba je jakoś rozwiązać.
- Witryna zapewniania jakości - po tym, jak środowisko testowe zostanie uznane za stabilne, nadszedł czas, aby przejść do odpowiednich funkcji i udostępnić je również na wyższym poziomie, gdzie można ich używać do testowania jakości, testów akceptacyjnych, testów objętościowych itp. Na tym poziomie powinien zachować szczególną ostrożność, dopuszczając wszelkie dodatkowe zmiany (jeśli takie istnieją). Ponieważ każda taka zmiana może unieważnić wszystkie wcześniejsze testy przeprowadzone w tym środowisku.
- Shadow Production Site - Aby przygotować aktywację w rzeczywistej produkcji, możesz najpierw promować odpowiednie funkcje w środowisku, które jest uważane za kopię (cień) twojego rzeczywistego środowiska produkcyjnego. Jeśli na tym etapie procesu migracji coś nadal się psuje, oznacza to czerwoną flagę, aby cofnąć niektóre z poprzednich kroków. Napraw to i spróbuj ponownie, aż wszystkie zaangażowane strony zatwierdzą zmiany.
- Zakłady produkcyjne - jeśli wykonałeś wszystkie poprzednie kroki, krok ten powinien być zrozumiały i łatwy. W zależności od potrzeb może to być pojedyncza witryna lub coś równoważnego z wieloma witrynami Drupala, podczas gdy wszystkie zaangażowane strony mają te same wersje wszystkich funkcji.
- Strona bazowa - Z mojego doświadczenia wynika, że nie ma wielu (jeśli w ogóle) implementacji Drupal, w których ten typ strony jest używany (również). Jest to po prostu kopia Witryny produkcyjnej, ale dostępna dla programistów Drupala, testerów itp., Których można użyć do sprawdzenia, jak wyglądają witryny produkcyjne lub do przeprowadzenia szkolenia użytkowników itp. I za każdym razem, gdy nowe opracowanie Cykl zostanie rozpoczęty, składniki witryny, na które będzie miało to wpływ (należy je zmienić), powinny zostać „skopiowane” przy użyciu tej strony początkowej jako danych wejściowych, a jako docelowej witryny rozwoju osobistego .
Oczywiście powyższa lista rodzajów witryn Drupal jest jak idealny świat. W zależności od wielkości zespołu programistów i / lub dostępnych budżetów na ich tworzenie i utrzymanie, nie wszystkie z nich mogą być wykorzystane (lub niedrogie). Inwentarz ten jest wzorowany na najlepszych praktykach w obszarze SCM, stosowanych głównie we wszystkich dużych / globalnych korporacjach (bankach, liniach lotniczych itp.).
5 - Powiązane moduły
Silne ramie
Strongarm moduł pozwala na eksportowanie zmiennych (modułów, które przechowują swoje ustawienia zmiennych) z funkcjami modułu.
Eksport węzłów
Eksport Węzeł Moduł pozwala użytkownikom na węzłach eksportowych, a następnie zaimportować je do innej instalacji Drupala.
Eksport roli
Rola Export Moduł pozwala role mieć machine_names i generuje unikalny identyfikator roli (RID) w oparciu off z nazwa_komputera. Role można eksportować za pomocą funkcji i uzyskać dokładnie to samo, jeśli zostaną zaimportowane na inne strony.
Funkcje Banish
Moduł funkcji Banish pozwala całkowicie wykluczyć poszczególne komponenty funkcji z interfejsu użytkownika funkcji i eksportu funkcji. Oto cytat na ten temat ze strony projektu:
Ten moduł jest przydatny, gdy istnieją komponenty funkcji, które chcesz mieć pewność, że NIGDY nie zostaną wyeksportowane. Jeśli używasz funkcji do budowania lub wdrażania witryny, prawdopodobnie spotkałeś się z problemem przypadkowego wyeksportowania zmiennych znaczników czasu, takich jak cron_last lub update_last_check. Możesz także chcieć usunąć uprawnienia dla modułów programistów, aby nie dały się złapać na resztę uprawnień witryny, które chcesz wyeksportować. Wykluczone przedmioty nie pojawią się w module funkcji ANI ŻADNYM MODUŁU FUNKCJI, więc używaj ich ostrożnie. Aby uzyskać centralną listę funkcji, których nigdy nie należy eksportować, zobacz https://www.drupal.org/node/2400531
FASOLA
Bean moduł sprawia, że bloki eksportowane. Oto cytat na ten temat ze strony projektu:
Pomyśl o Fasoli jako metodzie dostarczania nowych typów (w porównaniu do węzła byłby to typ zawartości), która następnie zapewnia interfejs dodawania treści, aby utworzyć tyle bloków, ile potrzebujesz (patrz zrzut ekranu poniżej). Zawartość fasoli można następnie umieścić wokół witryny, tak jak każdy inny blok.
Moduł ten działa również doskonale w połączeniu z modułami integracji funkcji UUID i UUID . Moduł ten zaczął się dopiero w D7, ale został już dołączony do rdzenia Drupal 8. Samouczek wideo Samouczek modułu Drupal Bean - korzystanie z interfejsu użytkownika narzędzia Bean Admin stanowi świetne wprowadzenie do zrozumienia mocy tego modułu i tego, co możesz z nim zrobić (tylko przy użyciu technik tworzenia witryny, bez konieczności niestandardowego kodowania).
Siedlisko
Habitat moduł największy sens w sposób Cechy opartych pracy. Oto cytat na ten temat ze strony projektu:
W konfiguracji wielośrodowiskowej (np. Prod, test, dev, local) istnieje kilka modułów, które zawsze chcesz włączyć lub wyłączyć w niektórych środowiskach. Za każdym razem, gdy synchronizujesz bazę danych, musisz ponownie włączyć / wyłączyć te same moduły. Co gorsza, stajesz się leniwy i włączasz moduły programistyczne podczas produkcji.
Habitat zapewnia ustawienia włączania lub wyłączania niektórych modułów w każdym środowisku (siedlisku). Wystarczy ustawić zmienną, np. $ Conf ['habitat'] = 'local'; w pliku settings.php (rzeczywistą zmienną, którą można tam użyć, jest konfigurowalny dla bieżącego przepływu pracy). Wyłączanie / włączanie modułów odbywa się na hook_init.
6 - Zalecane zasoby:
7 - Możliwe alternatywy dla korzystania z funkcji
Jeśli nie jesteś w stanie lub nie chcesz (jeszcze) korzystać z Funkcji , możesz sprawdzić, w jakim stopniu poniższe podejścia / moduły mogą stanowić jakiś rodzaj alternatywy.
Ręczny eksport / import
Są to powszechnie znane obiekty (w celu uniknięcia Słowo funkcje ...), dostępne za pośrednictwem interfejsu administratora, dla modułów takich jak Regulaminu , Wyświetleń itd (lista niepełna!).
Kopia pakietu
Niektóre osoby uważają moduł kopiowania pakietu za możliwą alternatywę. Obsługuje eksport / import dla:
- Typy węzłów
- Taksonomia
- Użytkownik.
- Pola API pola.
- Grupy terenowe.