Niedawno ukazała się wersja alpha Timbera 2.0. Postanowiłem więc spróbować zrobić aktualizację Timbera na WP Owls, by sprawdzić jak wiele problemów może nas spotkać w trakcie tego procesu.
Nim przystąpicie do aktualizacji
Po pierwsze – pamiętajcie, jest to wersja alpha – coś może nie działać. Osobiście ominęły mnie nieprzyjemności, ale z drugiej strony WP Owls nie jest zbyt skomplikowaną stroną.
Po drugie – zacznijcie od przeczytania dokładnie poradnika. Znajdziecie tutaj kompletną listę zmian.
Po trzecie – zainstalujcie Query Monitor oraz ustawcie WP_DEBUG na TRUE. Dzięki temu łatwiej będzie mogli zauważyć pojawiające się błędy.
Instalacja
Jeżeli używacie Timbera w postaci plugina to musicie go usunąć i zainstalować go poprzez Composera. Czemu? Prawda jest taka, że wersja wtyczkowa zawsze sprawiała więcej problemów. Wraz z wersją 2.0 postanowiono po prostu wyelminować ten problem w całości.
Jeżeli już teraz używacie Composera, wystarczy zmienić wersję na 2.0.0-alpha.1
.
Na dzień dobry… błąd krytyczny
… nie było to jednak zaskoczenie. Niektóre nazwy klas, metod oraz funkcji zostały zmienione. W moim przypadku głównymi winowajcami były:
TimberMenu
, od terazTimber\Menu
Twig\Twig_Filter
, od terazTwig\TwigFilter
Zapraszam na https://timber.github.io/docs/v2/upgrade-guides/2.0/#namespaced-class-names znajdziecie tam więc zmienionych nazw.
Depracated
Teraz przyszedł czas na rozprawienie się z przestarzałymi funkcjami, zmiennymi oraz filtrami. W moim przypadku we wszystkich przypadkach wystarczyła zmiana nazwy:
Timber::get_context()
naTimber::context()
– aczkolwiek tutaj warto zaznaczyć, że pojawiła się też metodaTimber::context_global()
, która uwzględnia tylko wartości ustawione globalnie, a nie dla danej templatki- filtr
timber_context
zmienił się wtimber\context
Image
, które zmieniło się wget_post
alboget_image
– o ile brzmi to dziwnie, o tyle jeżeli tylko przyjrzycie się jak zostały przebudowane klasy to zrozumiecie, że ma to głębszy sens.
Kontekst
Wspominałem już, że działanie context trochę się zmieniło. Moim zdaniem, bardzo na korzyść.
Np. od teraz zawsze mamy dostęp do następującej grupy zmiennych:
- site – z danymi o stronie,
- request – gdzie mamy dostęp do wszystkich zmiennych
$_POST
oraz$_GET
, - theme – czyli zmienne związane z motywem,
- user – wszystkie dane zalogowanego użytkownika.
Tym sposobem mogłem pozbyć się zmiennej, która pozwalała na dostęp do $_GET
.
Kolejną miłą rzeczą jest fakt, że w context automatycznie pojawiają się zmienne post (na pojedynczych stronach) oraz posts (na archiwach). Dzięki temu mogłem pozbyć się ze wszystkich swoich templatek:
$context['posts'] = Timber::get_posts();
Niby nic wielkiego, ale nie trzeba co chwilę powtarzać tej samej linijki kodu.
get_posts oraz mapowanie klas
Mapowanie klas jest kolejnym usprawnieniem, które bardzo mi się spodobało.
Jeżeli rozszerzaliśmy jakiś obiekt to musieliśmy potem za każdym razem pisać to w następujący sposób:
$context['other_posts'] = Timber::get_posts( $args, 'OwlPost' );
gdzie OwlPost
było naszą nową klasą. To wszystko ładnie działało, ale było troszkę irytujące, bo było trzeba pamiętać o tej klasie za każdym razem.
W Timberze 2.0 rozwiązano to o wiele, wiele lepiej:
$context['other_posts'] = Timber::get_posts( $args );
add_filter(
'timber/post/classmap',
function( $classmap ) {
$custom_classmap = array(
'post' => OwlPost::class,
);
return array_merge( $classmap, $custom_classmap );
}
);
dzięki temu filtrowi, w jednym miejscu ustawiamy, która klasa będzie użyta dla danego Typu Wpisu.
Cache i inne zmienne środowiskowe
Bardzo mi się spodobało, że wszystkie ważne zmienne środowiskowe od teraz możemy edytować za pomocą filtra timber/twig/environment/options – tym sposobem cache ustawiamy za pomocą filtra:
add_filter(
'timber/twig/environment/options',
function( $options ) {
$options['cache'] = true;
return $options;
}
);
a nie za pomocą zmiennej:
Timber::$cache = true;
Kilka wniosków
Osobiście jestem bardzo zadowolony ze zmian, które pojawiły się w nowej wersji. Jak tylko Timber 2.0 pojawi się w wersji stabilnej na pewno postaram się przenieść na niego moje prywatne projekty.
Ewidentnie widać, że kod, będzie pozwalał unikać pewnych powtórzeń (mapowanie klas w stosunku do typu wpisów) czy wyeliminować kilka linijek powtarzanych w kółko (dzięki nowemu kontekstowi).
Sam proces przenosin, nie powinien nastarczyć zbyt wielu problemów.
Teraz pozostaje tylko testować, zgłaszać błędy i czekać na stabilną wersję.