CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

Podobné dokumenty
VERZE 1.1.1, 1.1.2, 1.2 VIVO.LUNDEGAARD.EU

VIVO: NOVINKY NA FRONT-ENDU LUNDEGAARD Zdeněk Staněk

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Čipové karty Lekařská informatika

Algoritmizace a programování

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Objektově orientované programování v PHP 5. Martin Klíma

Úvod do programovacích jazyků (Java)

20. Projekt Domácí mediotéka

Abstraktní datové typy: zásobník

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Ekonomika v prostředí samosprávy

Nové eslužby pro Brno

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Add-on modul Microsoft Dynamics NAV. Montážní deník. manuál

Programování v jazyce JavaScript

Add-on modul Microsoft Dynamics NAV. manuál

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro administrátory. Verze 1.

Třídy a objekty -příklady

Generické programování

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

typová konverze typová inference

kontrola povinnosti údajů kontrola rozsahu čísel kontrola ové adresy, telefonního čísla nutná součást každého software

Vytváření a použití knihoven tříd

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

PREPROCESOR POKRAČOVÁNÍ

UJO Framework. revoluční architektura beans. verze

Distribuované systémy a výpočty

Typický prvek kolekce pro české řazení

Add-on modul Microsoft Dynamics NAV. Manuál

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Stručný úvod pro programátory. Michal Kuchta

KTE / ZPE Informační technologie

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

RMI Remote Method Invocation

Enterprise Java Beans 3.0

Java a XML. 10/26/09 1/7 Java a XML

Iterator & for cyklus

Kolekce, cyklus foreach

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Kód, který se nebude často měnit

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);


Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Jazyk C# (seminář 5)

Doxygen. Jakub Břečka

Vývoj multiplatformní aplikace v Qt

Java Výjimky Java, zimní semestr

Programování v jazyce JavaScript


Aplikace pro srovna ní cen povinne ho ruc ení

Java Řetězce Java, zimní semestr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Delphi podstata, koncepce a metody MDI aplikace

Jazyk C# (seminář 6)

Ad-on modul Microsoft Dynamics NAV. Pokladna. manuál

Rozhraní pro práci s XML dokumenty. Roman Malo

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro editaci ŽS. Verze 1.

Integrace informačních systémů ve Fakultní nemocnici Brno v rámci projektu ENIS II

Plánování a vývoj základního frameworku

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Jazyk C# a platforma.net

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

(X)HTML, CSS a jquery

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Java Enum Java, zimní semestr ,2017 1

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Projekty pro výuku programování v jazyce Java

Teoretické minimum z PJV

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Dokumentový sklad. Dokumentový sklad v.1. Dokumentový sklad v.2. Koncepce skladu v.2. Petr Lampa

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

JavaScript v praxi: Sokoban (5. přednáška)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Zápis programu v jazyce C#

1. Téma 12 - Textové soubory a výjimky

Jazyk C# (seminář 3)

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

KIV/PIA 2013 Jan Tichava

2 Strukturované datové typy Pole Záznam Množina... 4

Výjimky. Tomáš Pitner, upravil Marek Šabo

!!Via!AUREA,!s.r.o.!

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Začínáme s vývojem pro Android

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Seminář Java IV p.1/38

5 Rekurze a zásobník. Rekurzivní volání metody

HTTP. Webový server. generátor HTML stránek (CGI, Perl, PHP, Python, Ruby, Java, ASP.NET) zpracování požadavku/ odeslání odpovědi.

Transkript:

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