# 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();
}
}
```