Programovanie a vývoj v SilverStripe

SilverStripe neoceníte len preto, že sa v ňom jednoducho a efektívne administruje obsah. Ako vývojár ešte viac oceníte to, čo SilverStripe poskytuje vo svojom vnútri.

Sapphire framework

Srdcom SilverStripe CMS je framework Sapphire. Je postavený na 3 pilieroch: MVC architektúra, OOP objektovo orientovaný PHP5 kód s podporou objektovo orientovaného modelu ORM.

MVC architektúra:

V SilverStripe sa MVC (model-view-controller) architektúra dodržiava jednoducho, nie je na prítaž a je rozumne navrhnutá.

Model je zahrnutý priamo v integrovanom ORM, ktorý vám vystačí na 95% bežných dotazov do databázy a v podstate ho ani nevnímate. Stačí nastaviť relácie medzi dátami resp. samotné typy dát v jednotlivých tabuľkách a pri "buildnutí" stránky sa všetky polia a tabuľky vygenerujú automaticky. Rovnako automaticky pristupujete k previazaným dátam. Dôsledkom takejto automatickej previazanosti je vyššia databázová náročnosť aplikácie oproti "na mieru" generovaným dotazom, no ORM nie je nutnosťou. Môžete si vytvárať vlastné, vyladené dotazy.

View - šablóny sa ukladajú v špeciálnych .ss súboroch a využívajú vlastný parser. Obsahuje len základné funkcie, no prekvapivo postačuje. Nakoľko v ss súboroch nie je možné používať PHP kód (čo vás zo začiatku bude veľmi hnevať), tak mixovanie MC do P je skoro nemožné. Obrovskou výhodou celého templatovacieho systému je kaskádovosť šablón a css súborov. Ak potrebujete zmeni HTML v nainštalovanom module, tak nikdy nemusíte meniť core files. Súbor si jednoducho skopírujete do adresára šablóny vašej stránky, urobíte potrebné zmeny a systém si už sám pri budúcom načítaní stránky nájde tento váš súbor. Celkovo veľa veci funguje v SilverStripe samo -> ak vytvoríte nový Sitetree extension s názvom Fotky, ktorý by mal zobrazovať zoznam fotografií, tak stačí vytvoriť šablónu Fotky.ss v adresári themes/vasa-tema/templates/Layout/ a v controlleri nič nedefinujete a pri generovaní si stránka sama nájde šablónový súbor s rovnakým názvom.

Controller - ak controller extenduje ContentController, ktorý je súčasťou SiteTree, tak aby vám začal controller fungovať v strome stránok (backend i frontend), tak vám teoreticky postačia prázne triedy (správne pomenované). Všetko je predpripravené, stačí vytvoriť vlastný šablónový súbor (viď vyššie, teoreticky ale nie je potrebný, v tom prípade sa bude stránka generovať podľa šablónového súboru rodičovskej triedy). Môžete ale aj úplne obísť SiteTree extension a vytvoriť controller, na ktorý ste zvyknutí - s vlastnými metódami a funčnosťou.

Moduly, widgety:

Všetko, čo v SS vyvíjate, môže byť vytvorené ako modul. Moduly sú ľahšie zdieľajú medzi projektami, nemusíte kopírovať súbory z rôznych adresárov. Stačí dodržať jednoduchú štruktúru adresárov, vytvoriť súbor _config.php (i prázdny) v hlavnom adresári modulu, umiestniž modul do root adresára webu, buildnuť stránku a modul je pripravený. Obdobné platí pre widgety, t.j kúsky kódu, kt. sa zobrazujú napr. v sidebar-e webu.

Extendovanie tried, dekorátory:

Extendovanie je príjemná cesta, ako pridať funkcionalitu/data do existujúcej triedy. Veľmi často sa používa pri extendovaní SiteTree tried. Pri extendovaní ľahko pridáte nové db polia do administračného systému i frontendu bez nutnosti opakovania kódu resp. zmeníte existujúcu funkcionalitu. Dekorátory sa využívajú pri pridávaní funkcionality do existujúcich tried. Nie sú to dekorátory v priamom zmysle slova, nakoľko pomocou dekorátorov nie je možné zmeniť metódy, ktoré sú už súčasťou dekorovanej triedy. Vo viacerých smeroch je to však dobrá voľba, ako rozšíriť existujúci kód.

Príklad extendovania:

(Vytvorenie špeciálneho typu stránky StaffPage, kde môžeme vkladať text pre pozíciu [Role] a obrázok zamestnanca [StaffPhoto])

class StaffPage extends Page {
static $db = array(
'Role' => 'Text'
);

static $has_one = array(
'StaffPhoto' => 'Image'
);

function getCMSFields() {
$fields = parent::getCMSFields();

$fields->addFieldsToTab('Root.Content.Staff',
array( new TextField("Role"),
new ImageField("StaffPhoto", "Staff photo")));

return $fields;
}
}

Príklad dekorovania

(Pridanie rozhrania pre pridanie obrázku akejkoľvek stránke)

 class MainImageDecorator extends DataObjectDecorator {


function extraStatics() {

return array(

'db' => array(),

'has_one' => array('MainImage' => 'MyImage')

);

}


function updateCMSFields(&$fields) {

$fields->addFieldToTab("Root.Content.Foto", new ImageField("MainImage", "Hlavný obrázok"));

}


}

//EOF

a následne dekorátor aktivujete v základnom konfiguračnom súbore (/mysite/_config.php):

Object::add_extension('Page','MainImageDecorator');

Verím, že vás stručný popis zaujal a teraz si kladete otázku: "Ako si to možem vyskúšať?". Nie je nič jednoduchšie ako si stiahnuť najnovšiu stabilnú verziu SilverStripe a postupovať podľa inštalačného návodu. Akékoľvek otázky smerujte do fóra na SilversStripe.sk.