Vous êtes ici : Accueil / Développement / Plone / Création de produits / Créer la structure d'un site à l'aide d'un produit

Créer la structure d'un site à l'aide d'un produit

Par Pierre-Yves Landuré Dernière modification 24/08/2011 01:29

Il arrive quelquefois qu'il soit nécessaire de forcer la structure de dossier d'un site Plone pour l'adapter aux feuilles de styles (typiquement lorsque l'on doit assigner une couleur par rubrique). Dans ce cas, il est souhaitable que le produit crée automatiquement les dossiers concernés. Cet article présente les informations nécessaires pour ce faire.

Documentation ?

La plupart des informations de cette paque sont disponibles dans le fichier Products/CMFCore/exportimport/content.py. Ce fichier contient le code se chargent de l'import de la structure du site. Voici un extrait de cette documentation :

Folderish instances are mapped to directories within the 'structure'
portion of the profile, where the folder's relative path within the site
corresponds to the path of its directory under 'structure'.

The subobjects of a folderish instance are enumerated in the '.objects'
file in the corresponding directory.  This file is a CSV file, with one
row per subobject, with the following wtructure::

"<subobject id>","<subobject portal_type>"

Subobjects themselves are represented as individual files or
subdirectories within the parent's directory.
If the import step finds that any objects specified to be created by the
'structure' directory setup already exist, these objects will be deleted
and then recreated by the profile.  The existence of a '.preserve' file
within the 'structure' hierarchy allows specification of objects that
should not be deleted.  '.preserve' files should contain one preserve
rule per line, with shell-style globbing supported (i.e. 'b*' will match
all objects w/ id starting w/ 'b'.

Similarly, a '.delete' file can be used to specify the deletion of any
objects that exist in the site but are NOT in the 'structure' hierarchy,
and thus will not be recreated during the import process.

Exemple de structure

En premier lieu, placez-vous dans le dossier de votre produit, et créez-y le dossier profiles/default/structure.

Ajoutez les fichiers cachés suivants dans ce dossier en vous basant sur les contenus d'exemple :

  • .properties :
    Ce fichier contient les propriétés du contexte. Si placé à la racine du dossier "profiles/default/structure", il s'agit du titre et de la description de votre site Plone.
    Remarque : Ce fichier est OBLIGATOIRE.
    [DEFAULT]
    title = Mon site très très bien
    description = Mon site très très bien est un exemple de contenu.
  • .delete :
    Ce fichier permet la suppression de contenu existants dans un site Plone existant. Par exemple, si vous voulez vider un site Plone de son contenu par défaut :
    Members
    events
    news
  • .preserve :
    Par défaut, tout objet présent dans le dossier est supprimé pour être recréé à partir de la structure. Pour éviter cette suppression et conserver les modifications effectuées sur les objets existants, ajoutez l'id des objets que vous souhaitez conserver à ce fichier.
    Remarque : Je recommande FORTEMENT l'utilisation de ce fichier, cela évite que le contenu existant ne soit supprimé à chaque réinstallation du produit.
    mon-dossier-cree-par-objects
    mon-document-cree-par-objects
  • .objects :
    Ce fichier contient la liste des Ids et des types des objects à créer, séparé par une virgule :
    mon-dossier-cree-par-objects,Folder
    mon-document-cree-par-objects,Document

Une fois les fichiers cachés ci-dessus créés, vous devez créer les fichiers et dossiers décrivant le contenu listé dans ".objects".

Description de mon-document-cree-par-objects

Les types "non folderish" (c.a.d. ne pouvant pas contenir d'objets, ne se comportant pas comme un dossier) sont décrits par un simple fichier de configuration nommé comme l'id de l'objet. Ainsi, pour notre exemple, créez le fichier suivant avec son contenu exemple :

  • mon-document-cree-par-objects :
    id: mon-document-cree-par-objects
    title: Ceci est un document d'exemple
    excludeFromNav: False
    subject:
    description: Félicitation, vous avez créé votre première structure.
    contributors:
    effectiveDate: None
    expirationDate: None
    language:
    rights:
    creation_date: 2007/04/02 14:28:30 US/Central
    modification_date: 2007/04/02 14:28:30 US/Central
    relatedItems:
    allowDiscussion: None
    Content-Type: text/html

    <p>
    Voici un exemple de contenu de document. Notez que vous pouver utiliser des balises <strong>HTML</strong>.
    </p>

Description de mon-dossier-cree-par-objects

Les types "folderish" (c.a.d. se comportant comme un dossier) sont décrits par un dossier nommé comme l'id de l'objet. Ce dossier peut contenir les même fichiers cachés que le dossier structure.

Dans notre exemple, créez le dossier mon-dossier-cree-par-objects, et créez-y le fichier suivant :

  • .properties :
    Ce fichier contient les propriétés du contexte. Ici, il s'agit du titre et de la description de votre dossier "mon-dossier-cree-par-objects.
    Remarque : Ce fichier est OBLIGATOIRE.
    [DEFAULT]
    title = Ceci est un dossier d'exemple
    description = Félicitation, vous avez créé votre premier dossier via une structure.

Réindexer le contenu après import

L'un des inconvénient de cette méthode d'import du contenu est que les titres des dossiers ne sont pas correctement indexés, c'est donc leur Id qui apparait dans la navigation. Pour corriger ce problème, rendez vous dans l'onglet "Advanced" du portal_catalog, et cliquez sur le bouton "Update Catalog".

Pour aller plus loin

Quelques informations à ce sujet sont disponible dans l'article Creating content with genericsetup.