SP:Composant:BlocObject
De Hegyd Doc.
(→BlocObject) |
(→Classe associée) |
||
| Ligne 123 : | 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 === | ||
Version du 27 juillet 2010 à 07:54
Sommaire |
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....
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 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).
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
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.
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...).
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 version 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.
