SlideShare a Scribd company logo
Port modułu z D7 na D8
na przykładzie Cookiec
CZYLI NA CO ZWRÓCIĆ UWAGĘ PRZY MIGRACJI
Paweł Górski Droptica
Pawel.gorski@droptica.pl
D7 → D8
Php obiektowe
TWIG
Symfony
Itp. itd……...
D7 → D8
Moduły na Drupal.org
Drupal 8 – 2450
Drupala 7 - 12400
Moduł Cookiec
Cookiec służy do wyświetlania
informacji o używaniu ciasteczek na
naszej stronie www.
Live: www.droptica.pl
Jak działa?
DRUPAL
Dodaj cookie.js
Pobierz ustawienia
REQUEST
Ciasteczko?
Response
Cache
NIE
Dodaj style CSS
+ render HTML
TAK
Po stronie przeglądarki
JS
Wyświetlam info
Nie wyświetlam
Co zrobimy?
● Zmigrujemy podstawowe pliki modułu. ( .info .module)
● Zmigrujemy hook_menu na routing.yml
● Stworzymy klasę Controllera
● Zmigrujemy hook_permissions
● Utworzymy formularz oraz stronę do konfiguracji
modułu
● Zmigrujemy hook_init na EventSubscriber
Co zrobimy?
● Dodamy pliki JS oraz CSS
● Utworzymy formularz configuracyjny
● Stworzymy templatki TWIG
Wymagania
● Drupal w wersji 8.
● Program do edycji plikow PHP Storm, Netbeas, Notepad++ itd.
● Opcjonalnie debbuger, modul devel, drush
● Gotowy Moduł do pobrania https://github.com/droptica/cookiec/
● Szczegółowy tutorial na
http://www.droptica.pl/blog/port-modulu-z-drupala-7-na-8-na-
przykladzie-modulu-cookiec
Tworzymy moduł
plik cookiec.info.yml
● name: CookieC
● type: module
● core: 8.x
● version: 8.x-1.0
● description: This module aims at making the
website compliant with the new EU cookie
regulation
● configure: cookiec.settings
Tworzymy moduł
plik cookiec.info.yml
W Drupalu 8, aby moduł „działał” potrzebujemy
tylko plik info.yml.
Moduł powinien być już widoczny przez Drupala
Odpalamy moduł w /admin/modules
Tworzymy pierwszy contoller
Utworzymy "Hello Word", stworzymy zatem plik
Cookiec.php w katalogu cookiec/src/Contoller:
namespace DrupalcookiecController;
use DrupalCoreControllerControllerBase;
class Cookiec extends ControllerBase {
function renderPage(){
return array(
'#title' => '',
'#markup' => 'hello word!',
);
}
}
Routing cookiec.routing.yml
cookiec.render_cookiec:
path: '/cookiec'
defaults:
_controller: 'DrupalcookiecControllerCookiec::renderPage'
_title: ''
requirements:
_permission: 'access content'
Po wejściu na strone /cookiec odpalamy controler cookiec I
wykonujemy motodę renderPage, czyli narazie wyświetlamy hello
word, dodatkowo user musi mieć dostęp do „access content”
Permissions + formularz
konfiguracyjny
W pliku
cookiec.permissions.yml dodajemy:
administer cookiec:
title: 'Administer cookiec administration message module'
description: 'Perform administration tasks for cookiec'
administer cookiec – będziemy od teraz mogli przypisac do roli w
ustawieniach permission
Musimy jeszcze dodac w routingu:
cookiec.settings:
path: '/admin/config/content/cookiec-settings'
defaults:
_form: 'DrupalcookiecFormsCookiecSettingsForm'
_title: 'cookiec configuration'
requirements:
_permission: 'administer cookiec'
Aby ten formularz wyświetlił nam się pod ikonką konfigruacji modułu
Dodajemy w info configure: cookiec.settings (nazwa routingu)
Formularz do ustawień modułu
W pliku
src/Forms/CookiecSettingsForm.php
Dodajemy formularz oraz metody do jego obsługi submit, validation
itp..
Nazwa naszej klasy formularza musi pokrywac się z metodą w
routingu:
defaults:
_form: 'DrupalcookiecFormsCookiecSettingsForm'
class CookiecSettingsForm extends ConfigFormBase {
}
Defaultowe ustawienia modulu
Wszystkie nasze ustawienia zapisywane są w configach. Możemy
stworzyć config instalacyjny, który przy instalacji doda nam domyślne
wartości.
W pliku
/config/install/cookiec.settings.yml np.:
popup_enabled: 1
popup_agreed_enabled: 0
popup_hide_agreed: 1
popup_width: 100%
popup_delay: '1'
en_popup_link: /cookiec
pl_popup_link: /cookiec
en_popup_title: 'Cookie policy'
en_popup_info: 'This website uses cookies. By remaining on this website you agree to our <a
href="/cookiec">cookie policy</a>'
pl_popup_title: 'Polityka cookie'
pl_popup_info: 'Powiadomienie o plikach cookie. Ta strona korzysta z plików cookie. Pozostając na tej
stronie, wyrażasz zgodę na korzystanie z plików cookie. <a href="/cookiec">Dowiedz się więcej</a>'
pl_popup_agreed: 'Zgadzam się'
en_popup_link: /cookiec
pl_popup_link: /cookiec
Domyślnie informacja włączona, opożnienie 1s, szerokośc 100%, link do wersji polskiej, angielskiej,
domyślne teksty itp…
Jeżeli nasz moduł jest już włączony musimy go odinstalowac i zainstlować ponownie.
hook_init → event subsriber
nasz Event jest servicem więc musimy go zdefiniować
w pliku services.yml
services:
popup_message_event_subscriber:
class: DrupalcookiecEventSubscriberCookiecSubscriber
tags:
- {name: event_subscriber}
Teraz dodamy nasz event w src/EventSubscriber/CookiecSubscriber.php
class CookiecSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
$events[KernelEvents::RESPONSE][] = array('showPopupMessage', 20);
return $events;
}
}
Dodawnie JS oraz CSS
Aby łatwiej zarządzać plikami JS i CSS tworzymy „bibloteki”
W pliku cookiec.libraries.yml
cookiec_library:
version: 1.x
css:
theme:
css/cookiec.css: {}
js:
js/cookiec.js: {preprocess: false}
dependencies:
● - core/jquery
Do naszej strony dodajmy
$attachments = $response->getAttachments();
$attachments['library'][] = 'cookiec/cookiec_library';
$attachments['drupalSettings']['cookiec'] = $variables;
$response->setAttachments($attachments);
Twig
● Aby wyrenderwoać nasz szablon TWIG potrzebujemy ‘wysłac zmienne” oraz
stworzyć szablon w ktorym te zmiene wyświetlimy:
$variables = array(
'message' => $config->get($language."_popup_info"),
);
$twig = Drupal::service('twig');
$template = $twig->loadTemplate(drupal_get_path('module',
'cookiec') .'/templates/cookiec_info.html.twig');
$html_info = $template->render($variables);
<div>
<div class ="popup-content info">
<div id="popup-text">
{{ message | raw}}
</div>
<div id="popup-buttons">
<button type="button" class="agree-button">x</button>
</div>
</div>
</div>
Działa?
U mnie działa...
Pytania?
Wiecej na
naszym blogu
Droptica.pl
PODZIĘKOWANIA
DANE KONTAKTOWE
WWW.DROPTICA.PL

More Related Content

Similar to Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03

Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
Przemysław ...
 
Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008
Przemysław ...
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
Wojciech Lichota
 

Similar to Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03 (20)

Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
"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ć
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
 
NK API - Przykłady
NK API - PrzykładyNK API - Przykłady
NK API - Przykłady
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Podstawy ETL z SSIS
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSIS
 
Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008Współpraca Pakietu Office 2007 z MSSQL 2008
Współpraca Pakietu Office 2007 z MSSQL 2008
 
Moduł lead generation "lead sms" w ICEberg CMS
Moduł lead generation "lead sms" w ICEberg CMSModuł lead generation "lead sms" w ICEberg CMS
Moduł lead generation "lead sms" w ICEberg CMS
 
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]
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest taki...
TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest taki...TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest taki...
TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest taki...
 
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
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
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
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
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ć?
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 

Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03

  • 1. Port modułu z D7 na D8 na przykładzie Cookiec CZYLI NA CO ZWRÓCIĆ UWAGĘ PRZY MIGRACJI Paweł Górski Droptica Pawel.gorski@droptica.pl
  • 2. D7 → D8 Php obiektowe TWIG Symfony Itp. itd……...
  • 3. D7 → D8 Moduły na Drupal.org Drupal 8 – 2450 Drupala 7 - 12400
  • 4. Moduł Cookiec Cookiec służy do wyświetlania informacji o używaniu ciasteczek na naszej stronie www. Live: www.droptica.pl
  • 5. Jak działa? DRUPAL Dodaj cookie.js Pobierz ustawienia REQUEST Ciasteczko? Response Cache NIE Dodaj style CSS + render HTML TAK Po stronie przeglądarki JS Wyświetlam info Nie wyświetlam
  • 6. Co zrobimy? ● Zmigrujemy podstawowe pliki modułu. ( .info .module) ● Zmigrujemy hook_menu na routing.yml ● Stworzymy klasę Controllera ● Zmigrujemy hook_permissions ● Utworzymy formularz oraz stronę do konfiguracji modułu ● Zmigrujemy hook_init na EventSubscriber
  • 7. Co zrobimy? ● Dodamy pliki JS oraz CSS ● Utworzymy formularz configuracyjny ● Stworzymy templatki TWIG
  • 8. Wymagania ● Drupal w wersji 8. ● Program do edycji plikow PHP Storm, Netbeas, Notepad++ itd. ● Opcjonalnie debbuger, modul devel, drush ● Gotowy Moduł do pobrania https://github.com/droptica/cookiec/ ● Szczegółowy tutorial na http://www.droptica.pl/blog/port-modulu-z-drupala-7-na-8-na- przykladzie-modulu-cookiec
  • 9. Tworzymy moduł plik cookiec.info.yml ● name: CookieC ● type: module ● core: 8.x ● version: 8.x-1.0 ● description: This module aims at making the website compliant with the new EU cookie regulation ● configure: cookiec.settings
  • 10. Tworzymy moduł plik cookiec.info.yml W Drupalu 8, aby moduł „działał” potrzebujemy tylko plik info.yml. Moduł powinien być już widoczny przez Drupala Odpalamy moduł w /admin/modules
  • 11. Tworzymy pierwszy contoller Utworzymy "Hello Word", stworzymy zatem plik Cookiec.php w katalogu cookiec/src/Contoller: namespace DrupalcookiecController; use DrupalCoreControllerControllerBase; class Cookiec extends ControllerBase { function renderPage(){ return array( '#title' => '', '#markup' => 'hello word!', ); } }
  • 12. Routing cookiec.routing.yml cookiec.render_cookiec: path: '/cookiec' defaults: _controller: 'DrupalcookiecControllerCookiec::renderPage' _title: '' requirements: _permission: 'access content' Po wejściu na strone /cookiec odpalamy controler cookiec I wykonujemy motodę renderPage, czyli narazie wyświetlamy hello word, dodatkowo user musi mieć dostęp do „access content”
  • 13. Permissions + formularz konfiguracyjny W pliku cookiec.permissions.yml dodajemy: administer cookiec: title: 'Administer cookiec administration message module' description: 'Perform administration tasks for cookiec' administer cookiec – będziemy od teraz mogli przypisac do roli w ustawieniach permission Musimy jeszcze dodac w routingu: cookiec.settings: path: '/admin/config/content/cookiec-settings' defaults: _form: 'DrupalcookiecFormsCookiecSettingsForm' _title: 'cookiec configuration' requirements: _permission: 'administer cookiec' Aby ten formularz wyświetlił nam się pod ikonką konfigruacji modułu Dodajemy w info configure: cookiec.settings (nazwa routingu)
  • 14. Formularz do ustawień modułu W pliku src/Forms/CookiecSettingsForm.php Dodajemy formularz oraz metody do jego obsługi submit, validation itp.. Nazwa naszej klasy formularza musi pokrywac się z metodą w routingu: defaults: _form: 'DrupalcookiecFormsCookiecSettingsForm' class CookiecSettingsForm extends ConfigFormBase { }
  • 15. Defaultowe ustawienia modulu Wszystkie nasze ustawienia zapisywane są w configach. Możemy stworzyć config instalacyjny, który przy instalacji doda nam domyślne wartości. W pliku /config/install/cookiec.settings.yml np.: popup_enabled: 1 popup_agreed_enabled: 0 popup_hide_agreed: 1 popup_width: 100% popup_delay: '1' en_popup_link: /cookiec pl_popup_link: /cookiec en_popup_title: 'Cookie policy' en_popup_info: 'This website uses cookies. By remaining on this website you agree to our <a href="/cookiec">cookie policy</a>' pl_popup_title: 'Polityka cookie' pl_popup_info: 'Powiadomienie o plikach cookie. Ta strona korzysta z plików cookie. Pozostając na tej stronie, wyrażasz zgodę na korzystanie z plików cookie. <a href="/cookiec">Dowiedz się więcej</a>' pl_popup_agreed: 'Zgadzam się' en_popup_link: /cookiec pl_popup_link: /cookiec Domyślnie informacja włączona, opożnienie 1s, szerokośc 100%, link do wersji polskiej, angielskiej, domyślne teksty itp… Jeżeli nasz moduł jest już włączony musimy go odinstalowac i zainstlować ponownie.
  • 16. hook_init → event subsriber nasz Event jest servicem więc musimy go zdefiniować w pliku services.yml services: popup_message_event_subscriber: class: DrupalcookiecEventSubscriberCookiecSubscriber tags: - {name: event_subscriber} Teraz dodamy nasz event w src/EventSubscriber/CookiecSubscriber.php class CookiecSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { $events[KernelEvents::RESPONSE][] = array('showPopupMessage', 20); return $events; } }
  • 17. Dodawnie JS oraz CSS Aby łatwiej zarządzać plikami JS i CSS tworzymy „bibloteki” W pliku cookiec.libraries.yml cookiec_library: version: 1.x css: theme: css/cookiec.css: {} js: js/cookiec.js: {preprocess: false} dependencies: ● - core/jquery Do naszej strony dodajmy $attachments = $response->getAttachments(); $attachments['library'][] = 'cookiec/cookiec_library'; $attachments['drupalSettings']['cookiec'] = $variables; $response->setAttachments($attachments);
  • 18. Twig ● Aby wyrenderwoać nasz szablon TWIG potrzebujemy ‘wysłac zmienne” oraz stworzyć szablon w ktorym te zmiene wyświetlimy: $variables = array( 'message' => $config->get($language."_popup_info"), ); $twig = Drupal::service('twig'); $template = $twig->loadTemplate(drupal_get_path('module', 'cookiec') .'/templates/cookiec_info.html.twig'); $html_info = $template->render($variables); <div> <div class ="popup-content info"> <div id="popup-text"> {{ message | raw}} </div> <div id="popup-buttons"> <button type="button" class="agree-button">x</button> </div> </div> </div>