Widzieliśmy cztery lata i pierwsze wydanie Drupala 8, odkąd zaakceptowana odpowiedź została napisana na pytanie „ Kiedy należy utworzyć Encję, a nie tylko dodać nowy typ zawartości ?” I istoty są bardziej centralne dla Drupala 8 niż w Drupalu 7. ( RefB , RefC , RefD )
W tym nowym świecie Drupal 8 jakie jest drzewo decyzyjne dotyczące tworzenia nowego typu encji treści w porównaniu z nowym typem treści dla encji treści typu „Węzeł”?
Rozważając odpowiedź, weź pod uwagę następujące kwestie:
- Czy nowy typ treści dla typu jednostki treści „Węzeł” jest nadal odpowiedni w 99% sytuacjach w porównaniu do nowego typu jednostki treści?
- Czy drzewo decyzyjne zawiera teraz więcej, lepsze lub jaśniejsze powody, aby odejść od używania typu encji treści „Węzeł” i zamiast tego utworzyć nowy typ encji treści? A jeśli tak, jakie one są? Czy obejmują one:
- Wydajność?
- Bezpieczeństwo / uprawnienia?
- Liczba modułów, które działają z typami treści typu Węzeł i nie działają z innymi typami elementów treści?
- Być może - w oparciu o poprzednią zaakceptowaną odpowiedź, do której odwołuje się powyżej - jedynym ogólnym powodem do utworzenia niestandardowego typu encji treści jest to, że chcesz pogrupować dane Węzła, np. Z terminami taksonomicznymi, lub w inny sposób opatrzyć komentarzem Węzła, np. Komentarzami?
Kompatybilność modułów wydaje się szczególnie interesującą kwestią dla drzewa decyzyjnego. Obecnie niewiele spośród najczęściej instalowanych modułów ma wersję 8.x, która nie jest jedynie wersją alfa, beta lub rc (kandydatem do wydania). I trudno jest określić, ile z nich będzie działać od razu po wyjęciu z pudełka z nowym niestandardowym typem encji w porównaniu z nowym typem encji Node. Wydaje się, że nie istnieje atrybut projektu umożliwiający rozróżnienie między tymi, które są „pisane dla encji” a „pisanymi dla typów treści encji węzłowych”.
Spójrz na pathauto, który jest obecnie czwartym najczęściej instalowanym modułem z tych, które mają jakąkolwiek wersję 8.x. Ludzie ciężko pracują nad wersją 8.x, która ogólnie obsługuje byty, a nie tylko typy treści typu węzeł. A co z pozostałymi modułami? I czy moduły obsługujące jednostki będą na ogół wymagać, aby niestandardowe typy jednostek treści miały „zaczepy” specyficzne dla modułu, zanim moduł będzie z nimi współpracował? (W przeciwieństwie do tego, jak moduły mogą działać od razu po wyjęciu z pudełka z nowymi typami treści?) To wydaje się być wyzwaniem, z którym pracuje zespół pathauto, i być może jest to powód, aby odejść od niestandardowego typu jednostki treści?
Warto również wspomnieć, że rdzeń Drupal 8 zawiera interfejs użytkownika do tworzenia nowych typów treści dla encji treści typu „Węzeł”, ale obecnie nie zawiera interfejsu użytkownika do tworzenia nowych typów encji treści. ( RefX , RefY , RefZ )
Prostym podejściem do tego problemu jest wzięcie pod uwagę celu projektu, wielkości i wymagań biznesowych.
Ważna uwaga tutaj decyzja o utworzeniu nowego typu encji jest zwykle podejmowana przez programistów lub potencjalnych klientów technicznych, a nie twórców witryn lub właścicieli projektów, którzy zarządzają aplikacją i koncentrują się wyłącznie na działalności biznesowej.
Drupal 8 zależy od niektórych pakietów symfony2 i jest bardziej zbliżony do frameworków, rozwoju, który tradycyjny cms mówi o Drupalu z tymi dużymi zmianami architektonicznymi, wyobrażam sobie, że budowanie nowego bytu jest lepsze niż robienie wielu dostosowań i złożonych konfiguracji nad typami zawartości bytu węzła w kolejności aby wykorzystać Drupal wśród innych platform, ponieważ wiele osób nie lubi sposobu, w jaki konfiguracja Drupal i ustawienia rozproszone, możesz spotkać się z niektórymi osobami pochodzącymi z WordPress i używanymi do konfigurowania wszystkich rzeczy z jednego formularza, co denerwuje ich podczas pracy z administracyjnym pulpitem administracyjnym Drupal.
Drupal 9 planuje całkowite usunięcie systemu przechwytującego i zastąpienie go dyspozytorem zdarzeń, co prowadzi do dużej potrzeby interfejsu administracyjnego do utworzenia nowej jednostki, ponieważ zmiana istniejącej funkcjonalności z kodu będzie znacznie trudniejsza dla osób, które nie są programistami i będzie bardzo niezbędna dodaj tę funkcję.
Na koniec widzę, że nowe podmioty dostosowane do potrzeb projektu zapewniają wyższą wydajność lepszą niż złożone typy treści z dużą liczbą pól, ponieważ teraz każde pole dodaje 2 tabele do bazy danych i musi załadować swoją konfigurację na każde żądanie, szczególnie z wymagana ciężka logika biznesowa.
źródło
Prosty i prosty: to nie wszystko. Lista treści może trwać dość długo i może być myląca, jeśli używasz tylko typów zawartości. ( ContentEntityBase może być również zaimplementowany przez niestandardową jednostkę)
W przeciwnym razie (zakładając, że jesteś programistą) preferowane powinny być jednostki niestandardowe. Wiele można łatwo zaimplementować za pomocą wszystkich interfejsów (takich jak wersje, pola, ograniczenia dostępu itp.)
Myśląc o możliwości ponownego użycia w kilku projektach, aby wydmuchać niestandardowe byty. Są też sprytni pomocnicy, tacy jak generator kodu drupal . Aby utrzymać niestandardowe kodowanie (lub złożoność) na niskim poziomie, powinieneś rozważyć użycie typów zawartości, jeśli chcesz:
źródło
To trudne pytanie, które, szczerze mówiąc, myślę, że zrozumiałe dopiero po jego wdrożeniu. Ale jak wspomniano w Remy, nie wszystko jest surowe, treść skierowana do użytkownika .
W Drupal 7 istniała możliwość tworzenia niestandardowych bytów, ale może być zniechęcającym zadaniem, jeśli będziesz miał problemy z OOP. To było w połowie zaimplementowane (lub w połowie zrobione, jak chcesz to powiedzieć), co doprowadziło do sposobów tworzenia podmiotów, które nie były dokładnie jednolite i uzgodnione podejścia, z mieszanym proceduralnym i mieszanym OOP.
W Drupal 8 pomysł jest znacznie bardziej zrealizowany i o wiele łatwiej jest rozpocząć pracę z niestandardową jednostką. Sam węzeł oparty jest na ContentEntityBase, podobnie jak bloki, użytkownicy, pliki i taksonomia.
Węzły są specjalnie przeznaczone do publikowanych, widocznych (lub autoryzowanych) danych o treści, które zwykle działają jako treść (to znaczy w menu lub w mapie witryny, mapie witryny xml lub kanałach RSS itp.). Drupal został zaprojektowany w taki sposób, abyś mógł podłączyć się do dowolnego etapu procesu pracy węzła i zmienić go, co może mieć niezamierzone konsekwencje, jeśli masz niewłaściwą kombinację modułów. Jest to prawdopodobnie kontrowersyjna opinia, ale pomaga się oderwać od idei „wszystko jest węzłem”, aby bardziej objąć koncepcję Entity.
Idealne treści, które tworzą świetne typy treści:
Ich wspólnym wątkiem jest to, że dzielą koncepcję pewnego rodzaju treści. Zwykle jest w dowolnej liczbie stanów przepływu pracy (opublikowany, promowany, lepki, zarchiwizowany, polecany itp. - jeśli korzystasz z niestandardowych opcji publikowania), a duża liczba modułów, z którymi współpracujesz, oddziałuje z nim bezpośrednio, na przykład Pathauto.
Załóżmy jednak, że chcesz przechowywać dane w Drupal, które są wewnętrzne, prywatne, napędzają inne dane lub dane, które nie powinny umożliwiać integracji poza jego zakresem, chyba że na to zezwalasz. Jakie to mogą być dane? Oto kilka możliwych typów:
Co sprawia, że są tak różne? Dlaczego miałbyś chcieć encji do kontaktu, zamiast używać modelu użytkownika? Możesz podać kilka argumentów, ale mój przykład byłby taki, że jeśli powiesz, zbierając adresy e-mail i nazwiska oraz niektóre inne metadane z formularza kontaktowego, przechowuj te dane jako jednostkę niestandardową. Zapobiegasz zanieczyszczeniu listy użytkowników elementami niebędącymi kontami, zmniejszasz potencjalne problemy z bezpieczeństwem (co jeśli skrypt lub ktoś przypadkowo zaktualizował te konta, aby były administratorami lub wysłał masową pocztę?), Sprawujesz wewnętrzne zarządzanie faktycznym użytkownikiem konta łatwiej i segmentujesz to, co przechwytujesz, na to, co to jest, specjalistyczny bit danych.
Odtąd jest w dużej mierze oddzielony od bardziej automatycznych części systemu Drupal / Node i możesz dostosować działania i doświadczenie. Określasz trasy, dostęp i przepływ pracy CRUD.
W tym sposobie myślenia łatwiej jest zrozumieć, dlaczego podejście do tego celu byłoby tak wykonane. Weźmy przykład zgłoszenia do pomocy technicznej - są to przychodzące żądania, ale nie publikowane dane, i prawdopodobnie ma bardzo specyficzny przepływ pracy, który jest łatwiejszy do skonfigurowania niż oderwanie go od części systemu węzłów, których nie chcesz, aby był przestrzegany do.
Innym przykładem mogą być zewnętrzne, importowane dane. W większości przypadków dane te zwykle nie są wzbogacane lokalnymi danymi Drupal (nawet jeśli jest to jednostka, możesz to zrobić). To może być cokolwiek. Może to faktury, może są to książki, może ciągnie marki piwa.
Takie dane są zwykle specyficzne i wymagają kontroli poza tym, do czego przeznaczony jest węzeł. Nie oznacza to, że nie można go rozszerzyć za pomocą pola referencyjnego w węźle, aby wskazać niestandardową jednostkę (tak działał Drupal Commerce, na pewnym poziomie) w celu wzbogacenia danych. Jednocześnie izolujesz i zapewniasz kontrolę nad swoimi danymi i interfejsem użytkownika od błędnego kodu contrib wykraczającego poza jego projekt i zakłócającego twój model. Jest to prawdopodobnie mniejszy problem w D8 niż w D7, choć pewne haki pozostają.
Obecnie istnieje odpowiednia architektura zachęcająca do separacji. Nie wszystko jest węzłem.
źródło