Upgrade do Timber 2.0 alpha

wpowlsp-timber

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 teraz Timber\Menu
  • Twig\Twig_Filter, od teraz Twig\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() na Timber::context() – aczkolwiek tutaj warto zaznaczyć, że pojawiła się też metoda Timber::context_global(), która uwzględnia tylko wartości ustawione globalnie, a nie dla danej templatki
  • filtr timber_context zmienił się w timber\context
  • Image, które zmieniło się w get_post albo get_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ę.

Podoba Ci się ten artykuł? Podaj go dalej!