SP:Composant:BlocObject

De Hegyd Doc.

(Différences entre les versions)
(Templates et controleurs associés)
(Templates et controleurs associés)
Ligne 99 : Ligne 99 :
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.
Le controleur hérite de la variable '''$blocObject''' qui contient l'objet qui demande à être affiché.
 +
 +
==== Le template ====
 +
 +
Le template hérite de toutes les variables définies dans le controleur.

Version du 5 juillet 2010 à 06:51

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.

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.

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.

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

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é.

Le template

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