Co nowego w Drupalu 8. Grzegorz Bartman Jarosław Bartman

Podobne dokumenty
Agenda. Wstęp Zmiany Co nowego dla web developerów? Nowości we front-end developingu Czego spodziewać się może końcowy użytkownik?

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Jak usprawnić tworzenie i zarządzanie stroną na drupalu. Maciej Łukiański

REFERAT O PRACY DYPLOMOWEJ

Bazy Danych i Usługi Sieciowe

I.Wojnicki, Tech.Inter.

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Code-Driven Development (CDD) w Drupalu 7. Grzegorz Bartman

Programowanie zorientowane obiektowo. Mateusz Kołecki


PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

Języki programowania wysokiego poziomu. Blog

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Instrukcja laboratoryjna

Wprowadzenie do framework a Symfony

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji src/ - folder zawiera cały kod PHP aplikacji

Instrukcja migracji PREMIUM. Mendeley_Migration_Guide_Polish.indd 1

Tworzenie i wykorzystanie usług sieciowych

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Kurs WWW. Paweł Rajba.

PHP 5 język obiektowy

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Backend Administratora

Baza danych i ORM mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Drush i drupal console

Wstęp. Ale po co? Implementacja

Języki programowania wysokiego poziomu. Forum

Tworzenie modułów. Wymagania aplikacji. Tworzenie modułów. Architektura aplikacji. controllers

MVC w praktyce tworzymy system artykułów. cz. 1

media Blitz wydajne sytemy szablonów

Instalacja modułu DHL24 w sklepie Magento

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie i projektowanie obiektowe

Dokumentacja techniczna CMSphere EASY na podstawie wdrożenia dla Gminy Wieliszew

TYPO3 może być proste. Spojrzenie edytora. Krystian Szymukowicz

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Wprowadzenie do Doctrine ORM

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Serwery aplikacji. dr Radosław Matusik. radmat

Programowanie wielowarstwowe i komponentowe

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Facelets ViewHandler

Optymalizacja pracy z instancjami local / staging / production. Krystian Szymukowicz (k.szymukowicz@sourcebroket.net)

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Google Web Toolkit. Piotr Findeisen

Java: interfejsy i klasy wewnętrzne

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Szybko, prosto i tanio - ale czy na pewno?

Technologie internetowe ASP.NET Core. Paweł Rajba

ZAKŁADOWY: ZŁ WPŁACONY KRS REGON: NIP

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

PHP: bloki kodu, tablice, obiekty i formularze

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Laboratorium 6 Tworzenie bloga w Zend Framework

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Jak okiełznać frontend w Django? Piotr Maliński

Tworzenie dokumentacji

Drupal 7. Zaawansowane programowanie

Programowanie obiektowe w VB cz 2

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Db4o obiektowa baza danych wersja.net

Pakiet XML Czym jest i z czym się je?

Delphi podstawy programowania. Środowisko Delphi

Programowanie Komputerów

Wykład 03 JavaScript. Michał Drabik

Programowanie komponentowe 5

Wzorce prezentacji internetowych

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji Można wybrać sposób zapisu konfiguracji: YML, XML, PHP

Metaprogramowanie w Ruby

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Zaawansowane aplikacje internetowe laboratorium

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Aplikacje w środowisku Java

Patryk Jar Meet.js, Gdańsk 11 marca 2013 r. MODULARNY JAVASCRIPT

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Instrukcja instalacji oprogramowania dla środowiska Windows

Fragmenty są wspierane od Androida 1.6

Tworzenie Stron Internetowych. odcinek 10

SPRING FRAMEWORK. dr inż. Jakub Chłapioski

Database Connectivity

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Google Web Toolkit Michał Węgorek ZPO 2009

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

DOKUMENTY. v Strona 1 z 10

Transkrypt:

Co nowego w Drupalu 8 Grzegorz Bartman Jarosław Bartman

Agenda Frontend, site building Backend Materiały w sieci

Wersje Koniec z wielkimi zmianami pomiędzy wersjami Drupala 2 rodzaje wydań Drupala 8.0.x, 8.1.x, 8.2.x co 6 miesięcy, nowe funkcjonalności 8.1.1, 8.1.2, - bug fixes

Wersje https://www.drupal.org/core/release-cycle-overview

Usprawnienia dla redaktorów

Usprawnienia dla redaktorów

Usprawnienia dla redaktorów

Usprawnienia dla redaktorów

Usprawnienia dla redaktorów

Mobile First

Mobile First Menu toolbar

Mobile First

Multilingual++

Multilingual++ Language Configuration Translation odpowiada za tłumaczenie bloków, widoków menu itd.. Content Translation odpowiada za tłumaczenie nodów, taxonomy, komentarzy itd.. Interface Translation tłlumaczenie interfejsu użytkownika

Site Builders

Site Builders

Site Builders

Site Builders Nowe pola w rdzeniu: Entity Reference Date/Datetime Link Phone Email Comments

Form modes

Front-end Developer

Front-end Developer HTML5 Front-end Libraries Modernizr (detects if a browser supports touch or HTML5/CSS3 features) Underscore.js (a lightweight JS-helper library) Backbone.js (a model-view-controller JavaScript framework). Koniec wsparcia dla IE6,7 i 8

Backend

Configuration Management Drupal 7 i niższe wersje nie miały opcji zarządzania konfiguracją Features hook_update_n variable_set/get

Configuration Management Configuration API w rdzeniu Drupala Typowy workflow: Na wersji dev wyeksportuj paczkę plików z konfiguracją Na wersji prod zaimportuj paczkę Na stronie konfiguracji zobaczysz listę zmian (diff) Jeśli zmiany są OK to zaimportuj je na wersję prod Moduł Features dla 8.x Content Deployment

Entities Everywhere Wprowadzone w Drupal 7 jednak nie wszystko było encją Bloki jako encja (w D7 moduł Bean) Entity API całkowicie przebudowane Encja jest obiektem, który implementuje EntityInterface Nie trzeba już dodawać wielu hook ów aby utworzyć encję

Entities Everywhere <?php # Drupal 7 code. $node->title $node->body[$langcode][0][ value ]?> <?php # Drupal 8 code. $node->get( title )->value $node->get( body )->value?>

Configuration & Content Entities Content entities Fields W bazie danych Tworzone głównie przez front-end Nodes, Blocks, Users, Comments, Taxonomy Config entities Wdrażane na różne wersje serwisu W konfiguracji systemu Tworzone głównie w back-end Content types, block types, user roles, views, menus, image styles

Content entities Rewizje nie tylko w node Komentarze nie tylko dla node Także dla użytkowników, taxonomy i nawet dla komentarzy

Web Services REST API w rdzeniu REST export w module Views

Cache Entity cache w rdzeniu Cache tags https://www.drupal.org/node/1884800 Domyślnie włączona agregacja CSS i JS

BigPipe Problemem jest zrobienie szybkiej strony dla zalogowanego użytkownika BigPipe Niezmienne części strony ładują się szybko (z cache), np. lista produktów Zmienne części strony zależne od użytkownika (np. koszyk) ładuje się chwilę później Użytkownik nie czeka na załadowanie całej strony, otrzymuje stronę w częściach W rdzeniu od 8.1 (experimental)

!(Odkrywanie koła na nowo)

Dobre praktyki PHP PHP 5.4+ Classes/Interfaces Namespaces Dependency Injection PSR-* standard

Plik.info (.info.yml) name = Example name: Example description = An example module. description: An example module. core = 7.x core: 8.x files[] = example.test dependencies: dependencies[] = user - user # Note: New property required as of Drupal 8! type: module

Definiowanie podstron /** * Implements hook_menu(). */ function example_menu() { $items[ hello ] = array( title => Hello world, page callback => _example_page, access callback => user_access, access arguments => access content, type => MENU_CALLBACK, ); return $items; } /** * Page callback: greets the user. */ function _example_page() { return array( #markup => t( Hello world. )); }

Definiowanie podstron example.routing.yml src/controller/hello.php <?php example.hello: namespace Drupal\example\Controller; path: /hello use Drupal\Core\Controller\ControllerBase; defaults: /** _content: \Drupal\example\Controller\Hello::content requirements: * Greets the user. */ class Hello extends ControllerBase { _permission: access content public function content() { return array( #markup => $this->t( Hello world. )); } }?>

Bloki /** /** * Implements hook_block_info(). */ * Implements hook_block_view(). function example_block_view($delta = ) { */ $block = array(); switch ($delta) { function example_block_info() { case example : $blocks[ example ] = array( $block[ subject ] = t( Example block ); $block[ content ] = array( info => t( Example block ), hello => array( #markup => t( Hello world ), ); ), return $block; ); break; } } return $block; }

Bloki src/plugin/block/example.php <?php namespace Drupal\example\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides the Example block. * * @Block( * id = example, * admin_label = @Translation( Example block ) *) */ class Example extends BlockBase { public function build() { return array( hello => array( #markup => $this->t( Hello world. ) )); } }?>

hooks Drupal 7 i wcześniejsze wersje opierały się o system hook ów Autor modułu mógł utworzyć API używając funkcji module_invoke_all(), module_implements(), drupal_alter() Programista może skorzystać z API modułu wywołując funkcję o nazwie modulename_hookname()

Hooks - problemy 4 funkcje definiujące hooki module_invoke, module_invoke_all, module_implements, drupal_alter Jeśli nie ma dokumentacji to trudno znaleźć w kodzie modułu jakie API on udostępnia Specjalne nazwy funkcji używane tylko w Drupalu, inne projekty PHP nie mają takie sposobu programowania Nie ma rozróżnienia między hookami Tablice Tablice tablic Akcje jak zadania cron, zapisanie noda Trzeba przeczytać dokumentację aby wiedzieć co robi dany hook

Events W Drupalu część hook ów została zamieniona na eventy modulename.service.yml services: dino_roar.dino_listener: class: Drupal\dino_roar\Jurassic\DinoListener arguments: ['@logger.factory'] tags: - { name: event_subscriber }

Events class DinoListener implements EventSubscriberInterface {... public function onkernelrequest(getresponseevent $event) { $request = $event->getrequest(); $shouldroar = $request->query->get('roar'); if ($shouldroar) { $this->loggerfactory->get('debug')->debug('roar requested ROOOAR'); } } public static function getsubscribedevents() { return [ KernelEvents::REQUEST => 'onkernelrequest', ]; // TODO: Implement getsubscribedevents() method. } }

Events

Migrate API Migrate API w rdzeniu Drupala Dodatkowe moduły migrate_plus migrate_tools migrate_upgrade

Ilość plików i kodu Zmiana stylu programowania na obiektowy spowodowała powstanie wielu plików i większej ilości kodu Tworzenie własnego modułu wymaga tworzenia większej ilości plików i kodu

Ilość plików i kodu Drupal Module Upgrader Narzędzie do konsoli, które skanuje kod modułu z D7 i wskazuje kod, który należy zmienić aby moduł działał w D8 https://www.drupal.org/project/drupalmoduleupgrader Drupal console https://drupalconsole.com/ PhpStorm IDE

Materiały w sieci - https://www.drupal.org/developing/api/8 - www.drupal8contrib.com - https://dev.acquia.com/blog/drupal-8 - https://docs.acquia.com/articles/building-drupal-8-modules - https://drupalize.me - płatny dostęp, ale polecam - https://twitter.com/drupal8contrib - https://www.ostraining.com/blog/drupal/200-drupal-8-videos/ - http://hojtsy.hu/multilingual-drupal8

Pytania?

Dziękujemy za uwagę