SP:Composant:BlocObject

De Hegyd Doc.


Sommaire

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.

Implementation

Classe

La classe BlocObject permet de gérer les blocObjects.

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

Définition en base

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.

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;
        }
}

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.

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.

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.

De plus, de nouveaux templates/controleurs pourront être utilisé en fonction du Modele choisi. Au lieu de repertoire default, ils devront 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.

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.

Le template

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

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 versino de production du contenu
  • blocObjectDraft: constitue la version brouillon du contenu

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.

Publication / Annulation

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.

Annulation

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