CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE Miroslav Hájek mhajek@lundegaard.eu
OBSAH Implementace entity Document Vivo Exceptions Vivo Interfaces Vivo Validator Vivo CMS Events 2
IMPLEMENTACE ENTITY DOCUMENT Sjednocení MultiContentDocumentu a Documentu Jednoduchá definice obsahů Přidání nového dokumentu do seznamu typu entit 3
TŘÍDA DOKUMENTU Vytvoření nové třídy Definice vlastností Definice jednotlivých obsahů class Island extends Document { /** * @var string */ public $city; /** * @var 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
TŘÍDA DOKUMENTU Rodičovská třída je Document Definice typu UI komponenty class Island extends Document { /** * @var string */ public $city; /** * @var 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
TŘÍDA DOKUMENTU Zápis vlastností do pole FIELDS Definice typu Definice editační komponenty class Island extends Document { /** * @var string */ public $city; /** * @var 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
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
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
STRUKTURA EXCEPTIONS 9
VIVO INTERFACES Refaktoring stávajících rozhraní Sjednocení pojmenování Zachování zpětné kompatibility 11 rozhrání jako je IValidator, IRaw, IConverter http://vivo.lundegaard.eu/cs/support/documentation/api/ 10
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 jako @deprecated Zachování zpětné kompatibility 11
IMPLEMENTACE VLASTNÍHO VALIDÁTORU class JournalistEmailNotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->isEmailAvailable($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; 12
IMPLEMENTACE VLASTNÍHO VALIDÁTORU class JournalistEmailNotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->isEmailAvailable($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; // --------------------- $field = new Field('string'); $field->addvalidator(new Vivo\Validator\Email()); $field->addvalidator(new MyApp\Validator\JournalistEmailNotUsed()); 13
IMPLEMENTACE VLASTNÍHO VALIDÁTORU class JournalistEmailNotUsed extends Validator { public function validate($value) { $this->errormessages = array(); $valid = COM::lookup('app/journalist')->isEmailAvailable($value); if (!$valid) { $this->errormessages[] = Messages::get( CLASS.'\err_message'); return $valid; // --------------------- $field = new Field('string'); $field->addvalidator(new Vivo\Validator\Email()); $field->addvalidator(new MyApp\Validator\JournalistEmailNotUsed()); // --------------------- $validator = new Vivo\Validator\Email(); if(!$validator->validate('aaa')) { $msgs = $validator->getmessages(); throw new Vivo\InvalidArgumentException($msgs[0]); 14
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
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
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
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
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
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 == '10.47.100.33') { $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
DĚKUJI ZA POZORNOST Španělská 2, 120 00 Praha 2 Vinohrady Česká republika Tel.: +420 222 253 015 Fax: +420 222 254 458 E-mail: info@lundegaard.cz ; www.lundegaard.cz Miroslav Hájek mhajek@lundegaard.cz http://vivo.lundegaard.eu/ 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