SP:Composant:BlocObject

De Hegyd Doc.

(Différences entre les versions)
(BlocObject)
(Templates et controleurs associés)
 
(20 versions intermédiaires masquées)
Ligne 3 : Ligne 3 :
= BlocObject =  
= BlocObject =  
-
Un bloc objet représente un contenu d'une page: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.
+
Un blocObject est un élément de contenu appartenant à une [[SP:Composant:PageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].
 +
 
 +
''Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.''
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.
Il est lié a un ensemble de [[SP:Composant:blocObjectValues|valeurs]] ''Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe...''.
== Implementation ==
== Implementation ==
 +
 +
=== base de données ===
 +
 +
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:
 +
 +
* ''blocObjectId'': identifiant
 +
* ''pageSiteClientId'': identifiant de page
 +
* ''position'': position du blocObject parmi ceux se trouvant a l'intérieur du même [[SP:Composant:Bloc|bloc]].
 +
* ''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.
 +
* ''typeBlocObjectId'': type du blocObject (référence a l'identifiant de la table '''typeBlocObjectId''').
 +
* ''typeBlocId'': bloc dans lequel se trouve le blocObject.
 +
* ''interactiveEdit'': autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)
 +
* ''isEditable'': flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)
 +
* ''isDraggable'': flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)
 +
* ''isDeleteable'': flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)
 +
* ''activated'': flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)
 +
* ''hasValues'': indique si le blocObject peut avoir des [[SP:Composant:blocObjectValues|valeurs associées]].
 +
* ''predefinedContentId'': identifiant du [[SP:Composant:PredefinedContent|contenu prédéfini]] associé au blocObject, si c'est le cas.
 +
* ''utsCreate'': date de création
 +
* ''utsUpdate'': date de modification
 +
* ''utsDelete'': date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).
=== Classe ===
=== Classe ===
Ligne 100 : Ligne 123 :
}
}
</pre>
</pre>
 +
 +
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...).
=== Propriétés ===
=== Propriétés ===
-
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.
+
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.  
 +
 
 +
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]].
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.
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.
Ligne 112 : Ligne 139 :
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.
Il doivent se trouver dans les répertoires '''templates/cms/blocObjects/default''' et '''controlers/cms/blocObjects/default''', et porter le nom '''{typeBlocObjectSpaceName}.php'''.
-
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é.
+
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é.
'''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.
'''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.
Ligne 131 : Ligne 158 :
Le template hérite de toutes les variables définies dans le controleur.
Le template hérite de toutes les variables définies dans le controleur.
 +
 +
'''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).
== Notion de Draft ==
== Notion de Draft ==
Ligne 139 : Ligne 168 :
*'''blocObject''': constitue la version de production du contenu
*'''blocObject''': constitue la version de production du contenu
*'''blocObjectDraft''': constitue la version brouillon du contenu
*'''blocObjectDraft''': constitue la version brouillon du contenu
-
 
-
== Définition des blocObject ==
 
-
 
-
Un blocObject est un élément de contenu appartenant à une [[Sp:Composant:pageSiteClient|page]] ou a un [[SP:Composant:PredefinedContent|contenu prédéfini]].
 
-
 
-
=== base de données ===
 
-
 
-
La table '''blocObject''' permet de définir un blocObject. Voici un descriptif de ses champs:
 
-
 
-
 
-
===classe ===
 
-
 
-
Les blocObjects sont gérés par la classe '''BlocObject'''.
 
== Liaison des blocObjects ==
== Liaison des blocObjects ==
Ligne 161 : Ligne 177 :
=== Publication ===
=== Publication ===
-
Lors de la publication, le Draft associé au blocObject est transformé en blocObject et remplace le blocObject existant. Le Draft est ensuite détruit.
+
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.
=== Annulation ===
=== Annulation ===
-
Lors de l'annulation, le Draft associé au blocObject est détruit.
+
Lors de l'annulation, le [[SP:Composant:BlocObjectDraft|BlocObjectDraft]] associé au blocObject est détruit.

Version actuelle en date du 28 juillet 2010 à 13:03


Sommaire

[modifier] BlocObject

Un blocObject est un élément de contenu appartenant à une page ou a un contenu prédéfini.

Exemples de blocObject: paragraphe, image, gallerie d'image, et tout type de contenu que l'utilisateur peut ajouter a ses pages.

Il est lié a un ensemble de valeurs Exemple: URL de l'image pour un blocObject image , texte pour un paragraphe....

[modifier] Implementation

[modifier] base de données

La table blocObject permet de définir un blocObject. Voici un descriptif de ses champs:

  • blocObjectId: identifiant
  • pageSiteClientId: identifiant de page
  • position: position du blocObject parmi ceux se trouvant a l'intérieur du même bloc.
  • 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.
  • typeBlocObjectId: type du blocObject (référence a l'identifiant de la table typeBlocObjectId).
  • typeBlocId: bloc dans lequel se trouve le blocObject.
  • interactiveEdit: autorise la modification au passage sur l'élément dans l'interface (reprend par défaut la valeur du type de blocObject associé)
  • isEditable: flag indiquant si l'object est éditable par l'utilisateur (reprend par défaut la valeur du type de blocObject associé)
  • isDraggable: flag indiquant si le blocObject est déplacable opar l'utilisateur (reprend par défaut la valeur du type de blocObject associé)
  • isDeleteable: flag indiquant si le blocObject peut être supprimé par l'utlisateur (reprend par défaut la valeur du type de blocObject associé)
  • activated: flag indiquant si le blocObject est activé (visible pour l'utilisateur) (reprend par défaut la valeur du type de blocObject associé)
  • hasValues: indique si le blocObject peut avoir des valeurs associées.
  • predefinedContentId: identifiant du contenu prédéfini associé au blocObject, si c'est le cas.
  • utsCreate: date de création
  • utsUpdate: date de modification
  • utsDelete: date de suppression (non utilisé, lorsqu'un blocObject est supprimé, sa ligne en base l'est également).

[modifier] Classe

La classe BlocObject permet de gérer les blocObjects.

[modifier] Définition des types de blocObject

Les différents type de blocsObject sont définis a plusieurs endroits:

  • en base dans la table typeBlocObject
  • une classe spécifique représente chacun d'entre eux dans le repertoire lib/model/EasySite/blocObjects
  • des templates et controleurs leurs sont associés dans templates/cms/blocObjects et controlers/cms/blocObjects

[modifier] Base de données

Chaque type de blocObject doit être défini dans la table typeBlocObject. Voici la liste des champs de cette table et leur signification:

  • typeBlocObjectSpaceName: espace de nom de l'objet, sera utilisé pour relier un type de blocObject aux templates/controleurs le concernant.
  • typeBlocObjectName: nom du blocObject, sera celui affiché a l'utilisateur
  • 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).
  • 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).
  • isEditable: flag indiquant si le blocObject est éditable
  • isDraggable: flag indiquant si le blocObject pourra être déplacé au sein du contenu.
  • isDeleteable: flag indiquant si un blocObject pourra être supprimé par l'utilisateur
  • activated: flag qui indique si le blocObject est activé (visible dans la console d'ajout de l'utilisateur sur l'éditeur).
  • 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).
  • typeBlocOrder: ordre d'apparition des bloc dans la console d'ajout.
  • 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.

[modifier] Classe associée

Chaque type de bloc a une classe associée. Elle doit se trouver dans le répertoire lib/model/EasySite/blocObjects, et se nommer BlocObject{typeBlocObjectSpaceName}.php. 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.

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.

Voici un exemple type de structure :

class BlocObjectDownload extends AbstractBlocObjectText//to have functionnality of text blocObject
{
        private $uploadObjects = array();
        private $uploadObjectsLoaded = false;

        //types de champs utilisé par le bloc. La structure pour le definir utilise celle de la classe coeur Element.
        public static $ValueFields = array(
                'uploadFileId' => array(
                                        'type'          => 'file',
                                        'value'         => '',
                                        'required'      => true,
                                        'label'         => 'fichier (max 10Mo)',
                                        'maxsize'   => 10485760, // 10Mo 
                                        'checklist'     => array('ext' => array('xls', 'doc', 'pdf')),
                                        'options'       => array(
                                                                        'inform_preview' => false,
'nb_files'=>1                                                                                                                                                        
                                                                        )                                                                                                                                                                    
                                        )                                                                                                                                                                                                    
                );                                                                                                                                                                                                                           
                                                                                                                                                                                                                       //fonctions publiques complémentaires                      

        public function getUploadObjects($field=null)
        {
                $this->loadUploadObjects();
                if($field)
                        return $this->uploadObjects[$field];
                else
                {
                        foreach(static::$ValueFields as $key=>$field)
                        {
                                if($field['type'] == 'file')
                                {
                                        $types[] = $key;
                                }
                        }
                        if(count($types)>1)
                                trigger_error("There is more than one field containing upload File, please specify field name");
                        else if(array_key_exists($types[0],$this->uploadObjects))
                                return $this->uploadObjects[$types[0]];
                        else
                                return null;
                }
        }

        public function hasUploadObject()
        {
                $this->loadUploadObjects();
                return count($this->uploadObjects)>0;
        }
}

Le tableau $ValueFields référence la liste des champs qui permettront à l'utilisateur de personnaliser le blocObject (url d'image, texte...).

[modifier] Propriétés

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.

Chaque propriété devra également être enregistré en base, voir la section d'implémentation propriétés des blocObject.

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.

[modifier] Templates et controleurs associés

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. Il doivent se trouver dans les répertoires templates/cms/blocObjects/default et controlers/cms/blocObjects/default, et porter le nom {typeBlocObjectSpaceName}.php.

Si besoin, de nouveaux templates/controleurs pourront être utilisé en fonction du Modele choisi. Au lieu de repertoire default, ils devront alors se situer dans le repertoire correspondant a l'espace de nom du modele souhaité. 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.

[modifier] Le controleur

Le controleur hérite de la variable $blocObject qui contient l'objet qui demande à être affiché. Cet objet n'est pas un BlocObject, mais un objet correspondant à son type (ex: BlocObjectImage,BLocObjectText...)


La variable $blocObject peut être utilisée pour récupérer de facon directe les propriété d'un objet:

echo $blocObject->maPropriete;

Ou pour toute méthode qui serait défini dans la classe de l'objet lui meme.

[modifier] Le template

Le template hérite de toutes les variables définies dans le controleur.

ATTENTION: si vous utilisez des fonctions javascript définis dans des librairies inclues a part, vous devez utiliser le systeme de délégation d'appel javascript pour appeler vos fonctions (meme regles pour tous les templates).

[modifier] Notion de Draft

Un blocObject dispose d'une image de lui meme, utilisé par l'éditeur, appelé 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.

Ainsi on obtient:

  • blocObject: constitue la version de production du contenu
  • blocObjectDraft: constitue la version brouillon du contenu

[modifier] Liaison des blocObjects

Chaque blocObject a pour but de définir une partie de contenu d'une page. Voir la partie gestion de contenu pour en savoir plus.

[modifier] Publication / Annulation

[modifier] Publication

Lors de la publication, le blocObjectDraft associé au blocObject s'il existe est publié et le blocObject existant.

[modifier] Annulation

Lors de l'annulation, le BlocObjectDraft associé au blocObject est détruit.