CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

Save this PDF as:
 WORD  PNG  TXT  JPG

Rozměr: px
Začít zobrazení ze stránky:

Download "CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE"

Transkript

1 CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE Miroslav Hájek

2 OBSAH Implementace entity Document Vivo Exceptions Vivo Interfaces Vivo Validator Vivo CMS Events 2

3 IMPLEMENTACE ENTITY DOCUMENT Sjednocení MultiContentDocumentu a Documentu Jednoduchá definice obsahů Přidání nového dokumentu do seznamu typu entit 3

4 TŘÍDA DOKUMENTU Vytvoření nové třídy Definice vlastností Definice jednotlivých obsahů class Island extends Document { /** string */ public $city; /** string */ public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component', ); 4

5 TŘÍDA DOKUMENTU Rodičovská třída je Document Definice typu UI komponenty class Island extends Document { /** string */ public $city; /** string */ public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); 5

6 TŘÍDA DOKUMENTU Zápis vlastností do pole FIELDS Definice typu Definice editační komponenty class Island extends Document { /** string */ public $city; /** string */ public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); CMS\Model\Entity::$FIELDS[ NAMESPACE.'\Island'] = array( 'city' => array( 'type' => 'string', 'field-type' => 'input', 'index' => false, 'important' => true, 'order' => 100 ) ); 6

7 TŘÍDA DOKUMENTU Přidání nového modelu do seznamu entit Přidání překladu do messages object Vivo\CMS\Model\Site { title string "My Site" domain string "LUNDEGAARDNET" parent_site string "META-SITE" entity_types array ( string "MyApp\CMS\Model\Island" : object stdclass { ) 7

8 VIVO EXCEPTIONS Refaktoring stávajících tříd reprezentující výjimky Výjimky VIVO Frameworku CMS výjimky Ostatní výjimky Zachování zpětné kompatibility 8

9 STRUKTURA EXCEPTIONS 9

10 VIVO INTERFACES Refaktoring stávajících rozhraní Sjednocení pojmenování Zachování zpětné kompatibility 11 rozhrání jako je IValidator, IRaw, IConverter 10

11 VIVO VALIDATOR Refaktoring a vytvoření základní sady validátorů Transparentnější funkcionalita Jednoduchá implementace vlastních validátorů Refaktoring třídy formulářového pole (Vivo\UI\Form\Field) Některé validátory jsou označeny Zachování zpětné kompatibility 11

12 IMPLEMENTACE VLASTNÍHO VALIDÁTORU class Journalist NotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->is Available($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; 12

13 IMPLEMENTACE VLASTNÍHO VALIDÁTORU class Journalist NotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->is Available($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; // $field = new Field('string'); $field->addvalidator(new Vivo\Validator\ ()); $field->addvalidator(new MyApp\Validator\Journalist NotUsed()); 13

14 IMPLEMENTACE VLASTNÍHO VALIDÁTORU class Journalist NotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->is Available($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; // $field = new Field('string'); $field->addvalidator(new Vivo\Validator\ ()); $field->addvalidator(new MyApp\Validator\Journalist NotUsed()); // $validator = new Vivo\Validator\ (); if(!$validator->validate('aaa')) { $msgs = $validator->getmessages(); throw new Vivo\InvalidArgumentException($msgs[0]); 14

15 CMS EVENTS Vyvolané události při určité akci (Vivo\CMS\Event) Nástupce implementace metod přímo ve třídě Od verze 1.2 nově 7 typů událostí 15

16 CMS EVENT Ukázka implementace události SAVE Využijeme existují třídu Island class Island extends Document { public $city; public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); CMS\Model\Entity::$FIELDS[ NAMESPACE.'\Island'] = array(/* Definice */); CMS::$event->register(CMS\Event::ENTITY_SAVE, function($entity) { ); 16

17 CMS EVENT Ukázka implementace události SAVE Využijeme existují třídu Island class Island extends Document { public $city; public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); CMS\Model\Entity::$FIELDS[ NAMESPACE.'\Island'] = array(/* Definice */); CMS::$event->register(CMS\Event::ENTITY_SAVE, function($entity) { ); 17

18 CMS EVENT Ukázka implementace události SAVE Uložení informace o probíhající akci class Island extends Document { public $city; public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); CMS\Model\Entity::$FIELDS[ NAMESPACE.'\Island'] = array(/* Definice */); CMS::$event->register(CMS\Event::ENTITY_SAVE, function($entity) { if($entity instanceof Island &&!$entity->created instanceof \DateTime) { Context::$instance->session['run'] = 1; ); 18

19 CMS EVENT Ukázka implementace události SAVE Změna stavu workflow galerie class Island extends Document { public $city; public $area; public function getmulticontenttypes() { return array( 1 => 'Vivo\CMS\Model\Content\File:text/html', 'Vivo\CMS\Model\Content\Gallery', 'Vivo\CMS\Model\Content\Component:MyApp\CMS\UI\MyComponent', ); CMS\Model\Entity::$FIELDS[ NAMESPACE.'\Island'] = array(/* Definice */); CMS::$event->register(CMS\Event::ENTITY_SAVE, function($entity) { if($entity instanceof Island &&!$entity->created instanceof \DateTime) { Context::$instance->session['run'] = 1; ); if($entity instanceof CMS\Model\Content\Gallery && isset(context::$instance->session['run'])) { $entity->state = CMS\Workflow::STATE_PUBLISHED; unset(context::$instance->session['run']); 19

20 CMS EVENT Ukázka implementace události VIEW v init.php souboru CMS::$event->register(CMS\Event::ROOT_VIEW, function($root) { if(strpos(context::$instance->script_url, '/system/manager/') === false && $root->main instanceof UI\Page) { foreach($root->main->scripts as $key => $script) { if ($script['src'] == '/Resources/Scripts/vivo.js') { unset($root->main->scripts[$key]); break; if (Context::$instance->remote_addr == ' ') { $jq = array(); $files = array('jquery.ui.widget.js', 'jquery.mobile.widget.js', //... 'jquery.mobile.init.js'); foreach ($files as $key => $file) { $jq[$key]['type'] = 'text/javascript'; $jq[$key]['src'] = "/Scripts/mobile-test/$file"; foreach($root->main->scripts as $key => $script) { if ($script['src'] == '/Scripts/jquery.mobile.min.js') { $k = $key; break; ); array_splice($root->main->scripts, $key -1, 1, $jq); 20

21 DĚKUJI ZA POZORNOST Španělská 2, Praha 2 Vinohrady Česká republika Tel.: Fax: ; Miroslav Hájek Tento dokument obsahuje informace důvěrného charakteru a informace v něm obsažené jsou vlastnictvím Lundegaard spol. s r.o. Žádná část dokumentu nesmí být kopírována, uchovávána v rešeršním systému nebo přenášena jakýmkoliv způsobem včetně elektronického, mechanického, fotografického či jiného záznamu a uveřejněna bez předchozí dohody a písemného svolení Lundegaard spol. s r.o. Veškerá práva vyhrazena 2012 Lundegaard 21