Invenzzia » Zasoby / Artykuły / Sekcje i formaty danych w OPT / Odpowiedzi

6. Odpowiedzi

W pierwszym postawionym problemie chodziło o określenie, jak OPT zrozumie format danych StaticGenerator/Objective/Array. Patrzymy od lewej strony. Lista pobierana jest z generatora, który zwraca ją w postaci obiektu, zaś poszczególne elementy listy reprezentowane są przez tablice.

Nieco dalej pytaliśmy o zalety wyrzucenia z szablonów szczegółów implementacyjnych i przeniesienie ich ustawiania do skryptu. Temat ma charakter otwarty, aczkolwiek można z łatwością wymienić kilka głównych zalet:

  1. Szablon może powstawać wcześniej niż skrypt, lub równolegle do niego. W dodatku twórca szablonów może to robić dużo szybciej, ponieważ nie musi tracić czasu na dodatkową implementację oraz spędzać dużej ilości czasu na testowaniu połączenia.
  2. Szablony mogą zostać wykorzystane jako makieta dla klienta lub dla programistów odpalana przez najprostszy kod PHP wypełniający ją przykładowymi statycznymi danymi. Dzięki temu można zapoznać się ze strukturą serwisu, a szablony bez żadnych modyfikacji później przenosić do właściwej wersji. Wystarczy jedynie zmienić formaty danych.
  3. Uproszczony refactoring kodu. Dane dostarczane są w postaci tablic i obiektów. Zdarza się, że w wyniku optymalizacji lub rozbudowy jakiegoś kawałka kodu chcemy zmienić tablice na obiekty (lub na odwrót). W OPT nie wymaga to przepisania szablonów – wystarczy zmienić format danych i przekompilować wszystko, co zajmuje chwilkę.

W ćwiczeniu trzecim zajmujemy się formatami danych współpracującymi z sekcjami zagnieżdżonymi. Chcemy, by lista wpisów była obiektem, pojedynczy wpis tablicą, a tagi dla wpisu były pobierane przez generator:

$view->setFormat('entries', 'Objective/Array');
$view->setFormat('tags', 'StaticGenerator/Array');

Format StaticGenerator w przypadku sekcji zagnieżdżonych poszukuje obiektu generatora w elemencie sekcji nadrzędnej, dokładnie tak, jak w SingleArray. Po ukośniku musimy dorzucić jeszcze format określający, czym są zwracane przez generator elementy.

Ostatnie ćwiczenie poświęcone jest współpracy sekcji z opt:show.

<opt:show name="top">
  <opt:section name="middle" parent="top">
    Element.
  </opt:section>
 
  <opt:section>
    Element listy.
  </opt:section>
</opt:show>

Pytaliśmy, czy dany kod zadziała... i dlaczego nie. Właściwa sekcja obejmuje wyłącznie blok kodu, który podlega powtarzaniu. Znacznik opt:show definiuje jedynie otoczenie sekcji, dlatego nasza sekcja middle nie może być do niego podłączona. Ma to sens praktyczny – z jakim elementem sekcji top mamy ją związać, kiedy nie rozpoczęliśmy jeszcze nawet pobierania i wyświetlania elementów? Aby poprawić ten kod, należałoby usunąć atrybut parent (wtedy sekcja będzie traktowana jak niezagnieżdżona), albo przenieść middle do wnętrza pustych znaczników opt:section, gdyż tylko tam OPT może utworzyć powiązanie.