<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.hegyd.com/skins/common/feed.css?207"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki.hegyd.com/index.php?feed=atom&amp;target=Sebd&amp;title=Sp%C3%A9cial%3AContributions</id>
		<title>Hegyd Doc - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.hegyd.com/index.php?feed=atom&amp;target=Sebd&amp;title=Sp%C3%A9cial%3AContributions"/>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Sp%C3%A9cial:Contributions/Sebd"/>
		<updated>2026-07-10T20:30:26Z</updated>
		<subtitle>De Hegyd Doc.</subtitle>
		<generator>MediaWiki 1.15.4</generator>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Publication/Annulation</id>
		<title>SP:Processus:Publication/Annulation</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Publication/Annulation"/>
				<updated>2010-07-30T13:01:38Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication/Annulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Publication/Annulation = &lt;br /&gt;
&lt;br /&gt;
Le site visible par le visiteur final peut être différent de celui vu dans l'éditeur. En effet la plupart des modification faites à partir de l'éditeur sont enregistrées en tant que brouillon, et n'affecte pas le site de production.&lt;br /&gt;
Les modifications effectuées peuvent alors être soient publiées soit annulées.&lt;br /&gt;
&lt;br /&gt;
Ne '''sont pas''' concernées par le principe de publication/annulation:&lt;br /&gt;
&lt;br /&gt;
* modifications portant sur le site: nom de domaine, et informations client.&lt;br /&gt;
* modifications portant sur les informations des pages. Néanmoins, [[SP:Composant:PageSiteClient#Statut_Brouillon_.2F_Publi.C3.A9|un flag]]permet d'indiquer le mode de la page.&lt;br /&gt;
&lt;br /&gt;
'''Sont''' concernées par le processus: &lt;br /&gt;
&lt;br /&gt;
* les modifications de contenu: contenu des pages, slogan&lt;br /&gt;
* les modifications de style: choix de theme, de palettes de couleur, de modèle, et styles personnalisés&lt;br /&gt;
&lt;br /&gt;
== Processus général ==&lt;br /&gt;
&lt;br /&gt;
La publication/l'annulation se fait en deux étapes. L'utilisateur choisit quelles modifications il souhaite publier: les modifications de contenu et/ou les modifications de style.&lt;br /&gt;
Ensuite chaque type de contenu est gérer séparément.&lt;br /&gt;
&lt;br /&gt;
Ce processus est orchestré par lesfonctions se trouvant dans '''functionsPublish.js'''.&lt;br /&gt;
&lt;br /&gt;
== Publication ==&lt;br /&gt;
&lt;br /&gt;
La publication consiste en l'écrasement des données actuellement en production par les nouvelles actuellement en brouillon. Les données de brouillon sont ensuite supprimées.&lt;br /&gt;
Une seule exception a cette règle, le logo du site s'il est spécifié conserve toujours une valeur de brouillon, dans le cas ou il est supprimé.&lt;br /&gt;
&lt;br /&gt;
Se fait en deux temps, par le biais de la fonction '''confirmPublish()''' (une fois que l'utilisateur a validé son choix).&lt;br /&gt;
&lt;br /&gt;
* publication en elle meme , par le biais d'un appel AJAX&lt;br /&gt;
* raffraichissement des données de la page courante: &lt;br /&gt;
** rafraichissement de la CSS des [[SP:Composant:StyleProperties|styles personnalisés]].&lt;br /&gt;
** rafraichissement des blocs de contenu de la page courante.&lt;br /&gt;
&lt;br /&gt;
=== Publication de contenu ===&lt;br /&gt;
&lt;br /&gt;
* publication du [[SP:Composant:SiteClient#Publication|slogan]]&lt;br /&gt;
* publication des différentes [[SP:Composant:SiteClient#Publication|pages du site]].&lt;br /&gt;
&lt;br /&gt;
=== Publication de styles ===&lt;br /&gt;
&lt;br /&gt;
* affectation du theme de la palette de couleur et du modele à la version de production du site.&lt;br /&gt;
* [[SP:Composant:StyleProperties#Publicationenregistrement des styles sur la version de production]].&lt;br /&gt;
&lt;br /&gt;
== Annulation ==&lt;br /&gt;
&lt;br /&gt;
L'annulation consiste à la suppression de données de brouillon.&lt;br /&gt;
&lt;br /&gt;
Se fait en deux temps, par le biais de la fonction '''confirmCancelPublish()''' (une fois que l'utilisateur a validé son choix).&lt;br /&gt;
&lt;br /&gt;
* suppression en base des styles et du contenu brouillon via un appel AJAX&lt;br /&gt;
* raffraichissement des données de la page courante: &lt;br /&gt;
** rafraichissement javascript  du contenu (si l'utilisateur a choisi d'annuler les modifications de contenu)&lt;br /&gt;
** rafraichissement javascript des menus de styles si l'on se trouve sur une des pages d'édition des styles (si l'utilisateur a choisi d'annuler les modifications de style).&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Publication/Annulation</id>
		<title>SP:Processus:Publication/Annulation</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Publication/Annulation"/>
				<updated>2010-07-30T12:15:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Publication/Annulation = &lt;br /&gt;
&lt;br /&gt;
Le site visible par le visiteur final peut être différent de celui vu dans l'éditeur. En effet la plupart des modification faites à partir de l'éditeur sont enregistrées en tant que brouillon, et n'affecte pas le site de production.&lt;br /&gt;
Les modifications effectuées peuvent alors être soient publiées soit annulées.&lt;br /&gt;
&lt;br /&gt;
Ne '''sont pas''' concernées par le principe de publication/annulation:&lt;br /&gt;
&lt;br /&gt;
* modifications portant sur le site: nom de domaine, et informations client.&lt;br /&gt;
* modifications portant sur les informations des pages. Néanmoins, [[SP:Composant:PageSiteClient#Statut_Brouillon_.2F_Publi.C3.A9|un flag]]permet d'indiquer le mode de la page.&lt;br /&gt;
&lt;br /&gt;
'''Sont''' concernées par le processus: &lt;br /&gt;
&lt;br /&gt;
* les modifications de contenu: contenu des pages, slogan&lt;br /&gt;
* les modifications de style: choix de theme, de palettes de couleur, de modèle, et styles personnalisés&lt;br /&gt;
&lt;br /&gt;
== Processus général ==&lt;br /&gt;
&lt;br /&gt;
La publication/l'annulation se fait en deux étapes. L'utilisateur choisit quelles modifications il souhaite publier: les modifications de contenu et/ou les modifications de style.&lt;br /&gt;
Ensuite chaque type de contenu est gérer séparément.&lt;br /&gt;
&lt;br /&gt;
Ce processus est orchestré par lesfonctions se trouvant dans '''functionsPublish.js'''.&lt;br /&gt;
&lt;br /&gt;
== Publication ==&lt;br /&gt;
&lt;br /&gt;
La publication consiste en l'écrasement des données actuellement en production par les nouvelles actuellement en brouillone. Les données de brouillon sont ensuite supprimées.&lt;br /&gt;
Une seule exception a cette règle, le logo du site s'il est spécifié conserve toujours une valeur de brouillon, dans le cas ou il est supprimé. Néanmoins, il ne devrait pas dans l'idéal.&lt;br /&gt;
&lt;br /&gt;
Se fait en deux temps, par le biais de la fonction '''confirmJS()''' dans tous les cas.&lt;br /&gt;
&lt;br /&gt;
* publication en elle meme , par le biais d'un appel AJAX&lt;br /&gt;
* raffraichissement des données de la page: &lt;br /&gt;
** rafraichissement de la CSS des [[SP:Composant:StyleProperties|styles personnalisés]].&lt;br /&gt;
** rafraichissement des blocs de contenu de la page courante.&lt;br /&gt;
&lt;br /&gt;
=== Publication de contenu ===&lt;br /&gt;
&lt;br /&gt;
* publication du [[SP:Composant:SiteClient#Publication|slogan]]&lt;br /&gt;
* publication des différentes [[SP:Composant:SiteClient#Publication|pages du site]].&lt;br /&gt;
&lt;br /&gt;
=== Publication de styles ===&lt;br /&gt;
&lt;br /&gt;
* affectation du theme de la palette de couleur et du modele à la version de production du site.&lt;br /&gt;
* [[SP:Composant:StyleProperties#Publicationenregistrement des styles sur la version de production]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T09:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Gestion de contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;br /&gt;
&lt;br /&gt;
'''Legende''': &lt;br /&gt;
&lt;br /&gt;
* contenu/fleches en vert: contenu utilisé pour afficher la version de production du contenu.&lt;br /&gt;
* contenu/fleches en orange: contenu utilisé sur la version éditeur&lt;br /&gt;
* contenu bleu: liaison non dépendante de la version du contenu utilisée (contenu de production/brouillon)&lt;br /&gt;
&lt;br /&gt;
'''Explication'''&lt;br /&gt;
&lt;br /&gt;
Un [[SP:Composant:SiteClient|site client]] est lié a un [[SP:Composant:Craft|craft]], qui permet de déployer pour le site en question du contenu par défaut.&lt;br /&gt;
Chaque siteClient contient des pages. Le contenu de chaque page est réparti par [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
Chaque bloc contient des [[SP:Composant:BlocObject|blocObject]] de manière directe, cad chaque blocObject est lié par référence au bloc, ou de manière indirecte via les [[SP:Composant:PredefinedContent|predefinedContent]]. Ce sont alors les predefinedContent qui contiennent des BlocObject. Le predefinedContent n'est pas rélié a la page mais uniquement au bloc, ce qui permet de l'utiliser indépendamment de la page, et l'utiliser sur différentes pages.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T09:28:50Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Gestion de contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;br /&gt;
&lt;br /&gt;
'''Legende''': &lt;br /&gt;
&lt;br /&gt;
* contenu/fleches en vert: contenu utilisé pour afficher la version de production du contenu.&lt;br /&gt;
* contenu/fleches en orange: contenu utilisé sur la version éditeur&lt;br /&gt;
* contenu bleu: liaison non dépendante de la version du contenu utilisée (contenu de production/brouillon)&lt;br /&gt;
&lt;br /&gt;
'''Explication'''&lt;br /&gt;
&lt;br /&gt;
Un [[SP:Composant:SiteClient|site client]] est lié a un [[SP:Composant:Craft|craft]], qui permet de déployer pour le site en question du contenu par défaut.&lt;br /&gt;
Chaque siteClient contient des pages. Le contenu de chaque page est réparti par [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
Chaque bloc contient des [[SP:Composant:BlocObject|blocObject]] de manière directe, cad chaque blocObject est lié par référence au bloc, ou de manière indirecte via les [[SP:Composant:PredefinedContent|predefinedContent]]. Certains bloc sont lié a des predefinedContent, qui eux contiennent des BlocObject.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T09:28:35Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Gestion de contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;br /&gt;
&lt;br /&gt;
'''Legende''': &lt;br /&gt;
&lt;br /&gt;
* contenu/fleches en vert: contenu utilisé pour afficher la version de production du contenu.&lt;br /&gt;
* contenu/fleches en orange: contenu utilisé sur la version éditeur&lt;br /&gt;
* contenu bleu: liaison non dépendante de la version du contenu utilisée (contenu de production/brouillon)&lt;br /&gt;
&lt;br /&gt;
'''Explication'''&lt;br /&gt;
&lt;br /&gt;
Un [[SP:Composant:SiteClient|site client]] est lié a un [[SP:Composant:Craft|craft]], qui permet de déployer pour le site en question du contenu par défaut.&lt;br /&gt;
Chaque siteClient contient des pages. Le contenu de chaque page est réparti par [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
Chaque bloc contient des [[SP:Composant:BlocObjectblocObject]] de manière directe, cad chaque blocObject est lié par référence au bloc, ou de manière indirecte via les [[SP:Composant:PredefinedContent|predefinedContent]]. Certains bloc sont lié a des predefinedContent, qui eux contiennent des BlocObject.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T09:06:21Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Gestion de contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;br /&gt;
&lt;br /&gt;
'''Legende''': &lt;br /&gt;
&lt;br /&gt;
* contenu/fleches en vert: contenu utilisé pour afficher la version de production du contenu.&lt;br /&gt;
* contenu/fleches en orange: contenu utilisé sur la version éditeur&lt;br /&gt;
* contenu bleu: liaison non dépendante de la version du contenu utilisée (contenu de production/brouillon)&lt;br /&gt;
&lt;br /&gt;
'''Explication'''&lt;br /&gt;
&lt;br /&gt;
Un [[SP:Composant:SiteClient|site client]] est lié a un [[SP:Composant:Craft|craft]], qui permet de déployer pour le site en question du contenu par défaut.&lt;br /&gt;
Chaque siteClient contient des pages. Le contenu de chaque page est réparti par [[SP:Composant:Bloc|bloc]]&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T08:00:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;an&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;br /&gt;
&lt;br /&gt;
'''Legende''': &lt;br /&gt;
&lt;br /&gt;
* contenu/fleches en vert: contenu utilisé pour afficher la version de production du contenu.&lt;br /&gt;
* contenu/fleches en orange: contenu utilisé sur la version éditeur&lt;br /&gt;
* contenu bleu: liaison non dépendante de la version du contenu utilisée (contenu de production/brouillon)&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu</id>
		<title>SP:Processus:Gestion de contenu</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Processus:Gestion_de_contenu"/>
				<updated>2010-07-30T07:37:33Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Gestion de contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Processus]]&lt;br /&gt;
&lt;br /&gt;
= Gestion de contenu = &lt;br /&gt;
&lt;br /&gt;
Diagramme montrant les différents composants agissant dans la gestion de contenu&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Composants_content.png]]&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Fichier:Composants_content.png</id>
		<title>Fichier:Composants content.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Fichier:Composants_content.png"/>
				<updated>2010-07-30T07:37:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-29T09:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Comment sont gérés les différentes partie sde l'application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* [[SP:Composant:BlocObject#Base_de_donn.C3.A9es_2|enregistrement en base]] du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controleyrs associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php''' en utilisant la syntaxe '''$blocObject-&amp;gt;values-&amp;gt;hasFax''' pour savoir si l'utilisateur a choisi ou non d'afficher le champ fax dans son formulaire.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les différentes partie sde l'application ===&lt;br /&gt;
&lt;br /&gt;
Chaque partie de l'application est définie dans la classe '''models/Site.php'''. Un pattern permet d'identifier la partie concerné à partir de l'URL.&lt;br /&gt;
La page '''www/index.php''' récupère ensuite le type de l'application par le biais de la variable '''$site''', et procède aux traitement / redirections nécessaires, selon la partie appelée.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-29T09:37:18Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* How To */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* [[SP:Composant:BlocObject#Base_de_donn.C3.A9es_2|enregistrement en base]] du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controleyrs associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php''' en utilisant la syntaxe '''$blocObject-&amp;gt;values-&amp;gt;hasFax''' pour savoir si l'utilisateur a choisi ou non d'afficher le champ fax dans son formulaire.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les différentes partie sde l'application ===&lt;br /&gt;
&lt;br /&gt;
Chaque partie de l'application est définie dans la classe '''models/Site.php'''. Un pattern permet d'identifier la partie concerné à partir de l'URL.&lt;br /&gt;
La page '''www/index.php''' récupère ensuite le type de l'application par le biais de la variable '''$site''', et procède aux traitement / redirections nécessaires, selon la partie appelée.&lt;br /&gt;
&lt;br /&gt;
La page '''index.php'''&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T09:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* pages &amp;amp; contenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
*Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
** ''moduleId'': identifiant&lt;br /&gt;
** ''moduleName'': nom du module&lt;br /&gt;
** ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
** ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
*Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
** ''moduleId''&lt;br /&gt;
** ''siteClientId''&lt;br /&gt;
** ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
*Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
** ''modulePageId'': identifiant&lt;br /&gt;
** ''moduleId'': identifiant du module&lt;br /&gt;
** ''modulePageName'': nom de la page&lt;br /&gt;
** ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
*Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
*Un module pourra être lié a un type de [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
**Pour ce faire, un champ '''moduleId''' sera ajouté à la table '''typeBlocObject''' définissant les type de blocObject. Il contiendra l'identifiant du module associé au type de blocObject s'il existe.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]]. Cette interface est du meme type que l'éditeur de métiers et l'éditeur de thème.&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T09:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
*Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
** ''moduleId'': identifiant&lt;br /&gt;
** ''moduleName'': nom du module&lt;br /&gt;
** ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
** ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
*Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
** ''moduleId''&lt;br /&gt;
** ''siteClientId''&lt;br /&gt;
** ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
*Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
** ''modulePageId'': identifiant&lt;br /&gt;
** ''moduleId'': identifiant du module&lt;br /&gt;
** ''modulePageName'': nom de la page&lt;br /&gt;
** ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
*Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
*Un module pourra être lié a un type de [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
**Pour ce faire, un champ '''moduleId''' sera ajouté à la table '''typeBlocObject''' définissant les type de blocObject. Il contiendra l'identifiant du module associé au type de blocObject s'il existe.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]].&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T09:00:36Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* base de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
*Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
** ''moduleId'': identifiant&lt;br /&gt;
** ''moduleName'': nom du module&lt;br /&gt;
** ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
** ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
*Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
** ''moduleId''&lt;br /&gt;
** ''siteClientId''&lt;br /&gt;
** ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
*Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
** ''modulePageId'': identifiant&lt;br /&gt;
** ''moduleId'': identifiant du module&lt;br /&gt;
** ''modulePageName'': nom de la page&lt;br /&gt;
** ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
*Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
*Un module pourra être lié a un type de [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
**Pour ce faire, un champ '''moduleId''' sera ajouté à la table '''typeBlocObject''' définissant les type de blocObject. Il contiendra l'identifiant du module associé au type de blocObject s'il existe.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]].&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T09:00:12Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* base de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
*Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
&lt;br /&gt;
** ''moduleId'': identifiant&lt;br /&gt;
** ''moduleName'': nom du module&lt;br /&gt;
** ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
** ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
&lt;br /&gt;
*Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
&lt;br /&gt;
** ''moduleId''&lt;br /&gt;
** ''siteClientId''&lt;br /&gt;
** ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
&lt;br /&gt;
** ''modulePageId'': identifiant&lt;br /&gt;
** ''moduleId'': identifiant du module&lt;br /&gt;
** ''modulePageName'': nom de la page&lt;br /&gt;
** ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
&lt;br /&gt;
*Un module pourra être lié a un type de [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
&lt;br /&gt;
**Pour ce faire, un champ '''moduleId''' sera ajouté à la table '''typeBlocObject''' définissant les type de blocObject. Il contiendra l'identifiant du module associé au type de blocObject s'il existe.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]].&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T08:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* base de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''moduleId'': identifiant&lt;br /&gt;
* ''moduleName'': nom du module&lt;br /&gt;
* ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
* ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
&lt;br /&gt;
Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
&lt;br /&gt;
* ''moduleId''&lt;br /&gt;
* ''siteClientId''&lt;br /&gt;
* ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
&lt;br /&gt;
* ''modulePageId'': identifiant&lt;br /&gt;
* ''moduleId'': identifiant du module&lt;br /&gt;
* ''modulePageName'': nom de la page&lt;br /&gt;
* ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
&lt;br /&gt;
Un module pourra être lié a un type de [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, un champ '''moduleId''' sera ajouté à la table '''typeBlocObject''' définissant les type de blocObject. Il contiendra l'identifiant du module associé au type de blocObject s'il existe.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]].&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Part:Editeur</id>
		<title>SP:Part:Editeur</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Part:Editeur"/>
				<updated>2010-07-29T08:55:51Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Parties_de_l'application]]&lt;br /&gt;
&lt;br /&gt;
= Editeur =&lt;br /&gt;
&lt;br /&gt;
'''URL''': http://site-xxxx.creation-site-web.fr/editeur/ OU http://domain.tld/editeur/&lt;br /&gt;
&lt;br /&gt;
L'éditeur est l'application web qui permet d'éditer son site web.&lt;br /&gt;
&lt;br /&gt;
== Connexion == &lt;br /&gt;
&lt;br /&gt;
Via le compte client associé au site ou un compte Admin Viaduc.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement général ==&lt;br /&gt;
&lt;br /&gt;
=== Philosophie ===&lt;br /&gt;
&lt;br /&gt;
Le but de l'éditeur est d'en faire un outil orienté WYSIWYG. Chaque action entreprise ne doit regénérer entièrement la page seulement si c'est indispensable (changement de page pour l'édition, changement de type d'édition).&lt;br /&gt;
&lt;br /&gt;
Ainsi chaque action déclenche si besoin l'action d'un controler en AJAX, pour enregistrer les modifications ou récupérer des informations via la BD, et d'un panel de fonctions destiné a modifier l'affichage en fonction de l'action entreprise.&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
arborescence des fichiers javascripts de l'éditeur, a partir du répertoire '''www/js'''.&lt;br /&gt;
&lt;br /&gt;
* ''/'': contient les constructueur de différents éléments de formulaires et autre plugin. Les fichiers sont de la form '''construct{elem}.js'''&lt;br /&gt;
* ''/editeur/'': fichiers propres à l'éditeur&lt;br /&gt;
** ''base64.js'': librairie utilisé pour encoder en base 64&lt;br /&gt;
** ''Bloc.js'': classe permettant de gérer les blocs&lt;br /&gt;
** ''BlocObject.js'': classe permettant de gérer les blocObjects&lt;br /&gt;
** ''ColorPaletteEditor.js'': classe gérant les palette de couleurs (uniquement pour l'[[SP:Part:Thèmes|éditeur de thème]])&lt;br /&gt;
** ''CraftEditor.js'': classe gérant les métiers (uniquement pour l'[[SP:Part:Métiers|éditeur de métier]])&lt;br /&gt;
** ''EditorTooltip'': classe gérant les tooltip affichées sur l'éditeur.&lt;br /&gt;
** ''functionsDisplay.js'': groupemenet de fonctions dédié a l'affichage (boutons patienter, messages d'erreur...)&lt;br /&gt;
** ''functionsGeneric.js'': groupement de fonction génériques utilisées par les fonctions JS de tout l'éditeur&lt;br /&gt;
** ''functionsGlobal.js'': groupement de fonction utilisés sur toute les interfaces de l'éditeur&lt;br /&gt;
** ''functionsPublish.js'': groupement de fonctions dédiées à la publication&lt;br /&gt;
** ''functionsStyle.js'': groupement de fonctions dédiées a la gestion des styles&lt;br /&gt;
** ''init.js'': appelé sur toutes le spages de l'éditeur: initialisation de base&lt;br /&gt;
** ''initColorPaletteMode.js'': initialisation sur les pages de gestion des palettes de couleurs (uniquement pour l'[[SP:Part:Thèmes|éditeur de thème]])&lt;br /&gt;
** ''initContentEditor.js'': initialisation de 'linterface de gestion de contenu&lt;br /&gt;
** ''initCraftMode.js'': initialisation du gestionnaire de métier (pour l'[[SP:Part:Métiers|éditeur de métier]])&lt;br /&gt;
** ''initMEP.js'' : initialisation pour l'interface de gestion de mise en page&lt;br /&gt;
** ''initStyles.js'' : initilisation pour les interfaces jouant sur les styles&lt;br /&gt;
** ''initTheme.js'' : initialisation pour l'interface de gestion de thèmes&lt;br /&gt;
** ''initThemeMode.js'' : initialisation pour l'interface de gestino de thèmes (pour l'[[SP:Part:Thèmes|éditeur de thème]])&lt;br /&gt;
** ''pageHandler.js'' : classse permettant de gérer l'object page&lt;br /&gt;
** ''Scroller.js'' : plugin jQuery qui affiche un scroller si besoin dans le menu de gauche&lt;br /&gt;
** ''siteHandler.js'' : classe gérant l'objet site&lt;br /&gt;
** ''ThemeEditor.js'' : classe gérant l'éditeur de thème &lt;br /&gt;
** ''ThemeHandler.js'' : classe gérant les thèmes&lt;br /&gt;
&lt;br /&gt;
Pour voir précisément quel fichier est inclus sur quel page, voir le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du gestionnaire d'inclusion.&lt;br /&gt;
&lt;br /&gt;
== Edition de contenu ==&lt;br /&gt;
&lt;br /&gt;
L'édition de contenu se fait page par page.&lt;br /&gt;
Pour chaque page, on découpe le contenu par [[SP:Composant:Bloc|bloc]]. Chaque bloc contient ensuite des [[SP:Composant:BlocObject|blocObjects]]. Pour en savoir plus sur le processus coeur de gestion de contenu consultez [[SP:Processus:Gestion_de_contenu|la page dédiée à la gestion de contenu]].&lt;br /&gt;
&lt;br /&gt;
Les blocs et blocObject sont dynamisés par javascript. Chaque action effectuée sur un bloc ou un blocObject nécessitant un recours ou un traitement spécifique utilise AJAX.&lt;br /&gt;
&lt;br /&gt;
Au niveau de la DOM, des classes et des IDs permettent de reconnaitre chaque bloc et blocObject et d'obtenir ses propriétés, qui sont ensuite enregistré dans l'object lié apres initialisation. Ces propriétés vont conditionner l'affichage des options de modification, suppression... de chaque élément.&lt;br /&gt;
&lt;br /&gt;
=== Les blocs ===&lt;br /&gt;
&lt;br /&gt;
L'initialisation de chaque bloc se fait via la fonction ''initBlocs()'' du fichier ''Bloc.js''. Elle détecte chaque bloc et l'initialise.&lt;br /&gt;
L'acces a l'objet correspondant a un bloc se fait via ''getBloc($(&amp;quot;selecteur du bloc&amp;quot;))''.&lt;br /&gt;
&lt;br /&gt;
=== Les blocs Objects (BO) ===&lt;br /&gt;
&lt;br /&gt;
L'initialisation de chaque blocObject se fait via la fonction ''initBlocsObjects()'' du fichier ''BlocObject.js''. Elle détecte la présence de chaque BlocObject et l'initialise.&lt;br /&gt;
L'accès a l'objet correspondant set fait vie ''getBO($(&amp;quot;selecteur du blocObject&amp;quot;))''.&lt;br /&gt;
&lt;br /&gt;
=== L'édition des infos de page ===&lt;br /&gt;
&lt;br /&gt;
L'affichage du formulaire est directement fait a partir du template pageSiteDisplay. Sa dynamisation est réalisée en javascript via l'objet ''pageHandler'', qui gère la modification de ses infos, la suppression de la page courante, et la modification de l'ordre des pages.&lt;br /&gt;
&lt;br /&gt;
== Edition de styles ==&lt;br /&gt;
&lt;br /&gt;
=== Choix du theme / palette de couleur ===&lt;br /&gt;
&lt;br /&gt;
C'est l'objet ''ThemeHandler'' qui se charge de dynamiser le bouton de choix de thème pour afficher la popup de choix, et d'enregistrer le choix si l'utilisateur valide.&lt;br /&gt;
&lt;br /&gt;
==== Changement de theme/Palette de couleur ====&lt;br /&gt;
&lt;br /&gt;
Une fois l'enregistrement en BD effectué (changement de thème et/ou palette de couleur + application des nouvelles propriétés de style), on recharge la CSS du modèle, les coins arrondis (pour s'adapter aux nouvelles couleurs, si besoin est), et pour finir la feuille de style personnalisée.&lt;br /&gt;
&lt;br /&gt;
=== Choix du modèle ===&lt;br /&gt;
&lt;br /&gt;
==== Affichage des choix ====&lt;br /&gt;
&lt;br /&gt;
Le choix du [[SP:Composant:SiteModel|modèle]] se fait selon deux options: &lt;br /&gt;
* la mise en page du header (combo header et menu d'entete)&lt;br /&gt;
* la mise en page de la partie centrale de la page (menus et contenu)&lt;br /&gt;
&lt;br /&gt;
Une mise en page de header + mise en page partie centrale = model.&lt;br /&gt;
&lt;br /&gt;
Cette relation est établie grace au fichier de configuration '''conf/models.php'''.&lt;br /&gt;
Ce fichier de config définit la liste des possibilités pour chaque option, et un tableau permet de récupérer l'identifiant du model associé a un couple d'option.&lt;br /&gt;
&lt;br /&gt;
==== Application du modèle ====&lt;br /&gt;
&lt;br /&gt;
A chaque changement établi dans l'un des deux accordéons, un appel ajax permet d'enregistrer le choix, et la feuille de style du nouveau modèle est chargée à la volée.&lt;br /&gt;
Ces actions sont défini et associées aux éléments de la page dans le fichier ''initMEP.js''.&lt;br /&gt;
&lt;br /&gt;
=== Styles personnalisés===&lt;br /&gt;
&lt;br /&gt;
Toutes les modifications concernant l'apparence hormis le choix de modèle font partie des styles personnalisés.&lt;br /&gt;
&lt;br /&gt;
==== Définition ====&lt;br /&gt;
&lt;br /&gt;
Il existent deux type de styles personnalisés, qui servent uniquement a différencier ceux devant être affiché sur la page ''&amp;quot;Mise en Page&amp;quot;'' et ceux de la page ''&amp;quot;Style et polices&amp;quot;''.&lt;br /&gt;
Voir le composant [[SP:Composant:StyleProperties|StyleProperties]] pour la définition des différents styles.&lt;br /&gt;
&lt;br /&gt;
==== Affichage HTML ====&lt;br /&gt;
&lt;br /&gt;
Les styles sont regroupés par élément d'application, et affichés dans le menu de gauche. L'affichage HTML de chacun d'entre eux est régi par la classe coeur ''ElementForm'', qui renvoit le HTML correspondant au type du style, et l'initialise avec sa valeur.&lt;br /&gt;
&lt;br /&gt;
==== Dynamisation javascript ====&lt;br /&gt;
&lt;br /&gt;
Les méthodes décrites ci dessous sont situées dans le fichier ''functionsStyle.js''.&lt;br /&gt;
&lt;br /&gt;
===== Initialisation =====&lt;br /&gt;
&lt;br /&gt;
Le méthode ''initPanelFields()'' se charge de capturer les évènements déclenchés par les différents items du menu lors de leur modifications (slider, select etc), et déclenche les fonctions de modification associées.&lt;br /&gt;
&lt;br /&gt;
La fonction utilise pour ca un tableau JS de configuration.&lt;br /&gt;
&lt;br /&gt;
Exemple avec le slider : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                &amp;quot;.jsSlider&amp;quot;: // selecteur qui cible tous les sliders&lt;br /&gt;
                {&lt;br /&gt;
                        &amp;quot;slide&amp;quot;:function(eventObject,eventData) //liste des evenement a surveiller, avec la fonction qui sera éxécuté lors de leur déclenchement&lt;br /&gt;
                        {&lt;br /&gt;
                                var elem = $(eventObject.currentTarget).prev(&amp;quot;input[type='hidden']&amp;quot;); // on récupère l'élément qui contient la valeur du slider&lt;br /&gt;
                                elem.val(eventData.value+$(eventData.handle).parent(&amp;quot;div&amp;quot;).attr(&amp;quot;unit&amp;quot;)); //on convertit la valeur brute en valeur CSS (ici valeur brute + unité), qu'on attribut au slider&lt;br /&gt;
                                changeProperty(elem,null,null,false); //on lance la procédure de changement de propriété, en envoyant directement l'élément. le false permet d'indiquer qu'on enregistre pas en base, on modifié seulement l'apercu&lt;br /&gt;
                        },&lt;br /&gt;
                        &amp;quot;slidestop&amp;quot;:function(eventObject,eventData)&lt;br /&gt;
                        {&lt;br /&gt;
                                var elem = $(eventObject.currentTarget).prev(&amp;quot;input[type='hidden']&amp;quot;);&lt;br /&gt;
                                elem.val(eventData.value+$(eventData.handle).parent(&amp;quot;div&amp;quot;).attr(&amp;quot;unit&amp;quot;));&lt;br /&gt;
                                changeProperty(elem,null,null,true); // meme procédure, hormis le fait qu'on enregistre la valeur en base&lt;br /&gt;
                        }&lt;br /&gt;
                },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Modification =====&lt;br /&gt;
&lt;br /&gt;
Lors d'une modification, la fonction ''changeProperty()'' est appelée la plupart du temps. Elle a trois roles: &lt;br /&gt;
* modifier à la volée le style CSS associé a la propriété modifiée &lt;br /&gt;
* l'enregistrement en base de la nouvelle valeur&lt;br /&gt;
* déclencher si besoin la modification des propriétés connexes avec ''changeMasterProperty()''(voir chapitre sur les [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|MasterProperty]]).&lt;br /&gt;
&lt;br /&gt;
Pour savoir sur quelle propriété agir lors de la modification d'un élément donné, la méthode ''changeProperty()'' se base sur le tableau javascript ''fieldsAction''. Ce tableau, crée lors de la génération du HTML, contient l'ensemble des élément css modifiables, les propriétés sur lesquelles ils agissent, leur identifiant, et leur valeur lors du chargement de la page.&lt;br /&gt;
&lt;br /&gt;
Pour l'enregistrement en base, on utilise l'identifiant de la propriété et sa valeur.&lt;br /&gt;
&lt;br /&gt;
===== Modification pour les &amp;quot;[[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]]&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Cette phase a lieu dans la fonction ''changeMasterProperty()'', appelée par ''changeProperty()''.&lt;br /&gt;
&lt;br /&gt;
Lire au préalable la partie sur les [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|MasterProperties]] est indispensable à la compréhension de cette partie.&lt;br /&gt;
&lt;br /&gt;
Si on détecte qu'un champ a un attribut masterProperty, alors on va récupérer tous les champs qui ont la meme masterProperty, et leur valeur. On passe ensuite cet ensemble de valeurs a un controleur, qui va se charger de les traiter et retourner les propriétés de styles associées. On applique ensuite ces nouvelles propriétés aux styles de la page.&lt;br /&gt;
&lt;br /&gt;
La spécificité de cette fonction est de rafraichir les valeurs concernant le champs hauteur et largeur. Ces champs seront nécessaire pour la masterProperty de type Background.&lt;br /&gt;
&lt;br /&gt;
== Preview ==&lt;br /&gt;
&lt;br /&gt;
Le preview permet d'avoir un apercu dans la version brouillon du site sans les menus, et de surfer de page en page, comme si le site était publié.&lt;br /&gt;
&lt;br /&gt;
== Edition des infos du site ==&lt;br /&gt;
&lt;br /&gt;
L'édition des infos du site est diponible via le lien &amp;quot;parametres du site&amp;quot; sur l'éditeur. &lt;br /&gt;
&lt;br /&gt;
Les infos modifiables sont le nom de nom de domaine ,les informations relative a l'utilisateur et sa société, et le métier&lt;br /&gt;
&lt;br /&gt;
=== Nom de domaine ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'édition, le nom de domaine est modifié au niveau des information du siteClient, mais surtout chez l'enregistrement qui lui est associé chez Viaduc, par le biais de l'API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modification_nom_de_domaine.png]]&lt;br /&gt;
&lt;br /&gt;
=== Infos du métier ===&lt;br /&gt;
&lt;br /&gt;
Les infos du métiers comprennent:&lt;br /&gt;
* les infos client (nom prenom, nom de la société...)&lt;br /&gt;
* la sélection du métier lui meme (uniquement disponible pour les pack payants, un métier par défaut est déployé pour les sites démo et les site package gratuit).&lt;br /&gt;
&lt;br /&gt;
Les infos client seront utilisées lors du déploiement du contenu type associé au métiers, afin de personnaliser le contneu (création de google map automatique, champs d'adresse...).&lt;br /&gt;
Voir la page sur les [[SP:Composant:Craft|métiers]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication/Annulation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Affichage ===&lt;br /&gt;
Les boutons sont affichés en permanence sur l'éditeur et mode activé ou non activés. Ils sont soit tous les deux activés, soit tous les deux désactivés.&lt;br /&gt;
Un premier controle est réalisé pour savoir dans quel état on les affiche au moment de la génération de la page. C'est le controler global.php de la partie éditeur qui le checke. et affecte une variable javascript via son tmeplate. L'affichage du bloc de publication est ensuite effectué en javascript via les méthodes contenues dans ''functionsPublish.js''.&lt;br /&gt;
&lt;br /&gt;
=== Actions ===&lt;br /&gt;
&lt;br /&gt;
Les actions affectées a chacun des deux boutons sont également défini par les méthodes de ''functionsPublish.js''.&lt;br /&gt;
Voir le [[SP:Processus:Publication/Annulation|processus]] concernant la publication et l'annulation, pour en savoir plus sur le mécanisme.&lt;br /&gt;
&lt;br /&gt;
==== Publication ====&lt;br /&gt;
&lt;br /&gt;
La publication a pour effet de recharger le contenu de chaque bloc, et de recharger la feuille de styles personnalisés de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
==== Annulation ====&lt;br /&gt;
&lt;br /&gt;
L'annulation a pour effet de recharger le contenu de chaque bloc, de recharger la feuille de style, et de réinitialiser les champs contenus dans les accordéons du menu de gauche dans le cas ou l'on se trouve sur une des pages permettant de modifier les styles.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Module</id>
		<title>SP:Composant:Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Module"/>
				<updated>2010-07-29T08:39:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Les modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Les modules = &lt;br /&gt;
&lt;br /&gt;
Un module permet d'étendre les fonctionnalités primaire de l'éditeur, en ajoutant par exemple un système de gestion d'actualités, ou un support e-commerce. Le principe du module est de ne pas modifier le noyau, mais de s'y greffer, pour accroitres les possibilités de l'application.&lt;br /&gt;
&lt;br /&gt;
'''Note''': cette partie n'est pas codée, les tables n'ont pas été crées. La doc suivante est une méthodologie pour la création d'un module. Elle devra dans l'idéal être modifiée en fonctions des changements effectués durant son implémentation.&lt;br /&gt;
&lt;br /&gt;
Voici une vue générale de l'implémentation des modules: &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Modules.png|1400px]]&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
Le module est enregistré dans la table '''module''', ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''moduleId'': identifiant&lt;br /&gt;
* ''moduleName'': nom du module&lt;br /&gt;
* ''moduleCleanedName'': nom du module sans caractères spéciaux. Servira pour nommer les répertoires associés.&lt;br /&gt;
* ''siteOptions'': s'il est rélié avec une option lié au [[SP:Composant:SiteClient#Packages_associ.C3.A9s|packages]].&lt;br /&gt;
&lt;br /&gt;
Il est '''lié à un site''' par le bias d'une table de jointure '''jModule_SiteClient''', ses champs: &lt;br /&gt;
&lt;br /&gt;
* ''moduleId''&lt;br /&gt;
* ''siteClientId''&lt;br /&gt;
* ''status'': indique s'il est activé pour le client ou non.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une autre table permet de '''définir les pages''' qui devront être associées au module '''modulePages''', ses champs: &lt;br /&gt;
&lt;br /&gt;
* ''modulePageId'': identifiant&lt;br /&gt;
* ''moduleId'': identifiant du module&lt;br /&gt;
* ''modulePageName'': nom de la page&lt;br /&gt;
* ''urlPattern'': expression réulière permettant de reconnaitre la page à partir d'une url&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le module pourra également avoir '''ses propres tables'''. Elle devront toutes être préfixées par '''{moduleCleanedName}'''.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
La classe '''Module''' contient les méthodes génériques de gestion des modules:&lt;br /&gt;
&lt;br /&gt;
* activate() / desactivate(): activation/désactivation d'un module: déploie les éventuelles pages associés&lt;br /&gt;
&lt;br /&gt;
Chaque module dispose ensuite de '''sa propre classe''', nommée '''{moduleCleanedName}''', qui comprends se propres méthodes. Ces méthodes pourront être utilisées dans les templates et controleurs des blocObjects associé au module ainsi que dans les pages d'administration permettant d'éditeur le module.&lt;br /&gt;
''Exemple'': méthode getNewsList(), AddNews(),deleteNews()... pour un module actualités.&lt;br /&gt;
&lt;br /&gt;
D'autres classes peuvent être associées au module pour le compléter. Elle devront se trouver dans le répertoire '''lib/model/EasySite/modules/{moduleCleanedName}/''' dans un fichier '''{moduleCleandName}ClassName.php''' et se nommer '''{moduleCleandName}ClassName''' (sans cette syntaxe, elle ne pourront pas être chargé via lautoload de l'application).&lt;br /&gt;
&lt;br /&gt;
=== Autres éléments associés ===&lt;br /&gt;
&lt;br /&gt;
==== pages &amp;amp; contenu ====&lt;br /&gt;
&lt;br /&gt;
Définis via [[SP:Part:Edition_Modules|l'interface d'édition des modules]].&lt;br /&gt;
&lt;br /&gt;
==== types de blocObject ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|méthodologie pour créer des types de blocObject]]).&lt;br /&gt;
Ces types de blocObject ne seront alors disponible a l'ajout seulement si le module est activé pour le client.&lt;br /&gt;
&lt;br /&gt;
==== propriétés de styles ====&lt;br /&gt;
&lt;br /&gt;
Cf. ([[SP:HowTo#Comment_ajouter_un_.C3.A9l.C3.A9ment_.C3.A9ditable_dans_la_customisation_des_styles.3F| l'aide pour ajouter des nouvelles propriétés]]).&lt;br /&gt;
&lt;br /&gt;
==== pages pour administrer le module ====&lt;br /&gt;
&lt;br /&gt;
Ces pages permettront a l'utilisateur d'administrer le module. Les '''templates/controleurs''' correspondant se trouvent dans '''templates/editeur/{moduleCleanedName}/''' et  '''controleurs/editeur/{moduleCleanedName}/'''. Elles seront appelables via l'url '''http://domaine-du-site.fr/editeur/{moduleCleanedName}/nom_page.html''', et pourront contenir des paramètres utilisables dans leur controleur et template associé.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Framework_V2</id>
		<title>Framework V2</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Framework_V2"/>
				<updated>2010-07-29T08:29:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* la classe ElementForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Framework V2 = &lt;br /&gt;
&lt;br /&gt;
Le framework V2 et la secodne version du framework développé par Hegyd, issue d'une refonte de la V1 effectuée en grande partie par Emmanuel Gautier.&lt;br /&gt;
&lt;br /&gt;
== Fondements ==&lt;br /&gt;
&lt;br /&gt;
=== la classe Element ===&lt;br /&gt;
&lt;br /&gt;
Est étendu par bon nombre de classes de l'application. Elle permet de gérer automatiquement les fonctions de base d'un objet: enregistrement en base, récupération des valeurs, etc. Utilisée par presque toutes les classes crées pour l'éditeur.&lt;br /&gt;
&lt;br /&gt;
Sa spécificité se trouve dans la définition des variables. Pour chaque objet, il est possible de définir l'ensemble des variables qui le compose, via la donnée membre '''$fields''' de la classe element. Voici un exemple de définition pour un élément: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'nom_variable' =&amp;gt; array(&lt;br /&gt;
    'type'=&amp;gt; 'text', //type pour la conversion en tant qu'élément de formulaire&lt;br /&gt;
    'storage'=&amp;gt; 'none' //indique si le champ a un champ associé en base (meme nom) ou non&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque variable référencée est alors modifiable et accessible via '''$classe-&amp;gt;nom_variable'''.&lt;br /&gt;
&lt;br /&gt;
Pour enregistrer les variables en base, il suffit d'utiliser la fonction '''processAction()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== la classe ElementForm ===&lt;br /&gt;
&lt;br /&gt;
Permet à partir d'un objet étendant Element de créer un formulaire permettant d'éditer l'ensemble des champs de l'object. La transformation est possible d'apres le type de l'object. Le parcours de la classe permet d'avoir un aperçu des différents type disponibles.&lt;br /&gt;
&lt;br /&gt;
Dispose également de fonctions de validation, et gère l'enregistrement de fichiers a l'aide du composant [[SP:Composant:Upload|Upload]].&lt;br /&gt;
&lt;br /&gt;
Voir [[http://admin.hegyd-developpement.com/documentation-chapitre-fiche.html?d_id=13&amp;amp;id=37|la doc Hegyd]] pour en savoir plus sur l'utilisation de ElementForm&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Framework_V2</id>
		<title>Framework V2</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Framework_V2"/>
				<updated>2010-07-29T08:27:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Framework V2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Framework V2 = &lt;br /&gt;
&lt;br /&gt;
Le framework V2 et la secodne version du framework développé par Hegyd, issue d'une refonte de la V1 effectuée en grande partie par Emmanuel Gautier.&lt;br /&gt;
&lt;br /&gt;
== Fondements ==&lt;br /&gt;
&lt;br /&gt;
=== la classe Element ===&lt;br /&gt;
&lt;br /&gt;
Est étendu par bon nombre de classes de l'application. Elle permet de gérer automatiquement les fonctions de base d'un objet: enregistrement en base, récupération des valeurs, etc. Utilisée par presque toutes les classes crées pour l'éditeur.&lt;br /&gt;
&lt;br /&gt;
Sa spécificité se trouve dans la définition des variables. Pour chaque objet, il est possible de définir l'ensemble des variables qui le compose, via la donnée membre '''$fields''' de la classe element. Voici un exemple de définition pour un élément: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'nom_variable' =&amp;gt; array(&lt;br /&gt;
    'type'=&amp;gt; 'text', //type pour la conversion en tant qu'élément de formulaire&lt;br /&gt;
    'storage'=&amp;gt; 'none' //indique si le champ a un champ associé en base (meme nom) ou non&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque variable référencée est alors modifiable et accessible via '''$classe-&amp;gt;nom_variable'''.&lt;br /&gt;
&lt;br /&gt;
Pour enregistrer les variables en base, il suffit d'utiliser la fonction '''processAction()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== la classe ElementForm ===&lt;br /&gt;
&lt;br /&gt;
Permet à partir d'un objet étendant Element de créer un formulaire permettant d'éditer l'ensemble des champs de l'object. La transformation est possible d'apres le type de l'object. Le parcours de la classe permet d'avoir un aperçu des différents type disponibles.&lt;br /&gt;
&lt;br /&gt;
Dispose également de fonctions de validation, et gère l'enregistrement de fichiers a l'aide du composant [[SP:Composant:Upload|Upload]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Framework_V2</id>
		<title>Framework V2</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Framework_V2"/>
				<updated>2010-07-29T08:27:22Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* la classe Element */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Framework V2 = &lt;br /&gt;
&lt;br /&gt;
Le framework V2 et la secodne version du framework développé par Hegyd, issue d'une refonte de la V1 effectuée en grande partie par Emmanuel Gautier.&lt;br /&gt;
&lt;br /&gt;
== Arboresence ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fondements ==&lt;br /&gt;
&lt;br /&gt;
=== la classe Element ===&lt;br /&gt;
&lt;br /&gt;
Est étendu par bon nombre de classes de l'application. Elle permet de gérer automatiquement les fonctions de base d'un objet: enregistrement en base, récupération des valeurs, etc. Utilisée par presque toutes les classes crées pour l'éditeur.&lt;br /&gt;
&lt;br /&gt;
Sa spécificité se trouve dans la définition des variables. Pour chaque objet, il est possible de définir l'ensemble des variables qui le compose, via la donnée membre '''$fields''' de la classe element. Voici un exemple de définition pour un élément: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'nom_variable' =&amp;gt; array(&lt;br /&gt;
    'type'=&amp;gt; 'text', //type pour la conversion en tant qu'élément de formulaire&lt;br /&gt;
    'storage'=&amp;gt; 'none' //indique si le champ a un champ associé en base (meme nom) ou non&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque variable référencée est alors modifiable et accessible via '''$classe-&amp;gt;nom_variable'''.&lt;br /&gt;
&lt;br /&gt;
Pour enregistrer les variables en base, il suffit d'utiliser la fonction '''processAction()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== la classe ElementForm ===&lt;br /&gt;
&lt;br /&gt;
Permet à partir d'un objet étendant Element de créer un formulaire permettant d'éditer l'ensemble des champs de l'object. La transformation est possible d'apres le type de l'object. Le parcours de la classe permet d'avoir un aperçu des différents type disponibles.&lt;br /&gt;
&lt;br /&gt;
Dispose également de fonctions de validation, et gère l'enregistrement de fichiers a l'aide du composant [[SP:Composant:Upload|Upload]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:Upload</id>
		<title>SP:Composant:Upload</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:Upload"/>
				<updated>2010-07-29T08:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;Page créée avec « Category:SP:Composants  = Upload =   Le composant Upload gère l'upload et le stockage des fichiers. La version utilisée est un dérivé du composant upload utilisé pou… »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= Upload = &lt;br /&gt;
&lt;br /&gt;
Le composant Upload gère l'upload et le stockage des fichiers.&lt;br /&gt;
La version utilisée est un dérivé du composant upload utilisé pour le [[Framework_V2|framework V2]].&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''Upload''': &lt;br /&gt;
** ''uploadId'': identifiant&lt;br /&gt;
** ''directory'': repertoire dans lequel se trouve le fichier&lt;br /&gt;
** ''id'': identifiant lié au fichier. Peut faire référence à un identifiant d'une autre table&lt;br /&gt;
** ''field'': champ permettant de définir le type d'upload&lt;br /&gt;
** ''source: nom du fichier&lt;br /&gt;
** ''extension'': extension du fichier&lt;br /&gt;
** ''description'': description du fichier&lt;br /&gt;
** ''size'': taille&lt;br /&gt;
** ''type'': type du fichier: fichier,image,film,audio (voir classe php Upload pour avoir les correspondance pour chaque type)&lt;br /&gt;
** ''infos'': infos du fichier&lt;br /&gt;
** ''ord'': non utilisé&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''imageFotoliaId'': identifiant [[SP:Fotolia|fotolia]]&lt;br /&gt;
&lt;br /&gt;
=== classe ===&lt;br /&gt;
&lt;br /&gt;
classe '''Upload'''.&lt;br /&gt;
&lt;br /&gt;
== Application à l'éditeur ==&lt;br /&gt;
&lt;br /&gt;
=== Champ d'application à l'éditeur ===&lt;br /&gt;
&lt;br /&gt;
* il est possible d'ajouter un fichier/ une image pour un blocObject, selon [[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|les propriétés qui lui sont rattachées]].&lt;br /&gt;
* il est également possible d'ajouter des images dans [[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s|les options de styles]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Framework_V2</id>
		<title>Framework V2</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Framework_V2"/>
				<updated>2010-07-29T07:56:05Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;Page créée avec « = Framework V2 =   Le framework V2 et la secodne version du framework développé par Hegyd, issue d'une refonte de la V1 effectuée en grande partie par Emmanuel Gautier.  =… »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Framework V2 = &lt;br /&gt;
&lt;br /&gt;
Le framework V2 et la secodne version du framework développé par Hegyd, issue d'une refonte de la V1 effectuée en grande partie par Emmanuel Gautier.&lt;br /&gt;
&lt;br /&gt;
== Arboresence ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fondements ==&lt;br /&gt;
&lt;br /&gt;
=== la classe Element ===&lt;br /&gt;
&lt;br /&gt;
La class&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/Cat%C3%A9gorie:Sites_packag%C3%A9s</id>
		<title>Catégorie:Sites packagés</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/Cat%C3%A9gorie:Sites_packag%C3%A9s"/>
				<updated>2010-07-29T07:19:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Sites packagés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attention : « Catégorie:Sites packagés » est référencé ici, mais vous ne disposez pas des autorisations pour y accéder.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-28T13:21:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Comment ajouter un type de blocObject? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* [[SP:Composant:BlocObject#Base_de_donn.C3.A9es_2|enregistrement en base]] du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controleyrs associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php''' en utilisant la syntaxe '''$blocObject-&amp;gt;values-&amp;gt;hasFax''' pour savoir si l'utilisateur a choisi ou non d'afficher le champ fax dans son formulaire.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T13:03:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Templates et controleurs associés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
Chaque propriété devra également être enregistré en base, voir [[SP:Composant:blocObjectValues#Impl.C3.A9mentation|la section d'implémentation propriétés des blocObject]].&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
Si besoin, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:SiteModel|Modele]] choisi. Au lieu de repertoire default, ils devront alors se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T13:03:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Templates et controleurs associés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
Chaque propriété devra également être enregistré en base, voir [[SP:Composant:blocObjectValues#Impl.C3.A9mentation|la section d'implémentation propriétés des blocObject]].&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
Si besoin, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Modele|Modele]] choisi. Au lieu de repertoire default, ils devront alors se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-28T12:51:54Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Exemple */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* enregistrement en base du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controlers associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php''' en utilisant la syntaxe '''$blocObject-&amp;gt;values-&amp;gt;hasFax''' pour savoir si l'utilisateur a choisi ou non d'afficher le champ fax dans son formulaire.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-28T12:48:27Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Comment ajouter un champ a un type de blocObject? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* enregistrement en base du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controlers associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php'''.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-28T12:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Comment ajouter un champ a un type de blocObject? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* enregistrement en base du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controlers associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* ajout du champ dans la classe du type d'object ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* enregistrement de la clé du champ en base ([[SP:Composant:BlocObject#Propri.C3.A9t.C3.A9s|section de manuel associée]])&lt;br /&gt;
* modification du template et controleur associé si besoin ([[SP:Composant:BlocObject#Templates_et_controleurs_associ.C3.A9s|section associée]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php'''.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T12:47:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Propriétés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
Chaque propriété devra également être enregistré en base, voir [[SP:Composant:blocObjectValues#Impl.C3.A9mentation|la section d'implémentation propriétés des blocObject]].&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Model|Modele]] choisi. Au lieu de repertoire default, ils devront se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T12:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Propriétés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
Chaque propriété devra également être enregistré en base, voir [[des SP:Composant:blocObjectValues#Impl.C3.A9mentation|la section d'implémentation propriétés des blocObject]].&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Model|Modele]] choisi. Au lieu de repertoire default, ils devront se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T12:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Propriétés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
Chaque propriété devra également être enregistré en base, voir [[la section d'implémentation des SP:Composant:blocObjectValues#Impl.C3.A9mentation|propriétés des blocObject]].&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Model|Modele]] choisi. Au lieu de repertoire default, ils devront se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValues</id>
		<title>SP:Composant:blocObjectValues</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValues"/>
				<updated>2010-07-28T12:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* base de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= blocObjectValues = &lt;br /&gt;
&lt;br /&gt;
Ce composant recense l'ensemble des champs et les valeurs associées à un [[SP:Composant:BlocObject|blocObject]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObject, un ensemble de fields est défini dans le tableau '''$valuesFields'''. Ces champs et leurs valeurs sont gérés par le composant blocObjectValues.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject ou a une modification, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObject''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjectId'': identifiant&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': blocObject lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''valuesBlocObject'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication ==&lt;br /&gt;
&lt;br /&gt;
le composant blocObjectValues ne représente que les valeurs et le champs associés au blocObject en production.&lt;br /&gt;
&lt;br /&gt;
C'est sur son descendant [[SP:Composant:blocObjectValuesDraft|blocObjectValuesDraft]] qu'est effectué la publication.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T12:44:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Propriétés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable '''$fields''', comme le montre l'exemple de code ci-dessus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Model|Modele]] choisi. Au lieu de repertoire default, ils devront se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:HowTo</id>
		<title>SP:HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:HowTo"/>
				<updated>2010-07-28T12:42:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* How To */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sites packagés]]&lt;br /&gt;
&lt;br /&gt;
= How To = &lt;br /&gt;
&lt;br /&gt;
Cette rubrique est un pense bete réunissant les principales question à paropos de l'application des sites packagés.&lt;br /&gt;
&lt;br /&gt;
===  Comment ajouter un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
* enregistrement en base du nouveau type&lt;br /&gt;
* enregistrement en base des [[SP:Composant:blocObjectValues|nouveaux type de valeurs]] associées à l'object&lt;br /&gt;
* création de sa classe php associée&lt;br /&gt;
* création des éventuels templates et controlers associés&lt;br /&gt;
&lt;br /&gt;
Pour avoir le détail complet de chaque étape, rendez vous dans la section [[SP:Composant:BlocObject#D.C3.A9finition_des_types_de_blocObject|définition d'un blocObject]]&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un champ a un type de blocObject? ===&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
''Je souhaiterais ajouter un nouveau champ qui permettent d'ajouter un champ de formulaire fax dans le type de blocObject &amp;quot;formulaire de contact&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* ajout du champ permettant d'ajouter l'option de fax dans le formulaire de contact, dans la classe php associée '''BlocObjectContact''': &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'hasFax'=&amp;gt; array(&lt;br /&gt;
                        'type'                  =&amp;gt; 'radio',&lt;br /&gt;
                        'label'                 =&amp;gt; 'Fax',&lt;br /&gt;
                        'default'               =&amp;gt; 0, //pour la modification d'un type de blocObject déja existant, il est obligatoire d'ajouter une valeur par défaut, qui sera appliquée pour les blocObject de ce type déja existant&lt;br /&gt;
                        'inline'                =&amp;gt; true,&lt;br /&gt;
                        'options'               =&amp;gt; array(&lt;br /&gt;
                                                                1 =&amp;gt; 'Oui',&lt;br /&gt;
                                                                0 =&amp;gt; 'Non'&lt;br /&gt;
                                                        )&lt;br /&gt;
                        ),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ajout du nouveau champ dans la liste des champs autorisé en base, dans la table '''valuesBlocObjectKey'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO valuesBlocObjectKey(keyName) VALUES('hasFax');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* modification du controleur et du template qui affiche ce type d'objet pour gérer ce nouveau paramètre, ici '''templates/cms/blocObjects/default/contact.php''' et '''controlers/cms/blocObjects/default/contact.php'''.&lt;br /&gt;
* reste a tester et à mettre en production, et c'est parti.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter une propriété éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
* Se rendre dans le fichier de configuration de style correspondant au conteneur associé à la propriété (voir chapitre sur [[SP:Composant:StyleProperties#d.C3.A9finition_des_conteneurs|les conteneurs]])&lt;br /&gt;
* Ajouter la propriété ([[SP:Composant:StyleProperties#Les_propri.C3.A9t.C3.A9s| la configuration de propriétés de style]]).&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafriahcir tous le cache CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
=== Comment modifier une propriété éditable dans la customisation des styles ===&lt;br /&gt;
&lt;br /&gt;
* Regarder ou sont définies les propriétés du conteneur dans le fichier de configuration de styles éditables.&lt;br /&gt;
* Se rendre dans la configuration associée au conteneur et modifier la propriété.&lt;br /&gt;
* Tester&lt;br /&gt;
* Mise en production en prenant soin de rafraichir tous le caches CSS des styles personnalisés (envoyer &amp;quot;y&amp;quot; lors de la demande de rafraichissement de cache lors de la mise en production).&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': Il faut que les modifications n'entravent pas les styles des sites qui fonctionnaient avec la propriétés avant modification. Par exemple, dans le cas de changement d'unité,il faudra modifier les valeurs de la propriété sur les sites existant afin que l'apparence de leur site ne soit pas modifiée.&lt;br /&gt;
&lt;br /&gt;
=== Comment ajouter un élément éditable dans la customisation des styles? ===&lt;br /&gt;
&lt;br /&gt;
Vous devez d'abord cibler le path css de l'élément. Pour cela, ajouter une classe bien identifiable à l'élément dans le code HTML.&lt;br /&gt;
Ensuite suivez le processus [[SP:Composant:StyleProperties#Cr.C3.A9ation_des_conteneurs|de configuration concernant les conteneurs]].&lt;br /&gt;
&lt;br /&gt;
==== Exemple ====&lt;br /&gt;
&lt;br /&gt;
Ajout d'un style permettant de modifier la couleur du texte &amp;quot;Note : tous les champs sont obligatoires.&amp;quot; dans les formulaire.&lt;br /&gt;
&lt;br /&gt;
1.check dans la configuration générale si le conteneur permettatn de gérer les styles du formulaire existe: Non&lt;br /&gt;
2.création du conteneur dans la configuration générale, en ajtant le sous tableau: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        'formContact' =&amp;gt; array(&lt;br /&gt;
                'blocId'=&amp;gt;Bloc::TYPE_CONTENT,&lt;br /&gt;
                'blocObjectId'=&amp;gt;BlocObject::TYPE_IMAGE_GALLERY,&lt;br /&gt;
                'type'=&amp;gt;StyleProperties::TYPE_FONT,&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formContact'), //chemin css du path associé au formulaire de contact dans le code HTML&lt;br /&gt;
                'label'=&amp;gt;'Formulaire'&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dans le tableau '''$stylePropertiesContainers'''.&lt;br /&gt;
3. On a besoin que de modifier la couleur du texte, on ne va pas faire appel a des conteneurs associés pour former la liste des propriétés éditable pour cet élément. On va créer un fichier '''formContact.php''' (meme nom que la clé dans le tableau de config générale) dans le repertoire des configurations '''conf/styleProperties''', qui contiendra la propriété que l'on peut éditer. Voici le contenu: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$styles = array(&lt;br /&gt;
        'fontColor' =&amp;gt; array (&lt;br /&gt;
                'type' =&amp;gt; 'colorpicker',&lt;br /&gt;
                'label' =&amp;gt; 'couleur de la &amp;quot;note&amp;quot;',&lt;br /&gt;
                'relatedColorNumber' =&amp;gt; null,&lt;br /&gt;
                'propertyToChange'=&amp;gt;'color', //on va pouvoir changer la propriété css de l'élement&lt;br /&gt;
                'targetElements'=&amp;gt; array('.formRequired')//on affine le chemin css pour ne pas modifier la couleur de fond de tous les texte du bloc formulaire&lt;br /&gt;
        )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si la propriété contient '''color''' dans sa clé , alors elle sera considéré comme une propriété agissant sur la couleur (nécessaire pour que les palettes de couleurs agissent dessus).&lt;br /&gt;
&lt;br /&gt;
C'est tout, il ne reste qu'a rafraichir la page de l'éditeur et tester.&lt;br /&gt;
&lt;br /&gt;
=== Comment rajouter l'inclusion d'un fichier JS/CSS? ===&lt;br /&gt;
&lt;br /&gt;
Il suffit d'ajouter le fichier dans le [[SP:Composant:IncludeHandler#Configuration|fichier de configuration]] du composant d'inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Comment sont gérés les coins arrondis? ===&lt;br /&gt;
&lt;br /&gt;
La gestion ds coins arrondis est englobée dans une [[SP:Composant:StyleProperties#La_sp.C3.A9cificit.C3.A9_MasterProperty|masterProperty]] liée au background de blocs. En effet, pour une comptabilité multi navigateurs, c'est une image en background qui génère les arrondis. Cette meme image permet également de gérer le remplissage du background (texture, couleur ou photo). C'est pourquoi la gestion des coins arrondis est associée a la gestion du background d'un élément en général.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObject</id>
		<title>SP:Composant:BlocObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObject"/>
				<updated>2010-07-28T08:57:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Templates et controleurs associés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObject = &lt;br /&gt;
&lt;br /&gt;
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].&lt;br /&gt;
&lt;br /&gt;
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''&lt;br /&gt;
&lt;br /&gt;
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:&lt;br /&gt;
&lt;br /&gt;
* ''blocObjectId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObject''' permet de gérer les blocObjects.&lt;br /&gt;
&lt;br /&gt;
== Définition des types de blocObject ==&lt;br /&gt;
&lt;br /&gt;
Les différents type de blocsObject sont définis a plusieurs endroits: &lt;br /&gt;
&lt;br /&gt;
* en base dans la table '''typeBlocObject'''&lt;br /&gt;
* une classe spécifique représente chacun d'entre eux dans le repertoire '''lib/model/EasySite/blocObjects'''&lt;br /&gt;
* des templates et controleurs leurs sont associés dans '''templates/cms/blocObjects''' et '''controlers/cms/blocObjects'''&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: &lt;br /&gt;
&lt;br /&gt;
* ''typeBlocObjectSpaceName'': espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.&lt;br /&gt;
* ''typeBlocObjectName'': nom du blocObject, sera celui affiché a l'utilisateur&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique (le reste).&lt;br /&gt;
* ''interactiveEdit'': flag indiquant si le blocObject pourra être modifié de façon directe par l'utilisateur sur l'interface d'édition de contenu (apparition des options d'édition au survol du bloc).&lt;br /&gt;
* ''isEditable'': flag indiquant si le blocObject est éditable&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject pourra être déplacé au sein du contenu.&lt;br /&gt;
* ''isDeleteable'': flag indiquant si un blocObject pourra être supprimé par l'utilisateur&lt;br /&gt;
* ''activated'': flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).&lt;br /&gt;
* ''hasValues'': flag qui indique si le blocObject aura des valeurs associées (texte pour un paragraphe, fichier pour une image...), ou non (affichage de la date, d'une ligne de séparation).&lt;br /&gt;
* ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout.&lt;br /&gt;
* ''moduleId'': Dans le cadre '''d'association à un module''', contient l'identifiant du module associé. L'ajout du BlocObject ne sera possible seulement si le module est activé pour le site.&lt;br /&gt;
&lt;br /&gt;
=== Classe associée ===&lt;br /&gt;
&lt;br /&gt;
Chaque type de bloc a une classe associée.&lt;br /&gt;
Elle doit se trouver dans le répertoire '''lib/model/EasySite/blocObjects''', et se nommer '''BlocObject{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
Concernant la structure, chaque classe devra définir les différents champs associés a chaque blocObject, ainsi que les fonctions propre a l'objet si nécessaire.&lt;br /&gt;
&lt;br /&gt;
La classe abstraite ''AbstractBlocObjectText'' permet a la classe de bénéficier des méthodes d'exploitation liés aux types utilisant des propriétés texte.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple type de structure : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject&lt;br /&gt;
{&lt;br /&gt;
        private $uploadObjects = array();&lt;br /&gt;
        private $uploadObjectsLoaded = false;&lt;br /&gt;
&lt;br /&gt;
        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.&lt;br /&gt;
        public static $ValueFields = array(&lt;br /&gt;
                'uploadFileId' =&amp;gt; array(&lt;br /&gt;
                                        'type'          =&amp;gt; 'file',&lt;br /&gt;
                                        'value'         =&amp;gt; '',&lt;br /&gt;
                                        'required'      =&amp;gt; true,&lt;br /&gt;
                                        'label'         =&amp;gt; 'fichier (max 10Mo)',&lt;br /&gt;
                                        'maxsize'   =&amp;gt; 10485760, // 10Mo &lt;br /&gt;
                                        'checklist'     =&amp;gt; array('ext' =&amp;gt; array('xls', 'doc', 'pdf')),&lt;br /&gt;
                                        'options'       =&amp;gt; array(&lt;br /&gt;
                                                                        'inform_preview' =&amp;gt; false,&lt;br /&gt;
'nb_files'=&amp;gt;1                                                                                                                                                        &lt;br /&gt;
                                                                        )                                                                                                                                                                    &lt;br /&gt;
                                        )                                                                                                                                                                                                    &lt;br /&gt;
                );                                                                                                                                                                                                                           &lt;br /&gt;
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      &lt;br /&gt;
&lt;br /&gt;
        public function getUploadObjects($field=null)&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                if($field)&lt;br /&gt;
                        return $this-&amp;gt;uploadObjects[$field];&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        foreach(static::$ValueFields as $key=&amp;gt;$field)&lt;br /&gt;
                        {&lt;br /&gt;
                                if($field['type'] == 'file')&lt;br /&gt;
                                {&lt;br /&gt;
                                        $types[] = $key;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        if(count($types)&amp;gt;1)&lt;br /&gt;
                                trigger_error(&amp;quot;There is more than one field containing upload File, please specify field name&amp;quot;);&lt;br /&gt;
                        else if(array_key_exists($types[0],$this-&amp;gt;uploadObjects))&lt;br /&gt;
                                return $this-&amp;gt;uploadObjects[$types[0]];&lt;br /&gt;
                        else&lt;br /&gt;
                                return null;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function hasUploadObject()&lt;br /&gt;
        {&lt;br /&gt;
                $this-&amp;gt;loadUploadObjects();&lt;br /&gt;
                return count($this-&amp;gt;uploadObjects)&amp;gt;0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau '''$ValueFields''' référence  [[SP:Composant:blocObjectValues|la liste des champs]] qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).&lt;br /&gt;
&lt;br /&gt;
=== Propriétés ===&lt;br /&gt;
&lt;br /&gt;
Les propriétés d'un type de bloc Object (texte, fichier...) sont référencés au sein de sa classe, dans la variable $fields, comme le montre l'exemple de code ci-dessus. Aucune autre déclaration n'est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Un type de blocObject n'es pas obligé d'avoir de propriétés. Mais dans ce cas, il faut le spécifier lors de sa définition en base.&lt;br /&gt;
&lt;br /&gt;
=== Templates et controleurs associés ===&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a au moins un controleur et un template associé par défaut, qui seront appelés lors de son affichage sur le site du client.&lt;br /&gt;
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.&lt;br /&gt;
&lt;br /&gt;
De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du [[SP:Composant:Model|Modele]] choisi. Au lieu de repertoire default, ils devront se situer dans le repertoire correspondant a l'espace de nom du modele souhaité.&lt;br /&gt;
'''Note''': il n'est pas nécessaire de redefinir le controleur ET le template. Si seulement le template est redefini pour un modele particulier, on lui appliquera le controleur par défaut, et inversement.&lt;br /&gt;
&lt;br /&gt;
==== Le controleur ====&lt;br /&gt;
&lt;br /&gt;
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.&lt;br /&gt;
Cet objet n'est pas un '''BlocObject''', mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La variable '''$blocObject''' peut être utilisée pour récupérer de facon directe les propriété d'un objet: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $blocObject-&amp;gt;maPropriete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.&lt;br /&gt;
&lt;br /&gt;
==== Le template ====&lt;br /&gt;
&lt;br /&gt;
Le template hérite de toutes les variables définies dans le controleur.&lt;br /&gt;
&lt;br /&gt;
'''ATTENTION''': si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le [[SP:Processus:Inclusion_javascript|systeme de délégation d'appel javascript]] pour appeler vos fonctions (meme regles pour tous les templates).&lt;br /&gt;
&lt;br /&gt;
== Notion de Draft ==&lt;br /&gt;
&lt;br /&gt;
Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé [[SP:Composant::BlocObjectDraft|BlocObjectDraft]]. Cette image est crée a chaque fois qu'un utilisateur crée un nouveu BlocObject, ou lorsqu'il en modifie un. Le Draft disparait lorsque l'utilisateur publie le contenu de son site. Cette technique permet de mettre en place une technique de brouillon, et un système d'annulation de modification.&lt;br /&gt;
&lt;br /&gt;
Ainsi on obtient: &lt;br /&gt;
*'''blocObject''': constitue la version de production du contenu&lt;br /&gt;
*'''blocObjectDraft''': constitue la version brouillon du contenu&lt;br /&gt;
&lt;br /&gt;
== Liaison des blocObjects ==&lt;br /&gt;
&lt;br /&gt;
Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie [[SP:Processus:Gestion_de_contenu|gestion de contenu]] pour en savoir plus.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le [[SP:Composant:BlocObjectDraft|blocObjectDraft]] associé au blocObject s'il existe est [[SP:Composant:BlocObjectDraft#Pubilication|publié]] et le blocObject existant.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T13:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
La publication des champs et valeurs d'un blocObject et étroitement liée au blocObjectDraft. C'est via [[SP:Composant:BlocObjectDraft#Publication|la fonction de publication]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
Elle fait appel a la fonction '''loadFromDraft()''' de la classe '''blocObjectValues''' qui permet d'importer un ensemble de valeurs d'un blocObjectDraft vers un blocObject.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'annulation des champs et valeurs d'un blocObject et étroitement liée au blocObject. C'est via [[SP:Composant:BlocObjectDraft#Annulation|la fonction d'annulation]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
Elle fait appel à la fonction '''destroy()''' de la classe parente '''blocObjectValues'''.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T13:26:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication / Annulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
La publication des champs et valeurs d'un blocObject et étroitement liée au blocObjectDraft. C'est via [[SP:Composant:BlocObjectDraft#Publication|la fonction de publication]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
Elle fait appel a la fonction '''loadFromDraft()''' de la classe '''blocObjectValues''' qui permet d'importer un ensemble de valeurs d'un blocObjectDraft vers un blocObject.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'annulation des champs et valeurs d'un blocObject et étroitement liée au blocObject. C'est via [[SP:Composant:BlocObjectDraft#Annulation|la fonction d'annulation]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
Elle fait appel à la fonction '''destroy()''' de la classe parente '''blocObjectValues'''.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T13:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
La publication des champs et valeurs d'un blocObject et étroitement liée au blocObjectDraft. C'est via [[SP:Composant:BlocObjectDraft#Publication|la fonction de publication]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'annulation des champs et valeurs d'un blocObject et étroitement liée au blocObject. C'est via [[SP:Composant:BlocObject#Annulation|la fonction d'annulation]] du blocObject qu'est réalisé celle de ses valeurs.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T13:15:21Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication / Annulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
La publication des champs et valeurs d'un blocObject et étroitement liée au blocObject. C'est via [[SP:Composant:BlocObject#Publication|la fonction de publication]] du blocObject qu'est réalisé celle de ses valeurs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'annulation des champs et valeurs d'un blocObject et étroitement liée au blocObject. C'est via [[SP:Composant:BlocObject#Annulation|la fonction d'annulation]] du blocObject qu'est réalisé celle de ses valeurs.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:33:22Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication / Annulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:24:50Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* blocObjectValuesDraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:24:26Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
Classe: '''blocObjectDraftValues'''.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:23:56Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* blocObjectValuesDraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]], représente sa forme éditable par l'utilisateur, son mode &amp;quot;brouillon&amp;quot;.&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]], lui meme dérivé du composant [[SP:Composant:BlocObjectDraft|BlocObjectDraft]].&lt;br /&gt;
&lt;br /&gt;
Pour chaque type de blocObjectDraft, un ensemble de fields est défini dans le tableau '''$valuesFields''' de la classe associé au blocObject. Ces champs et leurs valeurs sont gérés ici.&lt;br /&gt;
&lt;br /&gt;
== Implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== base de données ===&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectKey''': contient la liste des type de valeurs. A chaque création d'un nouveau blocObject, les champs qui le compose devront être référencé dans cette table.&lt;br /&gt;
&lt;br /&gt;
** ''keyId'': identifiant&lt;br /&gt;
** ''keyName'': nom du type de la valeur&lt;br /&gt;
&lt;br /&gt;
* table '''valuesBlocObjectDraft''': &lt;br /&gt;
&lt;br /&gt;
** ''valuesBlocObjecDrafttId'': identifiant&lt;br /&gt;
** ''valuesBlocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, on indique ici l'identifiant de la valeur de production&lt;br /&gt;
** ''keyId'': type de valeur (voir types de valeurs)&lt;br /&gt;
** ''blocObjectId'': dans le cas ou la valeur est la version de brouillon d'une valeur existante, référence ici le blocObject associé&lt;br /&gt;
** ''blocObjectDraftId'': blocObjectDraft lié&lt;br /&gt;
** ''value'': valeur associée&lt;br /&gt;
** ''table'': table dans laquelle se trouve la valeur (non utilisé). Le chap précédent valeur contiendrait alors l'identifiant de la vvaleur pour la table. Utile pour les valeurs complexes, qui ne se résument pas à une chaine de caractère.&lt;br /&gt;
** ''utsCreate'': date de création&lt;br /&gt;
** ''utsUpdate'': date de modification&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:16:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* blocObjectValuesDraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]].&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:BlocObjectDraft|blocObjectDraft]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:15:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* blocObjectValuesDraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:Composant:blocObjectValues|blocObjectValues]].&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:blocObjectDraft|blocObjectDraft]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft</id>
		<title>SP:Composant:blocObjectValuesDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:blocObjectValuesDraft"/>
				<updated>2010-07-27T09:14:08Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;Page créée avec « = blocObjectValuesDraft =  est un dérivé du composant blocObjectValues. Gère les champs et les valeurs associés aux [[SP:Composant:blocObjectDraft… »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= blocObjectValuesDraft =&lt;br /&gt;
&lt;br /&gt;
est un dérivé du composant [[SP:BlocObjectValues|blocObjectValues]].&lt;br /&gt;
Gère les champs et les valeurs associés aux [[SP:Composant:blocObjectDraft|blocObjectDraft]].&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft</id>
		<title>SP:Composant:BlocObjectDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft"/>
				<updated>2010-07-27T09:04:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Base de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObjectDraft = &lt;br /&gt;
&lt;br /&gt;
Un BlocObjectDraft est la version brouillon d'un [[SP:Composant:BlocObject|BlocObject]] ([[SP:Définitions|voir le process de brouillon/publication]]).&lt;br /&gt;
Il peut avoir des [[SP:Composant:BlocObjectValuesDraft|valeurs]] associées.&lt;br /&gt;
&lt;br /&gt;
A l'inverse du [[SP:Composant:BlocObject|BlocObject]], seul un BlocObjectDraft peut être transformé en formulaire, pour modifier ses [[SP:Composant:BlocObjectValuesDraft|valeurs]].&lt;br /&gt;
&lt;br /&gt;
Et seul le blocObjectDraft peut être publié. Un blocObject est la version publié d'un blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Table '''BlocObjectDraftId''': &lt;br /&gt;
&lt;br /&gt;
* ''blocObjectDraftId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValuesDraft|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
* ''status'': indique si le blocObjectDraft est en mode édition ou suppression (dans le cas d'une suppression, la publication supprimera l'objet).&lt;br /&gt;
* ''blocObjectId'': dans le cas ou l'object dérive d'un blocObject (cas de modification d'un blocObject publié dans l'éditeur par exemple, [[SP:Définitions|voir le processus de publication]]).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObjectDraft''' permet de gérer les blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le blocObjectDraft est transformé en blocObject: si le draft est lié a un blocObject existant, alors on remplace les infos du blocObject existant par celles du draft. Si aucun blocObject n'est lié, alors on en crée un nouveau.&lt;br /&gt;
On [[SP:Composant:blocObjectValuesDraft#Publication|publie ensuite les valeurs des champs associés]] au blocObjectDraft.&lt;br /&gt;
Le blocObjectDraft est ensuite détruit.&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''publish()''' de la classe de l'objet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Le blocObjectdraft est détruit ainsi que [[SP:Composant:blocObjectValuesDraft#Annulation|ses valeurs]].&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''destroy()''' de la classe de l'objet.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft</id>
		<title>SP:Composant:BlocObjectDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft"/>
				<updated>2010-07-27T09:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* Publication / Annulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObjectDraft = &lt;br /&gt;
&lt;br /&gt;
Un BlocObjectDraft est la version brouillon d'un [[SP:Composant:BlocObject|BlocObject]] ([[SP:Définitions|voir le process de brouillon/publication]]).&lt;br /&gt;
Il peut avoir des [[SP:Composant:BlocObjectValuesDraft|valeurs]] associées.&lt;br /&gt;
&lt;br /&gt;
A l'inverse du [[SP:Composant:BlocObject|BlocObject]], seul un BlocObjectDraft peut être transformé en formulaire, pour modifier ses [[SP:Composant:BlocObjectValuesDraft|valeurs]].&lt;br /&gt;
&lt;br /&gt;
Et seul le blocObjectDraft peut être publié. Un blocObject est la version publié d'un blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Table '''BlocObjectDraftId''': &lt;br /&gt;
&lt;br /&gt;
* ''blocObjectDraftId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
* ''status'': indique si le blocObjectDraft est en mode édition ou suppression (dans le cas d'une suppression, la publication supprimera l'objet).&lt;br /&gt;
* ''blocObjectId'': dans le cas ou l'object dérive d'un blocObject (cas de modification d'un blocObject publié dans l'éditeur par exemple, [[SP:Définitions|voir le processus de publication]]).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObjectDraft''' permet de gérer les blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le blocObjectDraft est transformé en blocObject: si le draft est lié a un blocObject existant, alors on remplace les infos du blocObject existant par celles du draft. Si aucun blocObject n'est lié, alors on en crée un nouveau.&lt;br /&gt;
On [[SP:Composant:blocObjectValuesDraft#Publication|publie ensuite les valeurs des champs associés]] au blocObjectDraft.&lt;br /&gt;
Le blocObjectDraft est ensuite détruit.&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''publish()''' de la classe de l'objet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Le blocObjectdraft est détruit ainsi que [[SP:Composant:blocObjectValuesDraft#Annulation|ses valeurs]].&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''destroy()''' de la classe de l'objet.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	<entry>
		<id>https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft</id>
		<title>SP:Composant:BlocObjectDraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.hegyd.com/index.php/SP:Composant:BlocObjectDraft"/>
				<updated>2010-07-27T09:03:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sebd&amp;nbsp;:&amp;#32;/* BlocObjectDraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SP:Composants]]&lt;br /&gt;
&lt;br /&gt;
= BlocObjectDraft = &lt;br /&gt;
&lt;br /&gt;
Un BlocObjectDraft est la version brouillon d'un [[SP:Composant:BlocObject|BlocObject]] ([[SP:Définitions|voir le process de brouillon/publication]]).&lt;br /&gt;
Il peut avoir des [[SP:Composant:BlocObjectValuesDraft|valeurs]] associées.&lt;br /&gt;
&lt;br /&gt;
A l'inverse du [[SP:Composant:BlocObject|BlocObject]], seul un BlocObjectDraft peut être transformé en formulaire, pour modifier ses [[SP:Composant:BlocObjectValuesDraft|valeurs]].&lt;br /&gt;
&lt;br /&gt;
Et seul le blocObjectDraft peut être publié. Un blocObject est la version publié d'un blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Base de données ===&lt;br /&gt;
&lt;br /&gt;
Table '''BlocObjectDraftId''': &lt;br /&gt;
&lt;br /&gt;
* ''blocObjectDraftId'': identifiant&lt;br /&gt;
* ''pageSiteClientId'': identifiant de page&lt;br /&gt;
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].&lt;br /&gt;
* ''customPosition'': flag indiquant si l'object sera positionné a la main dans le code (les métas, directement intégrées dans le header), ou de façon automatique par le biais de sa position et du bloc auquel il appartient.&lt;br /&gt;
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').&lt;br /&gt;
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.&lt;br /&gt;
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)&lt;br /&gt;
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].&lt;br /&gt;
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.&lt;br /&gt;
* ''utsCreate'': date de création&lt;br /&gt;
* ''utsUpdate'': date de modification&lt;br /&gt;
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).&lt;br /&gt;
* ''status'': indique si le blocObjectDraft est en mode édition ou suppression (dans le cas d'une suppression, la publication supprimera l'objet).&lt;br /&gt;
* ''blocObjectId'': dans le cas ou l'object dérive d'un blocObject (cas de modification d'un blocObject publié dans l'éditeur par exemple, [[SP:Définitions|voir le processus de publication]]).&lt;br /&gt;
&lt;br /&gt;
=== Classe ===&lt;br /&gt;
&lt;br /&gt;
La classe '''BlocObjectDraft''' permet de gérer les blocObjectDraft.&lt;br /&gt;
&lt;br /&gt;
== Publication / Annulation ==&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
Lors de la publication, le blocObjectDraft est transformé en blocObject: si le draft est lié a un blocObject existant, alors on remplace les infos du blocObject existant par celles du draft. Si aucun blocObject n'est lié, alors on en crée un nouveau.&lt;br /&gt;
On [[SP:Composant:blocObjectDraftValues#Publication|publie ensuite les valeurs des champs associés]] au blocObjectDraft.&lt;br /&gt;
Le blocObjectDraft est ensuite détruit.&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''publish()''' de la classe de l'objet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Annulation ===&lt;br /&gt;
&lt;br /&gt;
Le blocObjectdraft est détruit ainsi que [[SP:Composant:BlocObjectDraftValues#Annulation|ses valeurs]].&lt;br /&gt;
&lt;br /&gt;
Voir la méthode '''destroy()''' de la classe de l'objet.&lt;/div&gt;</summary>
		<author><name>Sebd</name></author>	</entry>

	</feed>