eZ Publish: Własne stronnicowanie wyników w szablonie

2012-06-28 eZ Publish

Stworzenie fetch'a dla nadpisanego szablonu jest czynnością standardową – foreach "wyniki" as "wynik" itp. Co jednak jeśli naszego "wynik" jest w widoku zbyt wiele? Dopiszmy stronnicowanie i podzielmy wyniki na odpowiednie części. Wykorzystamy standardową wstawkę do stronnicowania wyników wziętą z widoku "full" pliku folder.tpl:

{include name=navigator
uri='design:navigator/google.tpl'
page_uri=$node.url_alias
item_count=$list_count
view_parameters=$view_parameters
item_limit=$page_limit}

Potrzebujemy trzech zmiennych:

  • $page_limit – definiującej ilość wyników na stronę,
  • $arts – przykładowej zmiennej pod którą będą fetchowane wyniki które chcemy stronnicować,
  • $list_count – ilość wszystkich elementów wewnątrz node'a 84 z którego pobieramy nasze elementy – identyfikator 84 jest przykładowy – zmień go na odpowiedni dla Ciebie.

Zdefiniujmy te zmienne, np:

{def $page_limit = 10}

{def $arts = fetch( 'content', 'tree',
   hash( 'parent_node_id', 84,
   'sort_by', array(
      array( 'attribute', false(), 'article/sticky' ),
      array( 'attribute', false(), 'article/data')
   ),
   'class_filter_type', 'include',
   'class_filter_array', array( 'article' ),
   'limit', $page_limit,
   'offset', $view_parameters.offset ) ) }

{def $list_count=fetch( 'content', 'tree_count',
   hash( 'parent_node_id', 84,
   'class_filter_type', 'include',
   'class_filter_array', array( 'article' ) ) ) }

Dodajmy pętle która "przetworzy" nam $arts:

{foreach $arts as $i => $art}
  {node_view_gui content_node=$art view=line}
{/foreach}

Na koniec includujemy do szablonu wspomniane stronnicowanie:

{include name=navigator
   uri='design:navigator/google.tpl'
   page_uri=$node.url_alias
   item_count=$list_count
   view_parameters=$view_parameters
   item_limit=$page_limit}

Całość może wyglądać następująco:

{def $page_limit = 10}

{def $arts = fetch( 'content', 'tree',
   hash( 'parent_node_id', 84,
   'sort_by', array(
      array( 'attribute', false(), 'article/sticky' ),
      array( 'attribute', false(), 'article/data')
   ),
   'class_filter_type', 'include',
   'class_filter_array', array( 'article' ),
   'limit', $page_limit,
   'offset', $view_parameters.offset ) ) }

{def $list_count=fetch( 'content', 'tree_count',
   hash( 'parent_node_id', 84,
   'class_filter_type', 'include',
   'class_filter_array', array( 'article' ) ) ) }

{foreach $arts as $i => $art}
  {node_view_gui content_node=$art view=line}
{/foreach}

{include name=navigator
   uri='design:navigator/google.tpl'
   page_uri=$node.url_alias
   item_count=$list_count
   view_parameters=$view_parameters
   item_limit=$page_limit}