SlideShare a Scribd company logo
1 of 40
Download to read offline
Encje w Drupalu
Tworzenie własnych encji i ich wpływ na
poprawę wydajności
DrupalCamp Wrocław 2015
Grzegorz Bartman
https://twitter.com/grzegorzbartman
O mnie
Grzegorz Bartman
● http://twitter.com/grzegorzbartman
● https://drupal.org/user/363120 ponad 6 lat na drupal.org,
● PHP od 2002 roku
● Od 2013 Droptica
● http://www.droptica.pl/oferty-pracy zapraszamy do nas :)
Plan prezentacji
● Czym jest encja
● Jak łatwo zrobić własne encje w Drupalu
● Porównanie własnych encji z node'ami
● Znasz Drupala i PHP
● Piszesz własne proste moduły
● Nie tworzyłeś własnych encji w Drupalu
Dla kogo jest ta prezentacja
Czym jest Encja?
● Pojęcie często używane w projektowaniu baz danych
● Encja to reprezentacja wyobrażonego lub rzeczywistego obiektu
(wikipedia)
● Encja posiada atrybuty/właściwości
● Przykłady encji:
● Samochód (id_samochodu, marka, kolor, pojemność silnika)
● Osoba (id_osoby, imię, nazwisko, rok urodzenia)
● Właściciel samochodu (id, id_samochodu, id_osoby)
Standardowe podejście do
tworzenia struktury danych w
Drupalu
● Tworzymy nowy rodzaj zawartości
● Tworzymy pola do rodzaju zawartości
Standardowe podejście do
tworzenia struktury danych w
Drupalu
● Zalety:
● Wygodne i szybkie tworzenie struktury danych
● Łatwa edycja wyglądu i kolejności elementów na formularzu
tworzenia treści
Z tego powodu Drupal jest chwalony przez początkujących
użytkowników
Page News
Job
Node
- Node types:
Users
Tags
Taxonomy
- Vocabularies
Cities
News categories
Fields
Description
Boolean
File
Image
Term reference
Node reference
User reference
Field collection
Car
Image
Engine size
Text
Struktura danych w Drupalu
Page News
Job
Entity
Node
- Node types:
Users
Tags
Taxonomy
- Vocabularies
Cities
News categories
Fields
Description
Boolean
File
Image
Term reference
Node reference
User reference
Field collection
Car
Image
Engine size
Text
Struktura danych w Drupalu
Page News
Job
Entity
Node
- Node types:
Users
Tags
Taxonomy
- Vocabularies
Cities
News categories
Fields
Description
Boolean
File
Image
Term reference
Node reference
User reference
Field collection
Car
Image
Custom entities
(for example: Drupal Commerce module)
Engine size
Text
Struktura danych w Drupalu
Encje w Drupalu
● Rdzeń Drupala definiuje własne encje
● Encje w rdzeniu Drupala 7:
● Node
● Taxonomy
● User
Po co tworzyć własne
encje?
Standardowe podejście do
tworzenia struktury danych w
Drupalu
● Wady:
● Nie mamy kontroli nad tym co się dzieje w bazie danych
● Każde pole to 2 dodatkowe tabele w bazie danych (field_data...
i field_revision...)
● Im więcej pól i powiązań tym dłuższe zapytania SQL (JOIN,
JOIN, JOIN.....)
Z tych powodów doświadczeni programiści nienawidzą
Drupala
Dzięki encjom możemy dowolnie definiować
strukturę tabel w bazie danych
Encje to nie tylko własna tabela w
bazie danych
● Views może pobierać dane z encji
● Do encji można dodawać pola
● Moduł Rules może działać np. w momencie
dodawania, edycji lub usuwania encji
Kiedy warto
Potrzebna duża szybkość ładowania się serwisu/aplikacji
Serwis/aplikacja będzie używana i rozwijana przez wiele lat, i
chcemy wyeliminować późniejsze problemy z wydajnością oraz
mieć możliwość elastycznej rozbudowy
Dużo pól w nodach, użytkownikach lub innych encjach
Chcemy mieć kontrole nad bazą danych
Kiedy nie warto
Serwisy z treściami dla niezalogowanych użytkowników bez
konieczności szybkiego odświeżania wyświetlanych danych po ich
zmianie w bazie
Lepiej i szybciej zrobić strukture na node'ach oraz cachowanie
serwisu (varnish, memcache, inne) niż tworzyć dla danych własne
encje
Plusy
Dokładna kontrola nad strukturą danych oraz sposobem ich
zarządzania przez Drupala (formularze dodawania i edycji, strony
wyświetlania encji)
Poprawa wydajności w stosunku do node'ów z polami
Minusy
Bardziej czasochłonne w porównaniu do node'ów
Dodatkowe czynności do wykonania:
● zaprojektowanie i utworzenie tabel w bazie danych
● utworzenie formularzy do dodawania treści
● szablony do wyświetlania encji
● testowanie czy wszystko działa poprawnie (zapis, edycja,
usuwanie, powiązania)
Od czego zacząć?
Diagram związków encji (ERD)
● Warto mieć wizualizację tabel w bazie danych w
postaci diagramu
Moduł
● Encje tworzymy korzystając z odpowiednich
hook'ów we własnym module*
● hook_entity_info() definiuje strukturę encji
● hook_schema() definiuje tabelę w bazie danych
do przechowywania encji
Analiza przykładów – node.module
Inne przykłady modułów z encjami
● Profile2
● Drupal Commerce
● Message
Moduł ECK
https://www.drupal.org/project/eck
Pozwala ma „wyklikanie” własnych encji, ale
posiada ograniczenia dotyczące typów
danych w encji (properties)
Moduł Model
https://www.drupal.org/project/model
Przykład encji, na podstawie kodu można
szybko tworzyć własne encje
Struktura encji + strony administracyjne
Moduł Model
Pobierz moduł z drupal.org
Zmień nazwę katalogu (np. na car)
Zmień nazwy plików (model zamień na car)
Zmień nazwy funkcji w plikach (model->car)
Moduł Model
Moduł Model
Moduł Model
Co zmienić w plikach
Struktura bazy danych
● Plik: modulename.install
● Funkcja modulename_schema
Co zmienić w plikach
Formularz dodawania i edycji encji:
● Plik: modulename.admin.inc
● Funkcja modulename_edit_form
Co zmienić w plikach
Wyświetlanie encji
● Plik: modulename.module
● Metoda buildContent w klasie carController
Co zmienić w plikach
Adresy stron wyświetlania i edycji encji
● Plik: modulename.admin.inc
● Metoda hook_menu w klasie carUIController
SQL: Encje vs Node
Struktura danych do przechowywania informacji
o samochodach i ich atrybutach:
● Nazwa
● Kolor
● Typ silnika
● Pojemność silnika
● Liczba drzwi
SQL: Encje vs Node
Node car i pola
SQL: Encje vs Node
Pobieranie danych z node'a i pól:
SELECT * FROM node n
LEFT JOIN field_data_field_color ON n.nid = field_data_field_color.entity_id
LEFT JOIN field_data_field_engine_size ON n.nid =
field_data_field_engine_size.entity_id
LEFT JOIN field_data_field_doors ON n.nid = field_data_field_doors.entity_id
LEFT JOIN field_data_field_engine_type ON n.nid =
field_data_field_engine_type.entity_id
SQL: Encje vs Node
Pobieranie danych z encji
SELECT * FROM car;
Podział pracy przy projekcie w
Drupalu
Struktura danych w
node'ach
● Site builder tworzy typy
nodów i pola
● Site builder tworzy widoki,
rulsy, dodaje pola
● Frontend developer
dodaje css/html do
widokow
Struktura danych we
własnych encjach
● Developer tworzy encje
(modeluje baze danych),
● Site builder tworzy widoki,
rulsy, dodaje pola
● Frontend developer
dodaje css/html do
widokow
Pytania?
Dziękuję za uwagę
i zapraszam na stronę
http://www.droptica.pl/oferty-pracy
Oceń prezentację
https://www.surveymonkey.com/s/DJFJ3QP

More Related Content

What's hot

Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiGrzegorz Bartman
 
Podstawowe informacje o szablonach w Drupalu [openBIT]
Podstawowe informacje o szablonach w Drupalu [openBIT]Podstawowe informacje o szablonach w Drupalu [openBIT]
Podstawowe informacje o szablonach w Drupalu [openBIT]Grzegorz Bartman
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Grzegorz Bartman
 
Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Droptica
 
Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Droptica
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Droptica
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Droptica
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Droptica
 
Drupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczDrupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczGrzegorz Bartman
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Droptica
 

What's hot (12)

Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
 
Podstawowe informacje o szablonach w Drupalu [openBIT]
Podstawowe informacje o szablonach w Drupalu [openBIT]Podstawowe informacje o szablonach w Drupalu [openBIT]
Podstawowe informacje o szablonach w Drupalu [openBIT]
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
 
Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]
 
Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Drupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczDrupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka Piłasiewicz
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
 

Similar to Encje w drupalu - DrupalCamp Wroclaw 2015

Dlaczego Drupal CMS? - www.siplex.pl
Dlaczego Drupal CMS? - www.siplex.plDlaczego Drupal CMS? - www.siplex.pl
Dlaczego Drupal CMS? - www.siplex.plKamil Niewczas
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & Ansible
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & AnsibleCodiLime Tech Talk - Michał Sochoń: Sphinx, reST & Ansible
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & AnsibleCodiLime
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven DevelopmentKonrad Russa
 
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...The Software House
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...Mateusz Muryjas
 
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Piotr Grabski-Gradziński
 
Django - webowy framework dla wymagających
Django - webowy framework dla wymagającychDjango - webowy framework dla wymagających
Django - webowy framework dla wymagającychKrzysztof Kreczko
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalnePROSKAR
 
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Timur Kamanin
 
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danychkalaxq
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and AnalyticsŁukasz Grala
 
Projektowanie stron www dla ngo i projektow eko - case study
Projektowanie stron www dla ngo i projektow eko - case studyProjektowanie stron www dla ngo i projektow eko - case study
Projektowanie stron www dla ngo i projektow eko - case studyKrakweb
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
Elementy firmowej strony www
Elementy firmowej strony wwwElementy firmowej strony www
Elementy firmowej strony wwwKrakweb
 
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Droptica
 

Similar to Encje w drupalu - DrupalCamp Wroclaw 2015 (20)

Dlaczego Drupal CMS? - www.siplex.pl
Dlaczego Drupal CMS? - www.siplex.plDlaczego Drupal CMS? - www.siplex.pl
Dlaczego Drupal CMS? - www.siplex.pl
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & Ansible
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & AnsibleCodiLime Tech Talk - Michał Sochoń: Sphinx, reST & Ansible
CodiLime Tech Talk - Michał Sochoń: Sphinx, reST & Ansible
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven Development
 
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
Praktyczne porady na temat optymalizacji wydajności aplikacji tworzonych z u...
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...
Wykorzystanie Google Data Studio w raportowaniu i wizualizacji danych - Mateu...
 
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
Custom policies w Azure AD B2C jak je tworzyć, żeby nie zwariować?
 
Django - webowy framework dla wymagających
Django - webowy framework dla wymagającychDjango - webowy framework dla wymagających
Django - webowy framework dla wymagających
 
Systemy dedykowane (pdf)
Systemy dedykowane (pdf)Systemy dedykowane (pdf)
Systemy dedykowane (pdf)
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
 
Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)Optimizing Drupal Performance (Polish)
Optimizing Drupal Performance (Polish)
 
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
 
Projektowanie stron www dla ngo i projektow eko - case study
Projektowanie stron www dla ngo i projektow eko - case studyProjektowanie stron www dla ngo i projektow eko - case study
Projektowanie stron www dla ngo i projektow eko - case study
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
 
Elementy firmowej strony www
Elementy firmowej strony wwwElementy firmowej strony www
Elementy firmowej strony www
 
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
 

More from Grzegorz Bartman

Automatyzacja w tworzeniu aplikacji opartych Drupala
Automatyzacja w tworzeniu aplikacji opartych DrupalaAutomatyzacja w tworzeniu aplikacji opartych Drupala
Automatyzacja w tworzeniu aplikacji opartych DrupalaGrzegorz Bartman
 
Wprowadzenie do pisania własnych modułów oraz do systemu menu.
Wprowadzenie do pisania własnych modułów oraz do systemu menu. Wprowadzenie do pisania własnych modułów oraz do systemu menu.
Wprowadzenie do pisania własnych modułów oraz do systemu menu. Grzegorz Bartman
 
WYSIWYG w Drupalu 7 - Tomasz Rychter
WYSIWYG w Drupalu 7 - Tomasz RychterWYSIWYG w Drupalu 7 - Tomasz Rychter
WYSIWYG w Drupalu 7 - Tomasz RychterGrzegorz Bartman
 
Drupal Feeds - Wiktor Burbo
Drupal Feeds - Wiktor BurboDrupal Feeds - Wiktor Burbo
Drupal Feeds - Wiktor BurboGrzegorz Bartman
 
Drupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekDrupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekGrzegorz Bartman
 
Szkolenie drupal-podstawy 2
Szkolenie drupal-podstawy 2Szkolenie drupal-podstawy 2
Szkolenie drupal-podstawy 2Grzegorz Bartman
 
Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Grzegorz Bartman
 
Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Grzegorz Bartman
 
Drupal 6 - podstawy - www.openbit.pl
Drupal 6 - podstawy - www.openbit.plDrupal 6 - podstawy - www.openbit.pl
Drupal 6 - podstawy - www.openbit.plGrzegorz Bartman
 

More from Grzegorz Bartman (10)

Automatyzacja w tworzeniu aplikacji opartych Drupala
Automatyzacja w tworzeniu aplikacji opartych DrupalaAutomatyzacja w tworzeniu aplikacji opartych Drupala
Automatyzacja w tworzeniu aplikacji opartych Drupala
 
Wprowadzenie do pisania własnych modułów oraz do systemu menu.
Wprowadzenie do pisania własnych modułów oraz do systemu menu. Wprowadzenie do pisania własnych modułów oraz do systemu menu.
Wprowadzenie do pisania własnych modułów oraz do systemu menu.
 
WYSIWYG w Drupalu 7 - Tomasz Rychter
WYSIWYG w Drupalu 7 - Tomasz RychterWYSIWYG w Drupalu 7 - Tomasz Rychter
WYSIWYG w Drupalu 7 - Tomasz Rychter
 
Drupal Feeds - Wiktor Burbo
Drupal Feeds - Wiktor BurboDrupal Feeds - Wiktor Burbo
Drupal Feeds - Wiktor Burbo
 
Drupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekDrupal Context - Agnieszka Cupek
Drupal Context - Agnieszka Cupek
 
Drupal 7 training - Views
Drupal 7 training - ViewsDrupal 7 training - Views
Drupal 7 training - Views
 
Szkolenie drupal-podstawy 2
Szkolenie drupal-podstawy 2Szkolenie drupal-podstawy 2
Szkolenie drupal-podstawy 2
 
Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2
 
Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2Openbit szkolenie-drupal-podstawy 2
Openbit szkolenie-drupal-podstawy 2
 
Drupal 6 - podstawy - www.openbit.pl
Drupal 6 - podstawy - www.openbit.plDrupal 6 - podstawy - www.openbit.pl
Drupal 6 - podstawy - www.openbit.pl
 

Encje w drupalu - DrupalCamp Wroclaw 2015

  • 1. Encje w Drupalu Tworzenie własnych encji i ich wpływ na poprawę wydajności DrupalCamp Wrocław 2015 Grzegorz Bartman https://twitter.com/grzegorzbartman
  • 2. O mnie Grzegorz Bartman ● http://twitter.com/grzegorzbartman ● https://drupal.org/user/363120 ponad 6 lat na drupal.org, ● PHP od 2002 roku ● Od 2013 Droptica ● http://www.droptica.pl/oferty-pracy zapraszamy do nas :)
  • 3. Plan prezentacji ● Czym jest encja ● Jak łatwo zrobić własne encje w Drupalu ● Porównanie własnych encji z node'ami ● Znasz Drupala i PHP ● Piszesz własne proste moduły ● Nie tworzyłeś własnych encji w Drupalu Dla kogo jest ta prezentacja
  • 4. Czym jest Encja? ● Pojęcie często używane w projektowaniu baz danych ● Encja to reprezentacja wyobrażonego lub rzeczywistego obiektu (wikipedia) ● Encja posiada atrybuty/właściwości ● Przykłady encji: ● Samochód (id_samochodu, marka, kolor, pojemność silnika) ● Osoba (id_osoby, imię, nazwisko, rok urodzenia) ● Właściciel samochodu (id, id_samochodu, id_osoby)
  • 5. Standardowe podejście do tworzenia struktury danych w Drupalu ● Tworzymy nowy rodzaj zawartości ● Tworzymy pola do rodzaju zawartości
  • 6. Standardowe podejście do tworzenia struktury danych w Drupalu ● Zalety: ● Wygodne i szybkie tworzenie struktury danych ● Łatwa edycja wyglądu i kolejności elementów na formularzu tworzenia treści Z tego powodu Drupal jest chwalony przez początkujących użytkowników
  • 7. Page News Job Node - Node types: Users Tags Taxonomy - Vocabularies Cities News categories Fields Description Boolean File Image Term reference Node reference User reference Field collection Car Image Engine size Text Struktura danych w Drupalu
  • 8. Page News Job Entity Node - Node types: Users Tags Taxonomy - Vocabularies Cities News categories Fields Description Boolean File Image Term reference Node reference User reference Field collection Car Image Engine size Text Struktura danych w Drupalu
  • 9. Page News Job Entity Node - Node types: Users Tags Taxonomy - Vocabularies Cities News categories Fields Description Boolean File Image Term reference Node reference User reference Field collection Car Image Custom entities (for example: Drupal Commerce module) Engine size Text Struktura danych w Drupalu
  • 10. Encje w Drupalu ● Rdzeń Drupala definiuje własne encje ● Encje w rdzeniu Drupala 7: ● Node ● Taxonomy ● User
  • 11. Po co tworzyć własne encje?
  • 12. Standardowe podejście do tworzenia struktury danych w Drupalu ● Wady: ● Nie mamy kontroli nad tym co się dzieje w bazie danych ● Każde pole to 2 dodatkowe tabele w bazie danych (field_data... i field_revision...) ● Im więcej pól i powiązań tym dłuższe zapytania SQL (JOIN, JOIN, JOIN.....) Z tych powodów doświadczeni programiści nienawidzą Drupala
  • 13. Dzięki encjom możemy dowolnie definiować strukturę tabel w bazie danych
  • 14. Encje to nie tylko własna tabela w bazie danych ● Views może pobierać dane z encji ● Do encji można dodawać pola ● Moduł Rules może działać np. w momencie dodawania, edycji lub usuwania encji
  • 15. Kiedy warto Potrzebna duża szybkość ładowania się serwisu/aplikacji Serwis/aplikacja będzie używana i rozwijana przez wiele lat, i chcemy wyeliminować późniejsze problemy z wydajnością oraz mieć możliwość elastycznej rozbudowy Dużo pól w nodach, użytkownikach lub innych encjach Chcemy mieć kontrole nad bazą danych
  • 16. Kiedy nie warto Serwisy z treściami dla niezalogowanych użytkowników bez konieczności szybkiego odświeżania wyświetlanych danych po ich zmianie w bazie Lepiej i szybciej zrobić strukture na node'ach oraz cachowanie serwisu (varnish, memcache, inne) niż tworzyć dla danych własne encje
  • 17. Plusy Dokładna kontrola nad strukturą danych oraz sposobem ich zarządzania przez Drupala (formularze dodawania i edycji, strony wyświetlania encji) Poprawa wydajności w stosunku do node'ów z polami
  • 18. Minusy Bardziej czasochłonne w porównaniu do node'ów Dodatkowe czynności do wykonania: ● zaprojektowanie i utworzenie tabel w bazie danych ● utworzenie formularzy do dodawania treści ● szablony do wyświetlania encji ● testowanie czy wszystko działa poprawnie (zapis, edycja, usuwanie, powiązania)
  • 20. Diagram związków encji (ERD) ● Warto mieć wizualizację tabel w bazie danych w postaci diagramu
  • 21. Moduł ● Encje tworzymy korzystając z odpowiednich hook'ów we własnym module* ● hook_entity_info() definiuje strukturę encji ● hook_schema() definiuje tabelę w bazie danych do przechowywania encji
  • 23. Inne przykłady modułów z encjami ● Profile2 ● Drupal Commerce ● Message
  • 24. Moduł ECK https://www.drupal.org/project/eck Pozwala ma „wyklikanie” własnych encji, ale posiada ograniczenia dotyczące typów danych w encji (properties)
  • 25. Moduł Model https://www.drupal.org/project/model Przykład encji, na podstawie kodu można szybko tworzyć własne encje Struktura encji + strony administracyjne
  • 26. Moduł Model Pobierz moduł z drupal.org Zmień nazwę katalogu (np. na car) Zmień nazwy plików (model zamień na car) Zmień nazwy funkcji w plikach (model->car)
  • 30. Co zmienić w plikach Struktura bazy danych ● Plik: modulename.install ● Funkcja modulename_schema
  • 31. Co zmienić w plikach Formularz dodawania i edycji encji: ● Plik: modulename.admin.inc ● Funkcja modulename_edit_form
  • 32. Co zmienić w plikach Wyświetlanie encji ● Plik: modulename.module ● Metoda buildContent w klasie carController
  • 33. Co zmienić w plikach Adresy stron wyświetlania i edycji encji ● Plik: modulename.admin.inc ● Metoda hook_menu w klasie carUIController
  • 34. SQL: Encje vs Node Struktura danych do przechowywania informacji o samochodach i ich atrybutach: ● Nazwa ● Kolor ● Typ silnika ● Pojemność silnika ● Liczba drzwi
  • 35. SQL: Encje vs Node Node car i pola
  • 36. SQL: Encje vs Node Pobieranie danych z node'a i pól: SELECT * FROM node n LEFT JOIN field_data_field_color ON n.nid = field_data_field_color.entity_id LEFT JOIN field_data_field_engine_size ON n.nid = field_data_field_engine_size.entity_id LEFT JOIN field_data_field_doors ON n.nid = field_data_field_doors.entity_id LEFT JOIN field_data_field_engine_type ON n.nid = field_data_field_engine_type.entity_id
  • 37. SQL: Encje vs Node Pobieranie danych z encji SELECT * FROM car;
  • 38. Podział pracy przy projekcie w Drupalu Struktura danych w node'ach ● Site builder tworzy typy nodów i pola ● Site builder tworzy widoki, rulsy, dodaje pola ● Frontend developer dodaje css/html do widokow Struktura danych we własnych encjach ● Developer tworzy encje (modeluje baze danych), ● Site builder tworzy widoki, rulsy, dodaje pola ● Frontend developer dodaje css/html do widokow
  • 40. Dziękuję za uwagę i zapraszam na stronę http://www.droptica.pl/oferty-pracy Oceń prezentację https://www.surveymonkey.com/s/DJFJ3QP