Dokuczliwy błąd w szablonie...

Co jakiś czas aktualizujemy składniki (komponenty) naszych systemów, w tym webowych serwerów sieciowych. Robimy to bo: chcemy, czasami - musimy. Z góry zakładamy, że skutek będzie OK. I z reguły tak jest.

Troszkę inaczej sprawa wygląda z szablonami. Jedni starają się nadążyć za najnowszymi trendami. Inni (w tym ja) przywiązują się do tego co "tymi ręcami" stworzyli. ;) Rzadko zwracając uwagę, że czas upływa.

Poniższy przykład jest tego najlepszym dowodem.

Póki wszystko działa - nie zawracamy sobie tym głowy. Do czasu. Po (wymuszonej przez CMS) aktualizacji PHP do wersji 7.2 pojawił się istotny problem: strona przestała działać. Komunikat: "0 Using $this when not in object context" na pierwszy rzut oka też niewiele mówi. Może biegli w programowaniu w php wiedzą o co chodzi. Nie jestem tak biegły i pewnie dlatego nie wiedziałem. :(

Ciśnienie szybko wzrosło. Równie szybko jak lista potencjalnych winowajców tego stanu rzeczy. Najczęściej nas na tej liście nie ma. Obniżenie wersji php przywraca funkcjonalność strony, ale... smuci koniec okresu wsparcia dla (obniżonej) wersji.

Co się dzieje?

Zestawienie ekranów: frontu i zaplecza

Ilość porad w sieci wskazuje, że problem ten wielu dokuczył. Propozycji rozwiązań też jest niemało. Ale... wiele z nich nie zawsze jest skuteczna i/lub daje mało zadowalające efekty. Najczęściej nie dają również odpowiedzi na pytanie: co się stało?

W moim przypadku istotną wskazówką był fakt, iż o ile próba otwarcia strony generowało błąd, to wywołanie i sama procedura logowania się do jej zaplecza przebiegała bez problemów.

Dla skrócenia wywodów chciałbym wskazać, że strony te różnią się szablonami. Zaplecze bazuje na standardowym szablonym proponowanych domyślnie przez CMS. Stona główna oparta jest na zmodyfikowanym przeze mnie innym szablonie. Modyfikacji dokonałem jakiś czas temu.

Rozwiązanie znalazłem w wątku: "Update PHP to 7.1 / 7.2 creates "Fatal Error 0 Using $this when not in object context #21258".

Szybko, trafnie i skutecznie problem zdiagnozował i zaproponował rozwiązanie Michael Babker (mbabker). Stwierdził on, że bezpośrednią przyczyną jest wywołanie (w pliku: index.php) w niewłaściwym (statycznym) trybie metody: GetMenu. Sugerował wyszukanie w treści pliku frazy:

JSite :: getMenu () (ew.: Joomla\CMS\Application\SiteApplication :: getMenu ()

i zastąpieniem go następującym kodem:

JFactory :: getApplication () -> getMenu ()

Szybko, łatwo i przyjemnie....

Nie musiałem długo szukać. Zmiana kodu przyniosła natychmiastowy efekt. Podobnie jak u twórcy wskazanego powyżej wątku. Pozostaje już tylko Michael Babker (mbabker) podziękować.

Nie można też mieć pretensji do twórców (pierwo)wzoru szablonu, gdyż oni działali w określonych: warunkach, środowiskach i czasie. I trzeba mieć tego świadomość.

------------------

W celach ilustracji artykułu w pierwszym obrazku wykorzystałem poprzez wklejenie grafikę: SMirC-crazy.svg (https://commons.wikimedia.org/wiki/File:SMirC-crazy.svg)