# Z najważniejszych rzeczy o Concrete5 ## Struktura systemu ``` -application (wszystko co nas interesuje) ----blocks (custom blocki oraz miejsce gdzie znajdą się szablony do innych blocków) ----themes -------sw_default (motyw bazowy) -concrete (core) -packages (zewnętrzne paczki) ``` Zazwyczaj dane zbiera się z utworzonych stron i ich atrybutów. Najczęściej wykorzystywane bloki to **Page List**, **Content**, **Autonav**. Ścieżka do tworzenia customowego szablonu dla bloku: ``` /application/blocks/block_name/templates/template_name/view.php ``` Ścieżki, które będą Cię interesować w szablonie: ``` /application/themes/sw_default/css/swSkin.less ``` Jest to główny plik ze stylami, posiada już jakieś wbudowane style, ale w ostatnim czasie wolałem wszystko wywalić i zrobić swój reset. ``` /application/themes/sw_default/elements ``` Tu znajdują się tak jakby komponenty (header i footer), które są includowane do głównego pliku szablonu o którym zaraz. ``` /application/themes/sw_default/default.php (lub default_news.php itp) ``` Tam znajdują się „Page Templates”, każda może wyglądać inaczej zależnie jaką chcesz sobie strukturę zbudować :) ## Obszary Bloki w concrete5 umieszczamy w obszarach, które umieszczamy w powyższych „Page Templates”. Obszary mogą być zdefiniowane dla każdej strony jak i mogą być globalne. Definiujemy je w ten sposób: ```php <?php $a = new GlobalArea('area name'); $a->display($c); ?> <?php $a = new Area('area name'); $a->display($c); ?> ``` Do tego przyda Ci się kilka metod, dzięki którym będziesz mógł warunkowo renderować elementy np. jeśli chcesz pokazać obszar tylko wtedy jeśli ma w sobie bloki robisz to tak: ```php <?php $contentArea = new Area('Content Area'); $displayContentArea = $contentArea->getTotalBlocksInArea($c) > 0; if($displayContentArea) { ?> <div class="row"> <?php $contentArea->display($c); ?> </div> <?php } ?> ``` Warto też brać pod uwagę to, że chcemy aby obszar był widoczny w trybie edycji, także musimy zmodyfikować warunek: ```php $displayContentArea = $contentArea->getTotalBlocksInArea($c) > 0 || $c->isEditMode(); ``` ## Najpotrzebniejsze funkcje i klasy w przypadku szablonów dla Page List: pobieranie atrybutów: ``` $page->getAttribute('attribute_handler'); ``` pobieranie nazwy strony: ``` $page->getCollectionName(); ``` pobieranie opisu strony: ``` $page->getCollectionDescription(); ``` Jeśli chciałbyś się dobrać do atrybutów strony to najpierw trzeba ją zaimportować za pomocą tego kawałka kodu: ```php $site=\Site::getSite(); //potem podobnie jak dla stron $site->getAttribute('name'); ``` ## Inne Gdybyś szukał czegoś co istnieje w podstawowym widoku bloku możesz znaleźć go sobie w np. w ``/application/concrete/blocks/block_name/view.php`` i tam podejrzeć jak coś jest użyte :) ## LESS Mixins ```less .small-view(@rules) { @media only screen and (min-width: @small-breakpoint) { @rules(); } } .medium-view(@rules) { @media only screen and (min-width: @medium-breakpoint) { @rules(); } } .large-view(@rules) { @media only screen and (min-width: @large-breakpoint) { @rules(); } } .xlarge-view(@rules) { @media only screen and (min-width: @xlarge-breakpoint) { @rules(); } } ```