SP:Composant:BlocObject
De Hegyd Doc.
(→Propriétés) |
(→Définition en base) |
||
| Ligne 23 : | Ligne 23 : | ||
Chaque type de blocObject doit être défini dans la table '''typeBlocObject'''. Voici la liste des champs de cette table et leur signification: | 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. | + | * ''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 | + | * ''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). | + | * ''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). | + | * ''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 | + | * ''isEditable'': flag indiquant si le blocObject est éditable |
| - | * isDraggable: flag indiquant si le blocObject pourra être déplacé au sein du contenu. | + | * ''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 | + | * ''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). | + | * ''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). | + | * ''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. | + | * ''typeBlocOrder'': ordre d'apparition des bloc dans la console d'ajout. |
=== Classe associée === | === Classe associée === | ||
Version du 7 juillet 2010 à 14:55
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.
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;
}
}
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é.
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.
