Source de la documentation (en GFDL) sur Plone (docplone0999.pdf)
Documentation sur Plone (pour Plone 1.X principalement, mais de nombreuses choses restent valables pour Plone 2.1)
Size 118.5 kB - File type text/x-texFile contents
\documentclass[a4paper,oneside,11pt]{book}
\usepackage[francais]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[counterclockwise]{rotating}
\usepackage{vmargin,times,caption2,amssymb,epsfig,graphicx,verbatim}
\DeclareGraphicsExtensions{.png,.pdf,.eps}
\usepackage{thumbpdf}
\usepackage[pdftex,
colorlinks=true,
urlcolor=oneblue, % \href{...}{...} external (URL)
filecolor=rltgreen, % \href{...} local file
linkcolor=myblue, % \ref{...} and \pageref{...}
pdftitle={Mon Plone Site},
pdfauthor={Aurélie Cambourian},
pdfsubject={Zope et Plone pour un site intranet},
pdfkeywords={plone zope site},
pagebackref,
pdfpagemode=None,
bookmarksopen=true]{hyperref}
\usepackage{color}
\definecolor{rltred}{rgb}{0.75,0,0}
\definecolor{rltgreen}{rgb}{0,0.5,0}
\definecolor{oneblue}{rgb}{0,0,0.75}
\definecolor{brown}{rgb}{0.64,0.16,0.16}
\definecolor{forestgreen}{rgb}{0.13,0.54,0.13}
\definecolor{purple}{rgb}{0.62,0.12,0.94}
\definecolor{dockerblue}{rgb}{0.11,0.56,0.98}
\definecolor{freeblue}{rgb}{0.25,0.41,0.88}
\definecolor{myblue}{rgb}{0,0.2,0.4}
\renewcommand{\thechapter}{\Roman{chapter}}
\let\mySection\section
\renewcommand\section[1]{%
\mySection[#1]{\protect\textcolor{freeblue}{#1}}%
}
\let\mySubsection\subsection
\renewcommand\subsection[1]{%
\mySubsection[#1]{\protect\textcolor{myblue}{#1}}%
}
\let\mySubsubsection\subsubsection
\renewcommand\subsubsection[1]{%
\mySubsubsection[#1]{\protect\textcolor{dockerblue}{#1}}%
}
\pagestyle{headings}
\setmarginsrb{1.5cm}{1.5cm}{1,2cm}{1,5cm}{0cm}{2cm}{2cm}{2cm}
\newcommand{\ligne}{\centerline{\leaders\hrule\hskip7cm}}
\def\tilde{\char'176}
\title{
\textsc{\textcolor{myblue}{MISE EN PLACE D'UN SITE INTRANET}}\\
\vspace{1cm}
\LARGE{\textcolor{myblue}{AVEC} \textcolor{blue}{ZOPE} \textcolor{myblue}{ET} \textcolor{dockerblue}{PLONE}}
\vspace{1,5cm}
}
\author{
\textsc{\textcolor{myblue}{auteur : Aurélie Cambourian}}\\
\normalsize{\textcolor{myblue}{aurelie.cambourian@free.fr}}\\
\vspace{2cm}
}
\date{
\textsc{\textcolor{myblue}{première édition le : 02 mars 2003}}\\
\textsc{\textcolor{myblue}{édition courante : 28 novembre 2003}}\\
\vspace{1cm}
\LARGE{\textcolor{myblue}{Version 0.999}}\\
\vspace{6cm}
}
\begin{document}
\maketitle
\renewcommand{\contentsname}{LE SOMMAIRE}
\tableofcontents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsubsection{}
\vspace{3cm}
L'écriture de ce texte et les schémas ont été entièrement réalisés avec des logiciels libres à savoir,
\LaTeX ~et xfig sur un ordinateur possédant un système d'exploitation complètement libre Debian GNU/Linux.
\vspace{1cm}
\begin{center}
\includegraphics{debian.png}
\end{center}
\vspace{1,5cm}
\begin{center}
Les erreurs de ce manuel sont les miennes et \\
en aucun cas ne peuvent \^etre attribuées à une autre personne physique ou morale.
\end{center}
\vspace{2,5cm}
\begin{center}
Copyright (c) Aurélie Cambourian.\\
Permission is granted to copy, distribute this document\\
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;\\
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.\\
A copy of the license is included in the section entitled "GNU
Free Documentation License".\\
\end{center}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsubsection{}
\textbf{Au 28 novembre 2003 :}
Mise un peu à jour de la documentation en introduisant la version de Plone 2.0. (on retrouve ces modifications
et ajouts à divers endroits du site, dans les descriptions du contenu de l'objet
PloneSite en particulier). Ajout de section produits : CMFCollector \ref{sec:cmfcoll} et External Editor \ref{sec:exted}.
Ajout d'un slot de navigation en image \ref{sectionnavdeux}.
\vspace{0,5cm}
\textbf{Au 10 juillet 2003 :}
Merci à Isa de m'avoir posé une question sur le workflow, du coup je me suis aperçue que j'avais fait une faute dans le workflow.
L'état prepending doit avoir comme transitions prepublish, retract, reject et hide...
\vspace{0,5cm}
\textbf{Au 06 juillet 2003 :}
Dans cette version : rajout d'un chapitre sur le workflow \ref{chap:workflow}.
Pour comprendre ces flux de travail, je donne un exemple pour ajouter une
pré-relecture des contenus, afin d'épurer le travail des relecteurs finaux (cela
s'applique bien à certaines hiérarchies). Comme toujours n'hésitez pas à
m'écrire en cas de problème, j'essaierai du mieux que je peux de vous aider.
\vspace{0,5cm}
\textbf{Au 19 juin 2003 :}
Après plusieurs présentations de mon travail, rajout de la réflexion sur les
métadonnées. Cette réflexion a permis de déterminer toute une philosophie
d'utilisation de la lecture et l'affichage d'informations. Ajout donc du
concept, et des scripts et templates permettant de classer les objets de son
site, dans un nouveau chapitre \ref{chap:reflmetadonnees} sur la réflexion sur les métadonnées.
\vspace{0,5cm}
\textbf{Au 29 avril 2003 :}
En fonction des questions posées sur le site www.zopera.org et reçues par
e-mail, rajout d'une explication sur les onglets (category=portal\_tabs) dans le
chapitre sur la navigation.
\vspace{0,5cm}
\textbf{Au 22 mars 2003 :}
En fonction des questions posées sur le site www.zopera.org et reçues par e-mail
ajout de compléments d'informations sur les rubriques dans Plone, le graphisme,
les cookies...
\vspace{0,5cm}
\textbf{Au 11 mars 2003 : }
Ajout des commentaires de Yves aux endroits correspondants de la documentation
(installation avec un environnement Windows\circledR, calendrier...)
\vspace{0,5cm}
\textbf{Au 02 mars 2003 : }
Ce document n'est pas entièrement rempli mais est dans une version utilisable pour
aider à la compréhension de Plone.
Sébastien Chaumat a relu et proposé les corrections de ce document, ainsi que des
idées telles que la section "par où commencer" avec Plone.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsubsection{}
\vspace{7cm}
Pour SEb qui avait bien raison de me parler de Zope avec enthousiasme,
%%%%%%%%%%%%%%% DEBUT %%%%%%%%%%%%
\chapter*{Un site intranet}
\textbf{Ce qu'est un site intranet, ses objectifs, son rôle, ses services...}
Un site intranet est un ensemble de pages de même type que celles que l'on
trouve sur Internet (liées entre elles par des liens hypertextes), publiées dans
un navigateur Internet (comme Internet Explorer, Nestcape, Mozilla). Un site
intranet est un site qui correspond et appartient à l'entreprise qui le met en
place.
On retrouvera ainsi dans l'intranet informatif les aspects les plus
révolutionnaires et sympathiques de l'internet (tout au moins à ses débuts) :
\begin{verbatim}
* Accéder facilement à des informations toujours plus fiables et réactives
(accélération de la mise à jour des documents pour tous)
* Réduire les coûts
(déplacements, stockage, impression et diffusion d'information, etc...).
* Disposer de panneaux d'affichage collectif consultables sans se déplacer.
* Elargir le champ d'information à tous les utilisateurs du réseau
* Travailler avec des outils plus ergonomiques et plus conviviaux
* Disposer d'aides en ligne.
* Mise à disposition de documents techniques
* Moteur de recherche de documentations
* Un échange de données entre collaborateurs
* Messagerie électronique
* Forums de discussion, listes de diffusions
* Portail vers internet
* Avoir des "points dialogues" avec les acteurs de l'entreprise
* Disposer de notifications d'alerte sur les informations nouvelles
* Utiliser d'une manière active, contribuer, animer et partager
* Repérer facilement "qui fait quoi" dans les services
* Capitaliser les expériences
* Mettre en place une mémoire collective.
\end{verbatim}
Un site intranet dans une entreprise permet de mettre facilement à la
disposition des employés des documents divers et variés ( des textes, des
images, des vidéos, des sons, des liens internet, des adresses de messagerie et
même des applications...).
Dans un groupe scolaire comme dans une entreprise, on peut étendre les informations
à tous les employés ainsi qu'à tous les élèves et étudiants, en prenant en compte
l'intérêt et la confidentialité des documents publiés. Pour cela l'administrateur du
site autorise ou non l'accès à certaines pages, comme lorsque sur le réseau il
permet l'accès à telle ou telle ressource.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\addcontentsline{chapter}{section}{subsection}
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{PAR O\`U COMMENCER}
L'organisation de ce document est très descriptive dans le sens o\`u j'y décris les
différents objets d'un site Plone ainsi que quelques produits utilisés pour la
création d'un site Intranet (réalisé pour un groupe scolaire).
Ainsi sur des conseils avisés, j'ai mis en place cette page qui devrait vous aider à
utiliser ce document pour créer un site Intranet en utilisant Zope et Plone.\\
\vspace{0.4cm}
S'il fallait recommencer et créer un nouveau site je pense que je suivrais les
étapes suivantes :
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Ajout d'un Plone Site}
\subsection{Explications}
Dans la ZMI (Zope Management Interface), ajouter un Plone Site, entrer un
court identifiant, choisir
un portail avec un dossier d'utilisateurs et un site accessible
aux anonymes.\\
\vspace{0.4cm}
Tout de suite après, franciser le site Plone.
\subsection{Rubriques du document utilisées}
Le chapitre \ref{chap:install} sur les installations de Zope, CMF, Plone.\\
\vspace{0.3cm}
La sous-section \ref{sec:ajoutplone} sur l'ajout d'un site Plone.\\
\vspace{0.3cm}
La section \ref{sec:autrespdts} sur l'installation des autres produits Zope utilisés.\\
\vspace{0.3cm}
La section \ref{sec:localisation} sur la localisation (francisation) du site Plone.
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Créer les rubriques}
\subsection{Explications}
Puis créer des rubriques (dossiers) et remplir la page index\_html.
Pourquoi ? car Plone est déjà fonctionnel et qu'en fait ce qui compte en premier
sont les services offerts et non pas l'optimisation de l'accès aux
ressources, déjà bien avancé dans un site Plone.
\subsection{Rubriques du document utilisées}
La section \ref{sec:dossiers} sur la création de rubriques.\\
\vspace{0.3cm}
La sous-section \ref{sub:indexhtml} sur index\_html.
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Gérer les utilisateurs}
\subsection{Explications}
Qui va se connecter à ce site ?
Remplir le dossier des membres et managers du
portail. Ajouter ces utilisateurs aux rubriques déjà créées sachant qui est le
manager de quelle rubrique (dossier dans mon cas) le cas échéant.
\subsection{Rubriques du document utilisées}
La sous-section \ref{sub:acl} sur acl\_users.
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Implémenter les types supplémentaires}
\subsection{Explications}
Les objets créables par les utilisateurs sont par défaut dans Plone : Image, News,
document (texte), fichier downlodable, événement, favori, dossier, lien, commentaire
(si autorisé).
On peut ajouter un métatype pouvant inclure un objet dans le site correspondant un
document ayant une extension en .doc contenant des tableaux, des titres, des paragraphes
(provenant de AbiWord, StarOffice, MS-Office, OpenOffice...). Des types de contenus
auxquels ont peut attacher des autres contenus... Des systèmes de sondages, de
synchronisation...
Et aussi ajouter un métatype "album de photographies" ainsi que "forum".
\subsection{Rubriques du document utilisées}
La section \ref{sec:autrespdts} sur l'installation des autres produits Zope utilisés.\\
\vspace{0.3cm}
Le chapitre \ref{chap:integrpdts} sur l'intégration des produits CMF à Plone.\\
\vspace{0.3cm}
La sous-section \ref{sub:portaltypes} sur portal\_types.
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Organiser la navigation}
\subsection{Explications}
Ensuite il faudrait organiser la navigation en choisissant quels slots à
utiliser, au
besoin en créer (pas vraiment nécessaire), puis rajouter dans le header
une barre de navigation imagée, et enfin, configurer les onglets pour qu'ils présentent
les endroits clés du site.
Peut-\^etre que ce serait alors le moment de modifier le header en fonction des besoins
(la modification de la personnal-bar par exemple, présentant les actions réalisables
par l'utilisateur connecté).
\subsection{Rubriques du document utilisées}
Le chapitre \ref{chap:nav} sur l'organisation de la navigation.\\
\vspace{0.3cm}
La sous-section \ref{sub:membership} sur "portal\_membership" sur les actions
réalisables par les utilisateurs (de la personnal bar et des onglets).\\
\vspace{0.3cm}
La sous-section \ref{sub:portalactions} sur portal\_actions (onglets).
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Le design du site : dernière étape}
\subsection{Explications}
A modifier en premier le logo et les images de navigation d'abord, puis celles d'agréments et enfin les
css.
\subsection{Rubriques du document utilisées}
La sous-section \ref{sub:portalskins} portal\_skins.\\
\vspace{0.3cm}
Le chapitre \ref{chap:design} sur le design (images et css).
%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%
\section{Approfondissement}
\subsection{Explications}
Utiliser les métadonnées pour améliorer la classification des documents
(important) et modéliser un workflow personnalisé. On peut aussi se pencher sur les
systèmes de caches.
\subsection{Rubriques du document utilisées}
Le chapitre \ref{chap:metadonnees} sur les métadonnées et le chapitre \ref{chap:reflmetadonnees} sur la réflexion sur les métadonnées .
Le chapitre \ref{chap:workflow} sur le workflow dans Plone.
Le chapitre \ref{chap:cache} sur les systèmes de caches.
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{INSTALLATIONS}\label{chap:install}
\section{Zope, CMF et Plone}
%%%%%%subsection%%%%%%%%%
\subsection{Zope}
Pour plus de renseignements sur Zope, voir le site de Zope :
\href{http://www.zope.org}{zope.org}.
Ces indications d'installations ne remplacent pas la lecture de
Zope/docs/install.txt
\subsubsection{Indications d'installation :}
Extraire Zope de son archive dans le dossier où on souhaite l'installer
avec par exemple, la commande :\\ tar -xovzf Zope-2.6.x-linux2-x86.tar.gz
Lancer la commande ./install située dans le dossier Zope-2.6.x-linux2-x86, à la
fin du script d'installation apparait le nom 'admin' suivi d'un mot de
passe qui sera celui initial du serveur Zope.
Aller dans le répertoire du serveur Zope, puis dans bin/ , là, renommer le
dossier "python" en "python.old" par exemple (mv python python.old). Puis, faire
un lien symbolique depuis le python 2.1 installé via apt-get (si debian) (ln -s
/usr/bin/python2.1 python).
Pour lancer Zope on lance simplement le script 'start' situé dans le dossier de
Zope. (via la commande './start' si on se situe dans le répertoire de Zope.)
Si on a perdu le mot de passe donné à la fin du script d'installation, on peut
lancer le script contenu dans Zope à savoir zpasswd.py (lancé par la commande
bin/python zpasswd.py) on pourra alors introduire un nouveau manager au serveur
Zope.
\begin{small}
\begin{verbatim}
Toutefois je conseille d'installer après l'installation de Plone, la version de
Python(2.1.3) identique à celle de Plone ainsi que Pythonwin32 ce qui permet
d'avoir un ensemble homogène permettant de pouvoir tester les scripts Python
facilement.
Yves. le 10/03/2003
pour le pythonwin32 il faut le fichier win32all-151.exe qui correspond à la
version de Plone
sinon le driver ODBC qui fonctionne avec cette version de Plone est
ZODBCDA-3.1.0b2-win32-x86.tar
Yves. le 11/03/2003
\end{verbatim}
NDA: sous Windows\circledR
\end{small}
\subsubsection{Premier lancement de Zope :}
Lancer le script de démarrage 'start' comme vu ci-dessus.
Se rendre dans la barre d'adresse d'un navigateur web et entrer :\\
'http://localhost:8080/manage'
Une fen\^etre de login apparait, il suffit d'entrer les identifiants du manager
de Zope pour voir la ZMI (Zope Management Interface) appara\^itre.
\subsubsection{La ZMI :}
La ZMI se compose de plusieurs parties, au premier lancement de Zope il faut se
rendre dans le dossier acl\_user et ajouter un utilisateur qui aura le r\^ole de
manager du serveur Zope, puis supprimer l'utilisateur "admin" initial.
%%%%%%subsection%%%%%%%%%
\subsection{CMF}
L'archive de CMF contient 4 dossiers :
\begin{itemize}
\item CMFCalendar
\item CMFCore (dedans il y a le skinpath utile pour l'export import)
\item CMFDefault
\item CMFTopic (pour gérer les commentaires)
\end{itemize}
%%%%%%subsection%%%%%%%%%
\subsection{Plone version 1.0.X ou précédente}
Consulter le site \href{http://www.plone.org}{plone.org} pour télécharger
l'archive.
L'archive de CMFPlone contient 5 dossiers (au moi de juillet) :
\begin{itemize}
\item ActivePack (à n'utiliser que si on utilise une version de Zope inférieure à 2.6.0)
\item CMFPlone (Plone et ses sous-parties)
\item DCWorkflow
\item i18n (à savoir "internationalisation")
\item Formulator
\end{itemize}
\vspace{1cm}
Pour l'installation, c'est très simple :
\begin{enumerate}
\item Arr\^eter le serveur Zope
\item Copier les répertoires "\textit{CMFPlone}", "\textit{DCWorkflow}", "i18n", "Formulator" si vous avez Zope 2.6.x, ajoutez le répertoire "ActivePack"
si vous avec un Zope 2.5.X, le tout est à copier dans le répertoire /chemindeZope/lib/python/Products/ .
\item Redémarrer le serveur Zope.
\end{enumerate}
\begin{small}
\begin{verbatim}
Pour l'éditeur externe il manque dans la distribution Plone le fichier
ZopeEdit.ini.
Yves. le 10/03/2003
\end{verbatim}
NDA: pour Windows\circledR
\end{small}
%%%%%%subsection%%%%%%%%%
\subsection{Plone version 1.1.X ou 2.X}
Consulter le site \href{http://www.plone.org}{plone.org} pour télécharger
l'archive.
L'archive de CMFPlone contient 8 dossiers (pour la version 2.0-beta2) :
\begin{itemize}
\item BTreeFolder
\item CMFPlone
\item CMFActionIcons
\item CMFFormController
\item i18n (à savoir "internationalisation")
\item CMFQuickInstallerTool
\item GroupUSerFolder (GRUF ;) pour gérer les groupes d'utilisateurs.)
\item Formulator
\end{itemize}
\vspace{1cm}
Pour l'installation, c'est très simple :
\begin{enumerate}
\item Arr\^eter le serveur Zope
\item Copier les 8 répertoires dans le répertoire /chemindeZope/lib/python/Products/ .
\item Redémarrer le serveur Zope.
\end{enumerate}
%%% SECTION %%%%%%%%%%
\section{Les autres produits Zope utilisés}\label{sec:autrespdts}
\subsection{Localizer et TranslationService}
Pour une utilisation du support des langues.
Localizer :
\href{http://sourceforge.net/projects/lleu}{http://sourceforge.net/projects/lleu}
TranslationService :
\href{http://www.zope.org/Members/efge/TranslationService}{http://www.zope.org/Members/efge/TranslationService}
Pour TranslationService un problème se posait dans la version 0.2 (avec utf-8 et iso-8895-1), corrigé dans la version 0.3 par Florent
Guillaume. En effet dans le changelog on note que l'erreur (innommable) "UnicodeError: ASCII decoding error: ordinal not in range(128)"
est réglée.
.
Installation dans Zope :
\begin{enumerate}
\item On arrête Zope
\item tar -xvzf des 2 archives téléchargées
\item On copie les répertoires obtenus "Localizer" et "TranslationService" dans /chemindeZope/lib/python/Products/
\item On redémarre Zope
\end{enumerate}
\subsection{CMFForum}
\href{http://www.zope.org/Members/dreamcatcher/}{http://www.zope.org/Members/dreamcatcher/cmfforum\_first\_release}
Pour avoir des Forums. (CMFForum est une application de forum, il en existe d'autres)
\subsection{ZPhotoSlides et LocalFS}
\href{http://www.zope.org/Members/p3b/ZPhotoSlides}{http://www.zope.org/Members/p3b/ZPhotoSlides}
\href{http://sourceforge.net/projects/localfs}{http://sourceforge.net/projects/localfs}
Pour les albums Photos.
\subsection{CMFTypes}
Ce projet a été renommé en Archetypes.
\href{http://sourceforge.net/projects/collective}{http://sourceforge.net/projects/collective}
Pour uploader un document MSWord \circledR qui va \^etre transformé à la volée par vware en
html (tableaux...)
Pour créer des nouveaux types de contenu dans Plone.
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{L'OBJET PLONE SITE}\label{objetplone}
\section{Ajout de l'objet de type Plone Site}\label{sec:ajoutplone}
A la racine de la ZMI on ajoute un objet de type "Plone Site".
On obtient un formulaire pour définir cet objet :
\begin{description}
\item[Id] un nom court sans espace et en lettres minuscules
\item[Title] le titre du portail intranet
\item[Membership source] Créer un nouveau "acl\_users" (= correspond à l'action "Add User Folder" répertoire contenant la
liste des utilisateurs et leurs r\^oles (Create a new user forlder in the
portal) ou bien utiliser un "acl\_users" préexistant (I have an existing user
folder and want to use that instead ).
\item[Description] la description du site intranet
\item[Site type] Soit "Default Plone", ce sera un site où les anonymes auront
accès en lecture aux informations publiées du site, soit
"Private Plone site" où seuls les utilisateurs identifiés pourront accéder au
contenu publié du site.
\end{description}
En cliquant sur le bouton "Add Plone Site" on se retrouve avec la ZMI partagée
en deux, la liste des objets à gauche et l'interface graphique de notre site
Plone à droite.
Pour revenir à la vue du contenu de notre site, on clique dans la liste des
objets sur "Refresh" puis sur le nom (id) de notre site Plone qui vient
d'apparaitre dans cette liste.
%%%%%% SECTION %%%%%%%%%
\section{Fonctionnement de Plone - Contenu de l'objet Plone Site}
%%%%%%subsection%%%%%%%%%
\subsection{MailHost}
Est un formulaire permettant de configurer le smtp qui va \^etre utilisé pour
envoyer les emails lors des oublis de mots de passe par exemple.
%%%%%%subsection%%%%%%%%%
\subsection{Members (Members)}
Dossier où chaque utilisateur aura son espace personnel (si autorisé voir dans la
suite du document pour plus d'informations sur la configuration de Plone)
%%%%%%subsection%%%%%%%%%
\subsection{acl\_users (User Folder)}\label{sub:acl}
Dossier contenant la liste des utilisateurs du portail. On ajoute un utilisateur
en cliquant sur "Add" on doit alors entrer son nom d'utilisateur (sans espace)
son mot de passe et la confirmation de ce dernier.
Pour utiliser GRUF, il faut supprimer ce répertoire et le remplacer par un
GroupUserFolder (via la ZMI).
%%%%%%subsection%%%%%%%%%
\subsection{content\_type\_registry}
Existe si on a utilisé le produit CMFTypes.
%%%%%%subsection%%%%%%%%%
\subsection{cookie\_authentication}
Là où on va spécifier la forme des cookies.
%%%%%%subsection%%%%%%%%%
\subsection{index\_html(Welcome to Plone)}\label{sub:indexhtml}
Page d'accueil du site, à personnaliser (voir aussi le chapitre \ref{chap:nav} sur l'organisation de la
navigation).
%%%%%%subsection%%%%%%%%%
\subsection{plone\_utils (Various Plone Utility methods)}
%%%%%%subsection%%%%%%%%%
\subsection{portal\_actions (Contains custom tabs and buttons) }\label{sub:portalactions}
Les actions de que l'on trouve ici sont celles qui sont appelées par le header
des pages :
\begin{itemize}
\item portal\_tabs : les onglets (par défaut : rechercher, les news, les membres)
\item folder\_buttons : les boutons d'actions possibles que l'on peut réaliser
sur les objets contenus dans un dossier ou bien dans l'objet Plone Site
\item object\_tabs : les onglets de propriétés de chaque objet pour les
utilisateurs (état, appartenance de l'objet)
\item object : action spécifique à un objet. Un objet Plone Site est
vu comme un dossier et que donc chaque objet m\^eme à la racine du site Plone
est contenu dans un dossier. Donc une action par défaut d'un objet (mis à part
voir ) serait de lister le dossier auquel il appartient
\item folder : action spécifique à l'objet dossier "voir le / accéder au contenu du
dossier"
\end{itemize}
%%%%%%subsection%%%%%%%%%
\subsection{portal\_calendar (Controls how Events are shown) }
L'onglet intéressant dans cette partie est "Configure". On va pouvoir définir
quel type d'objet sera visible dans le calendrier.
Pour qu'un type soit vu dans
le calendrier (en plus de configurer cet onglet) il faudra remplir les champs
début (date de publication) et fin (date d'expiration) de chaque objet que l'on
veut voir dans le calendrier.
On va aussi choisir si on veut utiliser les sessions pour se rappeler des états du
calendrier.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_catalog (Indexes all content in the site)}
Cette partie d'un Plone Site est très utile pour conna\^itre le contenu du site.
\subsubsection{L'onglet Contents}
Ce dossier contient un objet appelé "Vocabulary" qui est en fait le recensement de
tous les mots, numéros... écrits dans les pages du site.
\subsubsection{L'onglet Catalog}
Cet onglet permet de gérer les items du catalogue du site.
En cliquant sur un des items de type /id\_du\_portail/x/... on obtient une page de
renseignements très complets sur cet objet du portail.
Ces informations renseignent entre autres sur : le metatype, les dates de création, de
parution, d'expiration, le créateur, l'id de l'objet, l'état, la description, le
type, le titre, les allowedRolesAndUsers ...
\subsubsection{L'onglet Properties}
Donne la valeur de title pour l'objet portal\_catalog.
\subsubsection{L'onglet Indexes}
Il présente le résultat de l'indexation, suivant des types par exemple :
\begin{itemize}
\item les FieldIndex donc les champs (pour le
type, les dates d'expiration, de création...),
\item les mots clés (KeyWordIndex),
\item les textes (TextIndex) pour les descriptions ...
\end{itemize}
\subsubsection{L'onglet Metadata}
Contient les types de données qui vont \^etre cataloguées (vus dans l'onglet
Indexes).
\subsubsection{L'onglet Find Objects}
Permet de trouver des objets et / ou bien de cataloguer des types d'objets suivant
des champs correspondant aux types, ids, contenus, droits, permissions...
\subsubsection{L'onglet Advanced}
Permet la gestion du catalogue en le mettant à jour (réindexation) le nettoyer pour
le recréer ensuite.
Une partie de cet onglet permet aussi de gérer les
"subtransactions". Cela entraine une réduction de la demande en mémoire du
catalogue, au détriment de la rapidité de recherche.
\subsubsection{L'onglet Undo}
Annuler des transactions (les défaire)
\subsubsection{L'onglet Security}
La sécurité sur l'objet portal\_catalog
\subsubsection{L'onglet Ownership}
L'appartenance de l'objet portal\_catalog.
\subsubsection{L'onglet Actions}
Si l'on veut ajouter des actions possibles correspondant à cet objet
portal\_catalog.
\subsubsection{L'onglet Overview}
%%%%%%subsection%%%%%%%%%
\subsection{portal\_discussion(Control how discussions are stored by default on
content)}
Un onglet action, par défaut sur "Reply"
%%%%%%subsection%%%%%%%%%
\subsection{portal\_factory (Responsible for the creation of content objects)}
Aucune configuration possible.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_form (Used together with templates to do validation and
navigation)}
Aucune configuration possible.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_form\_validation (Deprecated, not in use)}
Obsolète.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_memberdata (Handles the available properties on Members}
Permet de gérer des données sur chaque utilisateur, rajouter des actions de gestion
de membres ...
%%%%%%subsection%%%%%%%%%
\subsection{portal\_membership}\label{sub:membership}
\subsubsection{L'onglet Configuration}
La partie haute de cet onglet concerne les r\^oles des membres du portail (manager, reviewer...).
La partie basse de cet onglet va autoriser ou non la création lors de l'ajout
d'un utilisateur d'un espace réservé à cet utilisateur.
\subsubsection{L'onglet Actions}
La catégorie de ces actions est "user", c'est à dire qu'elles ne concernent
qu'un utilisateur authentifié.
Chaque action se présente sous la forme suivante :\\
\vspace{1cm}
\begin{tabular}{|*{2}{c|}}
\hline
Name & \textit{My Folder} \\
\hline
Id & \textit{mystuff} \\
\hline
Action &
\textit{string:\${portal/portal\_membership/getHomeUrl}/folder\_contents} \\
\hline
Condition & \textit{python: member and portal.portal\_membership.getHomeFolder()} \\
\hline
Permission & \textit{View} \\
\hline
Category & \textit{use} \\
\hline
Visible ? & \textit{x} \\
\hline
\end{tabular}
\vspace{1cm}
Remarque : si l'on a mis dans l'onglet "Configuration" que l'on ne voulait pas de
dossier personnels pour les utilisateurs, cocher la case "Visible ?" restera sans effet.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_metadata}
\subsubsection{L'onglet Actions}
\subsubsection{L'onglet Overview}
\subsubsection{L'onglet Properties}
Cet onglet propose trois champs :
\textbf{1. Update Metadata Tool Properties }
Publisher :
\textbf{2. Add Metadata Element}
\begin{itemize}
\item Element :
\item Multi-valued ?
\end{itemize}
\textbf{3. Remove Metadata Element}
\subsubsection{L'onglet Elements = Update Element Metadata Policies}
Les éléments par défaut sont Subject, Rights, Format, Language, Description,
Title.
Pour chaque Content type (Evénement, Document, News...), on demande pour chaque
élément :
\begin{enumerate}
\item s'il est requis
\item d'entrer une réponse par défaut
\item de proposer la réponse par défaut
\item d'entrer des termes appelés "vocabulaire" (correspond à la liste des "subjects")
\item de forcer l'utilisation des termes du vocabulaire
\end{enumerate}
%%%%%%subsection%%%%%%%%%
\subsection{portal\_migration}
Cet outil sert lorsqu'une nouvelle version de Plone sort.
Le reste du temps on a le message que notre objet Plone site est \textit{up to date}.
La procédure en cas de nouvelle version de Plone, est d'extraire de l'archive la
nouvelle version. D'arrêter Zope, puis de copier le contenu de
CMFPlone-1.x.x, sauf Active Pack si on a un Zope de type 2.6.x, dans
chemin\_de\_Zope/lib/python/Products (afin de remplacer les anciens scripts) et
ensuite d'aller dans portail fait sous l'ancienne version de Plone, de se rendre dans
\textit{portal\_migration} qui dit cette fois que le
portail est \textit{out of date} et il faudrait cliquer sur upgrader
%%%%%%subsection%%%%%%%%%
\subsection{portal\_navigation}
Aucune configuration possible.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_properties}\label{sub:portalproperties}
Il contient quatre parties (donner des valeurs aux objets Zope) et des actions :
\subsubsection{a. form\_properties}
sert en particulier à faire valider le remplissage des champs de chaque Métatype.
\subsubsection{b. navigation\_properties}
donne des actions et des chemins de scripts à suivre suivant le succès ou
l'échec d'une validation d'objet.
\subsubsection{c. navtree\_properties}
Les paramètres configurables sont :
(Type : l = lines , b = boolean, i = int)
\small
\begin{tabular}{|*{4}{l|}}
\hline
Name & \textit{Value(exemple)} & Type & Explications\\
\hline
showMyFolderUserOnly & \textit{x} & b & ne voir que son dossier dans Membres(Members)\\
\hline
includeTop & \textit{x} & b & Voir dans le slot de navigation l'objet
Plone Site\\
\hline
showMyFolderishSiblingsOnly & \textit{x} & b & \\
\hline
showMyFolderishChildrenOnly & \textit{x} & b & \\
\hline
showNonFolderishObject & \textit{x} & b & ne pas voir que les objets de types
"dossier"\\
\hline
topLevel & \textit{0} & i & \\
\hline
batchSize & \textit{30} & i & Longueur des champs de type <input type="text"> \\
\hline
showTopicResults & \textit{x} & b & Voir les commentaires\\
\hline
rolesSeeUnpublishedContent & \textit{Manager -- Owner..} & lines & Les r\^oles
autorisés à voir le contenu non publié\\
\hline
sortCriteria & \textit{isPrinipiaFolderish,desc} &
l & Tri de contenu d'abord puis alphabétique\\
\hline
metatypesNotToList & \textit{CMF Collector} &
l & Ce qui ne peut \^etre ajouté par l'interface "items"\\
\hline
parentMetatypesNotToQuery & \textit{~} & l &\\
\hline
croppingLength & \textit{18} & i & \\
\hline
forceParentsInBatch & \textit{~} & b & \\
\hline
skipIndex\_html & \textit{x} & b & passer s'il existe un fichier
index\_html\\
\hline
rolesSeeContentsView & \textit{Manager--Owner} & l & Les r\^oles pouvant voir la vue "contents"\\
\hline
rolesSeeHiddenContent & \textit{Manager} & l & Les r\^oles pouvant voir le contenu
caché du site\\
\hline
\end{tabular}
\subsubsection{d. site\_properties (Site wide properties}
\begin{tabular}{|*{4}{l|}}
\hline
Name & \textit{Value (exemple)} & Type & Explications\\
\hline
allowAnonymousViewAbout & \textit{x} & boolean & \\
\hline
localTimeFormat & \textit{\%Y\%m\%d} & string & année mois jour\\
\hline
localLongTimeFormat & \textit{\%Y\%m\%d \%I\%M\%p} & string & année mois jour
heures minutes période(AM-PM)\\
\hline
default\_language & \textit{fr} & string & \\
\hline
default\_charset & \textit{iso-8859-1} & string & \\
\hline
use\_folder\_tabs & \textit{Folder} & lines & sur les objets de type dossier\\
\hline
use\_folder\_contents & \textit{Folder} & lines & sur les objets de type dossier\\
\hline
ext\_editor & \textit{~} & boolean & avoir un éditeur externe\\
\hline
available\_editors & \textit{None} & lines & \\
\hline
allowRolesToAddKeywords & \textit{Manager -- Reviewer} & lines & \\
\hline
auth\_cookie\_length & \textit{0} & int & \\
\hline
allow\_sendto & \textit{~} & boolean& \\
\hline
enable\_navigation\_logging & \textit{~} & boolean & \\
\hline
\end{tabular}
\normalsize
%%%%%%subsection%%%%%%%%%
\subsection{portal\_registration (Handles registration of new users)}
Dans cette section on a une seule action par défaut : autoriser ou non l'inscription de
nouveaux utilisateurs au portail.
Cocher ou décocher la case à gauche de l'interrogation "Visible ?" permet à cette
action d'\^etre réalisée dans le portail.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_skins (Control skin behaviour (search order etc)}\label{sub:portalskins}
Les dossiers de portal\_skins sont :
\subsubsection{Images}
Ce dossier contient les images de Zope (Le logo de Zope que l'on voit dans la ZMI
par exemple).
\subsubsection{calendar}
Ce dossier contient les images correspondant au calendrier d'un objet de type
CMF site ainsi que les dtml-method de son affichage.
\begin{small}
\begin{verbatim}
Pour faire commencer le calendrier le lundi et pas le dimanche comme par défaut
il faut modifier calendartool.py qui est dans plone/data/products/cmfcalendar et
modifier la valeur de calendar.SetFirstWeekday.
Yves. 10/03/2003
\end{verbatim}
\end{small}
\subsubsection{cmft}
Apparait si on a ajouté le produit CMFTypes.
\subsubsection{content}
Dans ce dossier on trouve les scripts d'édition dont les noms sont du type "\textit{métatype}\_edit" et des
dtml-method pour l'affichage, l'édition des métatypes dans un objet de type CMF
Site.
\subsubsection{control}
Ce dossier contient les scripts et quelques dtml-method correspondant aux actions (folder\_cut par
exemple) réalisables sur les objets d'un site de type CMF Site.
\subsubsection{custom}
Ce dossier est spécial. C'est le seul dossier de portal\_skins (en dehors de la
racine de portal\_skins ) où l'on possède le droit d'écriture.
C'est donc le seul endroit où l'on va pouvoir créer des objets images, des
dossiers, des ZopePageTemplates...
Ce dossier est spécial aussi car pour modifier (customiser / personnaliser) un
objet (ZopePageTemplates, dtml-method...) existant, on va ouvrir l'objet à modifier et
l'interface de Plone va proposer un bouton appelé \textit{customize}. A la gauche de ce
bouton se trouve une liste déroulant qui permet de choisir l'endroit où va
\^etre copié l'objet à modifier. Par défaut cette destination est le répertoire
\textit{custom}. Si l'on crée d'autres répertoires dans \textit{custom} alors on pourra les
choisir comme destination de la copie de l'objet.
Ainsi on comprend que pour que la modification d'un objet prenne effet, le
dossier \textit{custom} sera lu avant les autres répertoires de \textit{portal\_skins}.
\subsubsection{generic}
On va trouver dans ce dossier les formulaires (d'édition, d'ajout, des
métadonnées) ainsi que les RSS d'un objet de type CMF Site.
\subsubsection{no\_css}
Ce dossier ne contient qu'un objet \textit{stylesheet\_properties} qui doit
correspondre à la version imprimable des pages.
\subsubsection{nouvelle}
Ce dossier contient deux objets, l'un intitulé \textit{nouvelle\_stylesheet} et
l'autre \textit{stylesheet\_properties}. Ils correspondent à des feuilles de styles.
Les feuilles de styles seront détaillées dans le chapitre \ref{chap:design} "Design du site" dans la
section \ref{sec:css} intitulée "les css".
\subsubsection{plone\_3rdParty}
Contient des objets de type \textit{Filesystem Directory View} correspondant à des
produits Zope intégrables dans un Plone site
(CMFCalendar, CMFCollector, CMFTopic, CMFWeblog, CMFWiki, ratings).
\subsubsection{plone\_content}
Dans ce dossier on trouve les ZopePageTemplates correspondant à l'affichage des objets des
différents métatypes ainsi que les \textit{métatype\_edit\_form}
\subsubsection{plone\_ecmascript}
Les scripts javascripts : \textit{plone\_formtooltips.jp} et
\textit{plone\_javascripts.js}.
\subsubsection{plone\_forms}
Dans ce dossier on trouve les ZopePageTemplates d'affichage des objets des
différents métatypes ainsi que les actions\_form. Par exemple, \textit{personalize\_form}
ou bien \textit{member\_search\_form} ou encore \textit{login\_form} ... On va aussi trouver un
script appelé logged\_in (permet le login d'un utilisateur avec
getAuthenticatedMember)
\subsubsection{plone\_images}
On va y trouver les objets images : le logo de plone, les metatype\_icons ...
Toujours la m\^eme chose, pour les personnaliser : les ouvrir, cliquer sur
\textit{Customize} (l'objet est alors copié dans le dossier \textit{custom}, on nous propose d'entrer un
titre, de parcourir le contenu d'un disque et d'uploader l'image que l'on
souhaite avoir en remplacement).
\subsubsection{plone\_scripts}
Comme son nom l'indique ce dossier contient des scripts python tels que la réalisation
d'actions concernant les objets du Plone Site (\textit{folder\_delete}) ainsi que des
scripts pour le classement des objets (\textit{filter et sort}), la création des objets
(\textit{createObject}), la fonction \textit{Undo} pour l'annulation des modifications
effectuées...
Ce dossier contient aussi le dossier \textit{form\_scripts} qui lui contient les
scripts de validation d'un formulaire d'édition/création d'un objet tel que le
\textit{validate\_id} et les scripts servant à l'édition d'un métatype en particulier.
\subsubsection{plone\_styles}
Contient un \textit{stylesheet\_properties}, \textit{plonePrint.css},
\textit{plonePresentation.css},
\textit{plone.css}, \textit{ploneNS4.css} et des dossiers contenant les m\^emes feuilles de styles
ainsi que des images de navigation (user, bullet...) sur un autre thème que
celui par défaut.
\subsubsection{plone\_templates}
On retrouve entre autres le \textit{footer} et le \textit{header} de toutes les pages dans ce
répertoire.
(les détails de contenu des header et footer sont développés dans le chapitre
\ref{chap:nav} intitulé "L'organisation la navigation" dans les sections
correspondantes (header et footer).
Dans le \textit{header} on trouve :\\
\begin{itemize}
\item appel de la skin du site
\item la searchBox
\item le logo du site
\item les portal\_tabs
\item les actions de la personnalBar
\item le chemin de la page en cours (par exemple home -> les news -> la sortie
de Plone 1.0)
\end{itemize}
Dans le footer on trouve des références à Plone, et un logo \textit{plone\_powered}.\\
Dans ce répertoire, on va aussi avoir les ZopePageTemplates (ZPT) correspondant à "main\_template",
"\textit{folder\_contents}"...\\
Ce dossier contient aussi le dossier "\textit{ui\_slots}" qui les ZopePageTemplates des slots (carrés
situés à gauche et à droite du centre de l'affichage du site Plone) tels que
news\_slot qui va afficher les 5 derniers titres des 5 dernières news comme des
liens cliquables.
On y trouve aussi un script python "\textit{navigation\_tree\_builder}"
qui va construire le slot \textit{navigation\_tree} en fonction de ce qui a été configuré
dans le dossier \textit{portal\_properties} dans l'espace \textit{navtree\_properties}.
\subsubsection{plone\_wysiwyg}
Il contient \textit{wysiwyg\_popup} et \textit{wysiwyg\_support}.
\subsubsection{topic}
Ce dossier contient les scripts, ZopePageTemplates et les dtml-method correspondant à l'ajout,
affichage des commentaires (affichés si autorisés).
\subsubsection{zpt\_calendar}
La version du dossier \textit{calendar} mais il est réalisé avec des ZopePageTemplates et des
scripts python.
\subsubsection{zpt\_content}
La version du dossier \textit{content} mais il est réalisé avec des ZopePageTemplates et des
scripts python.
\subsubsection{zpt\_control}
La version du dossier \textit{control} mais il est réalisé avec des ZopePageTemplates et des
scripts python.
\subsubsection{zpt\_forum}
Apparait si on a ajouté le produit \textit{CMFForum}, on y trouve les ZopePageTemplates et scripts
python corespondants.
\subsubsection{zpt\_generic}
La version du dossier \textit{generic} mais il est réalisé avec des ZopePageTemplates et des
scripts python.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_syndication (Generate RSS folders)}
Permet la syndication (envoi d'un flux d'informations vers d'autres sites
web) et l'implémentation des politiques de syndication dans
le site.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_types (Controls the available Content Types in your portal) }\label{sub:portaltypes}
\subsubsection{Pour chaque type on peut définir les propriétés}
\begin{tabular}{|*{4}{c|}}
\hline
Name & \textit{Value (exemple)} & Type & Explications\\
\hline
Title & \textit{~} & string & non obligatoire si i18n\\
\hline
Description & \textit{Document can contain text...} & text & traduit via i18n\\
\hline
Icon & \textit{document\_icon.gif} & string & ic\^one du métatype\\
\hline
Product meta type & \textit{Document} & string & \\
\hline
Product name & \textit{CMFDefault} & string & \\
\hline
Product factory method & \textit{addDocument} & string & \\
\hline
Initial view name & \textit{document\_edit\_form} & string & vue 1 = l'édition\\
\hline
Implicitly addable ? & \textit{x} & boolean & \\
\hline
Filter content types & \textit{x} & boolean & \\
\hline
Allowed content types & \textit{une liste} & multiple selection & \\
\hline
Allow Discussion & \textit{Manager -- Reviewer} & boolean & \\
\hline
\end{tabular}
\subsubsection{Pour chaque type on peut définir les actions}
Chaque action (dans un onglet) à ajouter ou bien existante se présente ainsi :
\begin{tabular}{|*{3}{c|}}
\hline
Nom & champ à remplir & commentaires \\
\hline
Name & \textit{View} & ne pas traduire si i18n utilisé \\
\hline
Id & \textit{view} & \textbf{lire le chap.\ref{chap:nav}, section \ref{sec:rubrique}}\\
\hline
Action &
\textit{document\_view} & objet appelé\\
\hline
Permission & \textit{View} & permission nécessaire\\
\hline
Category & \textit{object} & \\
\hline
Visible ? & \textit{x} & oui ou non\\
\hline
\end{tabular}
%%%%%%subsection%%%%%%%%%
\subsection{portal\_undo (Defines actions and functionality related to undo) }
Cette partie du Plone Site est utilisée pour défaire les actions réalisées.
Dans le
premier onglet "Actions" deux
actions sont proposées : liste des changements ou bien une annulation rapide de
la dernière modification.
L'onglet Undo liste toutes les modifications depuis la création du portail.
%%%%%%subsection%%%%%%%%%
\subsection{portal\_url (Methods to anchor you to the root of your Plone site)
}
\subsection{portal\_workflow (Contains workflow definitions for your portal)}
Cette partie du Plone Site contient les actions correspondant à l'action de
relecture puis validation des contenus...
La plus grande partie du workflow intégrée à Plone est déjà paramétrée.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%
\chapter{INSTALLATION ET INT\'EGRATION DES PRODUITS ZOPE DANS PLONE}\label{chap:integrpdts}
%%%%%%%%%%%%% SECTION %%%%%%%%%%
\section{CMFForum}
Pour installer CMF Forum, dans la ZMI on crée une "External Method"\\
Id: install\_forum\\
Title: Install Forum (optional)\\
Module: CMFForum.Install\\
Function: install\\
%%%%%%%%%%%%% SECTION %%%%%%%%%%
\section{CMTypes}
\textbf{En premier :}\\
Pour avoir les deux types de documents de démonstration, on doit éditer le
fichier \_\_init\_\_ et passer la valeur de la clé INCLUDE\_DEMO\_TYPES de 0 à
1\\
\vspace{1,5cm}
\textbf{En second} dans le site Plone on crée un objet de type External Method:\\
Id: CMFTinstall\\
Title: Demo type installer\\
Module: CMFTypes.Install\\
Function: install\\
%%%%%%%%%%%%% SECTION %%%%%%%%%%
\section{ZPhotoSlides}
Les modifications possible à faire pour une intégration à
Plone (css ...) :
\subsection{La css de présentation des albums}
La css de chaque album se trouve dans le dossier correspondant à chaque album. On
peut la modifier aussi par l'interface graphique de management intégrée dans le produit
ZPhotoSlides.
La feuille de style présentée ici correspond plut\^ot au style chromatique de Plone
Default.
\scriptsize
\begin{verbatim}
/* standard color */
body {
font-family : verdana, arial, helvetica, sans-serif;
font-size : 15px;
color : #003333;
background : #ffffff;
}
/* set margins on body content and focus tables with a div */
/* (classing the table does nix in Nav4) */
.margins {
margin-left: 2%;
margin-right: 2%;
}
.boxborder {
BORDER-RIGHT: #000000 1px solid;
BORDER-TOP: #000000 1px solid;
BORDER-LEFT: #000000 1px solid;
BORDER-BOTTOM: #000000 1px solid
}
.boxborderR{
BORDER-TOP: #000000 1px solid;
BORDER-LEFT: #000000 1px solid;
BORDER-BOTTOM: #000000 1px solid
}
.boxborderNOTOP{
BORDER-RIGHT: #000000 1px solid;
BORDER-LEFT: #000000 1px solid;
BORDER-BOTTOM: #000000 1px solid
}
.boxborderL{
BORDER-BOTTOM: #000000 1px solid;
BORDER-RIGHT: #000000 1px solid;
}
.boxborderRIGHT{
BORDER-RIGHT: #000000 1px solid;
}
p {
font-size : 15px;
font-family : verdana, arial, helvetica, sans-serif;
color : #000000;
}
h1 {
font-size : 24px;
font-weight : bold;
font-family : verdana, arial, helvetica, sans-serif;
color : #8CACBB;
background : transparent;
}
h2 {
font-size : 22px;
font-weight : bold;
font-family : verdana, arial, helvetica, sans-serif;
color : #000000;
background : transparent;
}
h2.right {
font-size : 20px;
font-weight : bold;
font-family : verdana, arial, helvetica, sans-serif;
color : #000000;
background : transparent;
text-align : right;
}
h3 {
font-size : 18px;
font-weight : bold;
font-family : verdana, arial, helvetica, sans-serif;
color : #000000;
background : transparent;
}
h4 {
font-size: 11px;
font-family : verdana, arial, helvetica, sans-serif;
color: #000000;
background : transparent;
}
td {
font-size : 12px;
font-family : arial, helvetica, sans-serif;
color : #000000;
}
ul {
font-size : 11px;
font-family : verdana, arial, helvetica, sans-serif;
color : #000000;
background : transparent;
}
form {
margin : 0px;
padding : 0px;
border : 0px;
}
input {
font-family : clean, fixed, courier, monospace;
font-size : 12px;
color : #000000;
background : #DEE7EC;
border-left : 1px solid #333333;
border-top : 1px solid #333333;
border-right : 1px solid #333333;
border-bottom : 1px solid #333333;
}
input[type="submit"]:hover, input[type="button"]:hover {
color : #000000;
background : #ffffff;
}
input[type="submit"]:focus, input[type="button"]:focus {
color : #ffffff;
background : #DEE7EC;
}
a:link {
color : #436976;
text-decoration : none;
}
a:visited {
color : #436976;
text-decoration : none;
}
a:active {
color : #436976
}
a:hover {
color : #436976;
text-decoration : underline;
}
\end{verbatim}
\normalsize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{CMFCollector}\label{sec:cmfcoll}
\begin{description}
\item[Auteur :] http://dev.zope.org/Members/ajung - Andreas Jung
\item[Licence : ] ZPL (2.0)
\item[Version testée :]0.9a (cvs)
\item[Téléchargeable :]
http://cvs.zope.org/CMF/CMFCollector/CMFCollector.tar.gz
\item[Page du produit :]
http://www.zope.org/Members/ajung/CMFCollectorNG/CMFCollector\_0\_20beta1\_released
\item[Utilité :] Avoir un collecteur de problèmes et d'erreurs sur le site Plone. Le
collecteur se présente sous la forme d'un dossier dont le premier onglet sera un
formulaire de recherche des erreurs publiées, le second un formulaire lors de la
rencontre d'un problème (on peut ajouter un fichier et/ou une image), les
erreurs (issues) collectées peuvent etre suivies, il existe aussi un onglet de
configuration pour ce collecteur.
\end{description}
\subsection{Installation du Produit :}
\begin{enumerate}
\item Télércharger le produit CMFCollector
\item Dans "Chemin de Zope/lib/python/Products/", détarrer l'archive tar -xzvf CMFCollector.tar.gz
\item Rédemarrer le serveur Zope.
\end{enumerate}
\subsection{Installation à la racine du Site Plone considéré :}
\begin{enumerate}
\item Ajouter une "external method" (cliquer dans la liste d'objet ajoutable sur "external method") :
\begin{verbatim}
- id : install_cmfcollector
- title : installation de CMFCollector
- module name : CMFCollector.Install
- function name : install
\end{verbatim}
\item Cliquer sur le bouton "add".
\item Pour réaliser l'installation (install), choisir l'onglet "test" parmi les onglets pour la configuration de l'external method
"installation de CMFCollector".
\end{enumerate}
%%%
\subsection{Installation du Workflow pour CMFCollector}
\begin{enumerate}
\item Dans le dossier du produit CMFcollector se trouve "collector\_issue\_workflow.zexp", le copier dans le répertoire de Zope appelé "import"
\item Se rendre dans "portal\_workflow" du site Plone considéré et choisir l'onglet "contents"
\item Cliquer sur le bouton "import/export"
\item Comme nom, entrer "collector\_issue\_workflow.zexp"
\item Se rendre dans l'onglet "workflows"
\item Remplir les champs : Collector Issue -> collector\_issue\_workflow et cliquer sur le
bouton "change"
\end{enumerate}
Il existe IssueManager dans la même catégorie de produits.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{External Editor}\label{sec:exted}
\subsection{Installer External Editor}
Ce produit pour Zope qui va permettre d'éditer les scripts, pages templates et
autres joyeusetés de la ZMI dans son éditeur préféré. Ci-dessous tout est
expliqué pour les utilisateurs d'une distribution GNU/Linux, les utilisateurs de
Windows\circledR pourront se reporter à la documentation se trouvant sur
http://zope.org/Members/Caseman/ExternalEditor/install-win32
Il est nécessaire d'avoir Python (2.1 ou supérieur) et Tk
\begin{itemize}
\item Télécharger :
\begin{enumerate}
\item Le produit Zope : http://www.zope.org/Members/Caseman/ExternalEditor/
\item La "Helper Application" : http://www.zope.org/Members/Caseman/ExternalEditor/
\end{enumerate}
\item Etapes d'installation :
\begin{enumerate}
\item Arrêter le serveur Zope
\item Détarrer l'archive téléchargée par exemple : tar -xzvf ExternalEditor-0.7.tgz dans /cheminZope/libe/python/Product/
\item Redémarrer le serveur Zope (si tout a bien fonctionné on obtient l'icone
d'un petit crayon à droite de chaque fichier)
\end{enumerate}
\end{itemize}
\subsection{Configurer External Editor}
Ci-dessous tout estexpliqué pour les utilisateurs d'une distribution GNU/Linux,
les utilisateurs de Windows\circledR pourront se reporter à la documentation se
trouvant sur http://zope.org/Members/Caseman/ExternalEditor/install-win32
\begin{itemize}
\item Pour paramétrer l'éditeur :
\begin{enumerate}
\item Dans un répertoire (position indifférente) détarrer l'archive Helper Application par exemple : tar -xzvf zopeedit-0.7-src.tgz
\item Se rendre dans le répertoire zopeedit-0.7-src créé, et exécuter avec les droits de root (sudo par exemple): python2.1 setup.py install
\item Cela va créer dans /usr/bin/ un exécutable appelé zopeedit.py
\end{enumerate}
\item Paramétrer Mozilla :
\begin{enumerate}
\item Edit (ou édition) Preferences (préférences)
\item Menu Navigator/Helper-Application (Navigateur, Applications) et créer un nouveau type (via le bouton New Type) et remplir SEULEMENT les champs suivants :
\item MIME Type : application/x-zope-edit
\item Description : Pour ExternalEditor Zope
\item Open it with : /usr/bin/zopeedit.py
\end{enumerate}
\item Configurer l'éditeur par défaut :
\begin{enumerate}
\item Aller dans la ZMI (avec le Mozilla paramétré bien sûr)
\item Cliquer sur une des petites icône "crayon"
\item Une fenêtre va s'ouvrir en haut à gauche si vous souhaitez Nedit
comme éditeur, entrez Nedit (comme pour tous les éditeurs graphiques de
X), si vous souhaitez vi il faudra ouvrir le fichier
/usr/bin/zopeedit.py et à la ligne 664 (dans ma version) il faudra
décommenter la ligne et entrer : editor = xterm -e vi , pour vim on
pourra entrer editor = gvim -f
\end{enumerate}
\end{itemize}
%%%%%%%%%%%%% SECTION %%%%%%%%%%
\section{Localizer et TranslationService}\label{sec:localisation}
%%%%%%subsection%%%%%%%%%
\subsection{prérequis}
Il est nécessaire de récupérer aussi le fichier de langue (langage.po) qui nous
intéresse dans i18n-Plone cvs sur\\
\href{http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/plone-i18n/i18n/}{http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/plone-i18n/i18n/}
%%%%%%subsection%%%%%%%%%
\subsection{Via la ZMI, à la racine de notre site Plone}
\begin{enumerate}
\item On ajoute un objet "Localizer" (appelé "francais", langue : fr .
\item Puis on ajoute un objet "TranslationService" qui doit s'appeler
"translation\_service" .
\end{enumerate}
%%%%%%subsection%%%%%%%%%
\subsection{Pour que le langage utilisé soit celui du fichier que l'on a
téléchargé}
A savoir : plone-fr-FR.po
On copie simplement notre fichier langue.po téléchargé dans le répertoire i18n
de Zope (il se trouve dans /chemindeZope/lib/python/Products/) .
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Ajouter le support des langues dans le MessageCatalog}
On se trouve dans notre site Plone.
\begin{enumerate}
\item Dans l'objet Localizer, on ajoute un objet de type "MessageCatalog", qu'il
faut appeler \textit{Plone.}
\item Dans cet objet intitulé "\textit{Plone}" de Localizer, aller sur l'onglet "Languages" et ajouter les langues dont on possède les fichiers.po et que
l'on veut activer .
\item Une fois cela fait, cliquer sur le bouton \textit{Import/Export}.
- Dans la section "\textit{Import}" on sélectionne le langage pour lequel on va aller
chercher le fichier langue.po
- On clique sur le bouton "\textit{Browse}" et on va aller dans le répertoire \\
/chemindeZope/lib/python/Products/i18n et choisir d'importer le fichier langue.po que l'on a téléchargé il n'y a pas si
longtemps...
- Cliquer sur l'import de ce fichier
\item Répéter ces étapes pour chaque langage que l'on veut que notre site Plone supporte.
\end{enumerate}
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Activer l'utilisation du Catalogue}
Cela revient à faire un lien entre le catalogue et la traduction
\begin{enumerate}
\item On va sur l'objet du site Plone "\textit{translation\_service}"
\item Dans "\textit{Default Domain}" on écrit "\textit{Localizer/Plone}" et on clique sur le
bouton intitulé "\textit{Change}"
\end{enumerate}
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Supporter plusieurs langues}
C'est l'utilisateur qui va choisir :
\begin{enumerate}
\item Par défaut on choisit dans le Plone Setup quelle langue par défaut on va utiliser
pour le site
\item Si le site supporte d'autres langues, la langue utilisée sera aussi
fonction des préférences de l'utilisateur lors du choix de la langue de son navigateur
\end{enumerate}
%%%%%%%%%%subsection%%%%%%%%%%%%%%%%%%%%ù
\subsection{Caractères accentués}
\begin{small}
\begin{verbatim}
D'autre part pour avoir dans les nouveaux Folder les caractères accentués il
faut aller dans /plone/portal_properties/site_properties et fixer
default_charset à iso-8859-1 au lieu de utf-8.
Yves. le 10/03/2003
\end{verbatim}
\end{small}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{EXPORTER PUIS IMPORTER SON SITE}
\section{Le bouton import/export}
Le format d'export/import sera .zexp
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Exporter son site}
\begin{enumerate}
\item On se place dans la ZMI de façon à voir notre objet de type Plone Site et de
pouvoir cocher la case qui lui correspond
\item On sélectionne notre site Plone
\item On clique sur le bouton "Import/Export"
\item On arrive sur une page dont la partie haute concerne l'Export
\item Dans le champ "\textit{Export object id}" est entré le nom (id) de l'objet Plone Site
(on peut le changer sans majuscule ni espace)
\item Un choix reste à faire, à savoir pour "\textit{Export to}" soit on choisit
"\textit{Download to local machine}" qui va être équivalent d'un "save as" sur la machine
cliente, soit on peut choisir "\textit{Save to file on server}" qui va créer dans le
répertoire /le\_chemin\_vers\_Zope/var/ un fichier nommé "idduportail.zexp" .
(il y a une case à cocher pour obtenir un format XML)
\item Puis on clique sur le bouton intitulé "\textit{Export}"
\end{enumerate}
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Importer son site}
\begin{enumerate}
\item On se place dans la ZMI à l'endroit où l'on veut retrouver son site Plone
\item On clique sur le bouton "\textit{import/export}"
\item On arrive sur une page dont la partie basse concerne l'Import
\item Dans une console on copie le idduportail.zexp que l'on a exporté
précédemment du serveur local ou d'un serveur distant dans le répertoire
intitulé /le\_chemin\_vers\_Zope/import/
\item Dans le champ "\textit{Import file name}" on entre le nom de l'objet à importer du
type idduportail.zexp
\item Quand à l'appartenance, on peut faire le choix dans "\textit{Ownership}" de
s'approprier les objets importés (Take ownership of imported objects), soit de
conserver les informations originales d'appartenance
(Retain existing ownership information).
\item Puis on clique sur le bouton intitulé "\textit{Import}"
\end{enumerate}
\section{Après l'import, on va avoir l'erreur de type \_\_getitem\_\_}
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Pourquoi ?}
Car le chemin vers les dossiers de skins sont codés en dur dans la vue de chaque
répertoire.
Si on déplace le site vers un autre serveur alors il faut corriger
le chemin recherché pour chaque objet utilisant les skins.
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Corriger}
Gr\^ace à un script trouvé sur http://www.zopelabs.com/ soumis par Robert le
14/02/2003 (merci beaucoup)
( au 23/02/2003 sur http://www.zopelabs.com/cookbook/1021216110 )
\scriptsize
\begin{verbatim}
## Script (Python) "setDirpath"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
import string
#get possible skins
newDirs=container.manage_addProduct['CMFCore'].manage_listAvailableDirectories()
#we can not use os.sep so we must look ourselfs what
# the path separator is
if newDirs[0].find('/') > -1:
newSep = '/'
else:
newSep = '\\'
objs = context.objectItems('Filesystem Directory View')
for n,o in objs:
found = 0
path = o.getDirPath()
if path.find('/') > -1:
sep = '/'
else:
sep = '\\'
#look for new path by comparing the last 2 elements
dArr = string.split(path,sep)
for i in range(len(newDirs)):
# if we found the directory skip the rest
if found:
continue
ndArr = string.split(newDirs[i],newSep)
if string.lower(ndArr[-1]) != string.lower(dArr[-1]):
continue
if string.lower(ndArr[-2]) != string.lower(dArr[-2]):
continue
# if we land here, we found the real one
found = 1
o.manage_properties(dirpath = newDirs[i])
if(found == 0):
print path, ' not found'
print 'finished'
return printed
\end{verbatim}
\normalsize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{L'ORGANISATION DE LA NAVIGATION}\label{chap:nav}
\section{Les dossiers}\label{sec:dossiers}
Dans le site Plone, chaque objet est un lien vers le contenu de l'objet. Ainsi, pour créer des rubriques (en fonction des services de
l'entreprise par exemple) le plus simple est de créer un dossier correspondant à chaque service, à le publier et à rajouter à
l'intérieur ce qui correspond au service.
\subsection{Créer une rubrique (onglet par exemple)}\label{sec:rubrique}
C'est plutot simple à réaliser :
\begin{enumerate}
\item Dans la ZMI, ouvrir le site plone, puis ouvrir portal\_actions. Chaque partie composée de 5 à 6 champs, correspond à un bouton
(onglet ou lien de la personnal bar). La catégorie des onglets est "portal\_tabs".
\item Aller en bas de cette page et ajouter un onglet en remplissant les champs d'un nouveau bouton pour qu'ils correspondent à un lien
vers le dossier
qui propose le service que l'on veut voir apparaitre en onglet (pour réaliser un onglet il y a des champs comme id (forum), action (lien
vers le dossier), condition (member...), permission (view...), category (portal\_tabs), visible)
\end{enumerate}
\textbf{Remarque sur le nom donné à l'id : }\\
Si dans portal\_actions on ne donne pas la m\^eme cha\^ine de caractères que ce qu'il va chercher, pour définir "id", on obtient un
problème.
Le problème sera que l'onglet créé n'aura pas de coloration de fond lorsqu'il sera sélectionné comme c'est le cas pour news, accueil...
Pourquoi ? car dans le \textit{header} le paramètre passé pour savoir si la classe de css va etre class="plain" ou class="selected" est
\textbf{id} !
exemple qui applique la bonne classe du style (plain et selected): \\
name=s'identifier \\
id=login\_form \\
string:\$portal\_url/login\_form \\
permission=view \\
category=portal\_tabs
visible (coché)
\subsection{Droits sur les dossiers :}
Pour ce qui est des droits sur ces dossiers il existe lors de la création de l'objet (et pour le propriétaire de l'objet) un onglet sur
l'objet intitulés "Local Roles". Dans cet onglet on trouve une interface de gestion de membres : on peut alors ajouter au dossier un ou
des managers, des relecteurs, des membres.
\section{Les slots}
Par défaut l'organisation du site Plone ressemble à :
\vspace{1cm}
\begin{tabular}{|*{1}{c|}}
\hline
Logo \\
Onglets de navigation\\
~~~~~~~~~~~Barre personnalisée (actions pour utilisateur authentifié)\\
\hline
Slots~~~::~Contenu~~~~~~~~~~~~~~~~~~~~:: Slots \\
Gauches~::~~~~~~~~de la page~~~~~~~~~~:: Droits\\
~~~~~~~~::~~~~~~~~~~~~~~~~d'accueil~~~:: \\
\hline
Bas de page\\
\hline
\end{tabular}
\vspace{1cm}
Il faut penser que la navigation pour les droitiers est plus aisée si il faut
cliquer à droite et pour les gauchers s'il faut cliquer à gauche.
\vspace{0.5cm}
Comme on ne peut dupliquer cette information de navigation, on va créer une
double entrée : une navigation écrite en ligne en haut à gauche, une au centre plus détaillées,
une en haut brève et imagée, une à droite (listing). Le tableau ci dessous pourrait correspondre à ce que l'on vient de décrire.
\vspace{1cm}
\begin{tabular}{|*{1}{c|}}
\hline
Logo ~~~~~~~~~~~~Navigation concise imagée\\
Onglets de navigation et navigation personnalisée (actions pour membre)\\
\hline
Index~~~~~~~~~~~~~~~~~~~~~~:: Slots \\
~~~~~~~~imagé~~~~~~~~~~~~~~:: Droits\\
~~~~~~~~~~~~~~~~détaillé~~~:: \\
\hline
Bas de page (lien vers haut de la page)\\
\hline
\end{tabular}
%%%%%%%%%%%subsection%%%%%%%%%%%
\subsection{Créer un slot}
On crée un fichier qui va afficher "à la slot" les informations que l'on
veut.
\subsubsection{Remarque importante}
Les slots sont comme vu précédemment dans
/monplone/portal\_skins/templates/ui\_slots. Pour en créer un, il est
intéressant de s'inspirer des templates de slots déjà présents.
\vspace{0.5cm}
Pour celui de recherche on prend le code contenu dans
/monplone/portal\_skins/plone\_templates/header et on rajoute un ent\^ete de
fichier et une fin de fichier.
\vspace{0.5cm}
Pour créer ce fichier on doit se placer dans /monplone/portal\_skins/custom (le
seul répertoire de portal\_skins où on a le droit d'écriture) et on crée un
objet de type "page template" qu'on appelle, pour garder la nomenclature,
"search\_slot". (noter la présence de <div metal:define-macro="searchBox">, pour
pouvoir l'appeler par here/search\_slot/macros/searchBox et respecter ainsi la
nomenclature du site Plone.).
\scriptsize
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<!-- The search box -->
<div metal:define-macro="searchBox">
<div class="box">
<h5>Rechercher</h5>
<div class="body">
<br>
<form name="searchform"
action="search"
tal:attributes="action string:${portal_url}/search" >
<input id="searchGadget"
name="SearchableText"
type="text"
size="16"
value=""
tal:attributes="value request/SearchableText|nothing;" />
<br><br>
<input class="context searchButton"
type="submit"
value="Search"
i18n:attributes="value" />
<br><br>
</form>
</div>
</div>
</div>
</body>
</html>
\end{verbatim}
\normalsize
\subsection{Organiser les slots}
A la racine de notre site Plone, on se trouve par défaut dans l'onglet "Contents",
il suffit d'aller sur l'onglet "Properties".
Il se présente ainsi :
\vspace{1cm}
\small
\begin{tabular}{|*{4}{l|}}
\hline
Name & textit{Value (exemple)} & Type & Explications\\
\hline
Title & \textit{Intranet} & string & le nom de du site Intranet\\
\hline
Description & \textit{Le site intranet} & text & \\
\hline
email\_from\_address& \textit{postmaster$@$localhost} & string &\\
\hline
email\_from\_name& \textit{Administrateur du Portail} & string & \\
\hline
validate\_email & \textit{~} & boolean & oui ou non\\
\hline
left\_slots& \textit{~} & lines & colonne à gauche \\
\hline
right\_slots& \textit{/here/navigation\_tree\_slot/macros/navigationBox} & lines
& navigation\\
& \textit{here/login\_slot/macros/loginBox} & & le login\\
& \textit{here/search\_slot/macros/searchBox} & & la recherche\\
& \textit{here/news\_slot/macros/newsBox} & & les 5 dernières news \\
\hline
\end{tabular}
\vspace{1cm}
\normalsize
On valide en utilisant le bouton "SaveChanges"
Voila, en cliquant sur l'onglet "View" on s'aperçoit que les slots
n'apparaissent plus qu'à droite des pages.
\section{Header et Footer}
\subsection{Le header}
Le fichier header original se situe dans l'objet PloneSite puis
portal\_skins/plone\_templates
\vspace{0.3cm}
Pour le comprendre le voici commenté
(l'indentation et le mode verbatim de \LaTeX ne permettent pas un rendu fidèle du
code):
\vspace{0.3cm}
\scriptsize
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head metal:define-macro="html_header"
tal:define="global portal_url here/portal_url;
ztu modules/ZTUtils;
current_skin python:ztu.make_query(skin=request.get(here.portal_skins.getRequestVarname(), ''))">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
tal:define="charset here/portal_properties/site_properties/default_charset|string:iso-8859-1"
tal:attributes="content string:text/html;;charset=${charset}" />
\end{verbatim}
\vspace{1cm}
\normalsize
Le titre de la page
\vspace{1cm}
\scriptsize
\begin{verbatim}
<title tal:define="portal_title here/portal_properties/title;
here_title python:test( portal_title != here.title_or_id()
, here.title_or_id()
, template.title_or_id());"
tal:content="string:$portal_title - $here_title">Title of page</title>
\end{verbatim}
\vspace{1cm}
\normalsize
Là où interviennent les "keyvalues" des pages (comparables aux métatags)
\vspace{1cm}
\scriptsize
\begin{verbatim}
<metal:block metal:define-slot="base" />
<meta tal:condition="here/listMetaTags|nothing"
tal:repeat="keyval here/listMetaTags"
tal:attributes="name python:keyval[0];
content python:keyval[1];" />
\end{verbatim}
\vspace{1cm}
\normalsize
Appel des css.
Les css sont des feuilles de styles (cascading style sheets)
\vspace{1cm}
\scriptsize
\begin{verbatim}
<!-- Basic crude style for Netscape4.x -
This can be removed if you don't want the special NS4 look
- it will still work, just be plain text instead. -->
<link rel="Stylesheet" type="text/css" href=""
tal:attributes="href string:$portal_url/ploneNS4.css" />
<!-- Main style sheets for CSS2 capable browsers -->
<style type="text/css" media="all"
tal:content="string: @import url(${here/portal_url}/plone.css?${current_skin});">
</style>
<!-- Custom style sheet if available -->
<style type="text/css" media="all"
tal:condition="exists: here/ploneCustom.css"
tal:content="string:@import url(${here/portal_url}/ploneCustom.css);"></style>
<!-- Style sheet used for printing -->
<link rel="stylesheet" type="text/css" media="print"
href="" tal:attributes="href string:$portal_url/plonePrint.css" />
<!-- Style sheet used for presentations
(Opera is the only browser supporting this at the moment) -->
<link rel="stylesheet" type="text/css" media="projection"
href="" tal:attributes="href string:$portal_url/plonePresentation.css" />
<link rel="shortcut icon" href="" type="image/x-icon"
tal:attributes="href string:$portal_url/favicon.ico" />
<link rel="home" href="" title="Front Page"
tal:attributes="href string:$portal_url" />
<link rel="search" href=""
title="Search this site"
tal:attributes="href string:$portal_url/search_form" />
<!-- Disable IE6 image toolbar -->
<meta http-equiv="imagetoolbar" content="no" />
<metal:block metal:define-slot="css_slot" tal:replace="nothing">
Inserts CSS specified from a page.
</metal:block>
<metal:block metal:define-slot="head_slot" tal:replace="nothing">
Flexibility for published templates to inject stuff into the head tag.
</metal:block>
<metal:block metal:define-slot="javascript_head_slot" tal:replace="nothing">
Inserts javascript specified from a page.
</metal:block>
\end{verbatim}
\vspace{1cm}
\vspace{1cm}
\begin{verbatim}
<!-- Common Plone ECMAScripts -->
<script type="text/javascript"
tal:attributes="src here/plone_javascripts.js/absolute_url">
</script>
<tal:block
tal:define="defaulttips python:here.portal_memberdata.getProperty('formtooltips');
showdefault python:test(defaulttips, 'true', 0);
formtooltips python:getattr(here.portal_membership.getAuthenticatedMember(),
'formtooltips', showdefault)"
tal:omit-tag="">
<script type="text/javascript"
tal:condition="formtooltips"
tal:attributes="src here/plone_formtooltip.js/absolute_url"></script>
<metal:block tal:condition="not:formtooltips">
<tal:block tal:replace="structure string:<script
language='javascript' type='text/javascript' >" />
<metal:block >function formtooltip(el,flag){}</metal:block>
<tal:block tal:replace="structure python:'</script>'" />
</metal:block>
</tal:block>
</head>
\end{verbatim}
\normalsize
\vspace{1cm}
Ici prennent fin les balises html <head></head> qui comme on a pu le voir
contiennent les métat-tags, les balises <title></title> ainsi que les appels des
css.
\vspace{1cm}
\scriptsize
\begin{verbatim}
<div metal:define-macro="portal_header"
i18n:domain="plone"
tal:define="portal_url here/portal_url;
ztu modules/ZTUtils;
current_skin
python:ztu.make_query(skin=request.get(here.portal_skins.getRequestVarname(),
''))">
<tal:block tal:condition="not: actions|nothing">
<span tal:define="global actions here/portal_actions/listFilteredActionsFor"
tal:replace="nothing" >
This is here just in case actions is not defined.
This would happen if you were calling from a DTML Document
</span>
</tal:block>
\end{verbatim}
\vspace{1cm}
\normalsize
Ci dessous le code de l'espace de recherche (la search box) :
\scriptsize
\vspace{1cm}
\begin{verbatim}
<div class="top">
<div class="searchBox">
<form name="searchform"
action="search"
tal:attributes="action string:${portal_url}/search" >
<input id="searchGadget"
name="SearchableText"
type="text"
size="20"
value=""
tal:attributes="value request/SearchableText|nothing;" />
<input class="context searchButton"
type="submit"
value="Search"
i18n:attributes="value" />
</form>
</div>
\end{verbatim}
\vspace{1cm}
\normalsize
Le logo du site (en haut à gauche) :
\vspace{1cm}
\scriptsize
\begin{verbatim}
<a href="/"
tal:attributes="href portal_url"
tal:define="logo here/logo.jpg;
uri logo/absolute_url" >
<img src="logo.jpg"
class="logo"
border="0"
alt=""
tal:attributes="width logo/width;
height logo/height;
src string:${logo/absolute_url}?$current_skin" />
</a>
</div>
\end{verbatim}
\vspace{1cm}
\normalsize
Les onglets du portail sont appelé par le code suivant :
\scriptsize
\vspace{1cm}
\begin{verbatim}
<hr size="" class="netscape4" />
<div class="tabs"
metal:define-macro="portal_tabs"
tal:define="portal_tabs actions/portal_tabs|nothing;
global selected_tabs python:here.selectedTabs(template.getId(), here);
selected_portal_tab selected_tabs/portal;" >
<metal:block tal:repeat="tab portal_tabs">
<a href="" class=""
tal:attributes="href tab/url;
class python:test(selected_portal_tab==tab['id'], 'selected', 'plain')">
<span tal:omit-tag="" i18n:translate="">
<span tal:replace="tab/name">dummy</span></span>
</a>
</metal:block>
</div>
\end{verbatim}
\vspace{1cm}
\normalsize
La barre comportant le nom de l'utilisateur loggué - le chemin vers son dossier
- l'accès au personnalize\_form (ses préférences) - l'action de se déconnecter
s'appelle "personnalBar"
Les actions définies des utilisateurs (membres ou non) sont donc appelées par le
code qui suit :
\scriptsize
\vspace{1cm}
\begin{verbatim}
<div class="personalBar"
metal:define-macro="personalBar"
tal:define="portal_url here/portal_url;
user_actions actions/user;
global_actions actions/global;
display_actions python:user_actions[:-1]+global_actions+user_actions[-1:];">
<a href=""
tal:omit-tag="not: here/portal_membership/getHomeFolder"
tal:condition="not:here/portal_membership/isAnonymousUser"
tal:attributes="href string:${here/portal_membership/getHomeUrl}">
<img tal:replace="structure here/user.gif" />
<span tal:replace="user/getUserName">john</span>
</a>
<span tal:condition="here/portal_membership/isAnonymousUser"
i18n:translate="you_are_not_logged_in">
You are not logged in</span>
<metal:block tal:repeat="action python:display_actions">
<a href=""
tal:attributes="href action/url">
<img tal:replace="structure here/linkOpaque.gif" />
<span tal:omit-tag="" i18n:translate="">
<span tal:replace="action/name">dummy</span></span>
</a>
</metal:block>
</div>
\end{verbatim}
\vspace{1cm}
\normalsize
Début de la barre de chemin (barre commençant par accueil et se poursuivant par
le chemin parcouru dans le Plone-site, chaque lieu passé est un lien) :
\scriptsize
\vspace{1cm}
\begin{verbatim}
<div class="pathBar"
metal:define-macro="pathBar"
tal:define="breadcrumbs python:here.breadcrumbs(here);
portal_url here/portal_url;">
<a href="#"
tal:condition="here/portal_membership/getHomeFolder"
tal:attributes="href string:${here/absolute_url}/addtoFavorites"
tal:define="addFavorite here/addFavorite.gif">
<img
tal:replace="structure python:addFavorite.tag(css_class='addFavorite',
title='Add this location to My Favorites')"
/>
</a>
<span tal:omit-tag="" i18n:translate="you_are_here">You are here:</span>
<span tal:condition="breadcrumbs" tal:omit-tag="">
<a i18n:translate="tabs_home" tal:attributes="href portal_url">Home</a>
<strong>»</strong>
</span>
<span tal:condition="not: breadcrumbs"
i18n:translate="tabs_home" tal:omit-tag="">
Home
</span>
<span tal:repeat="crumb breadcrumbs">
<metal:block tal:define="global is_last repeat/crumb/end" />
<a href="#"
tal:condition="python:not is_last"
tal:attributes="href python:crumb[1]"
tal:content="structure python:crumb[0]">crumb</a>
<strong tal:condition="python:not is_last"> » </strong>
<span tal:condition="python: is_last"
tal:content="structure python:crumb[0]">crumb</span>
</span>
</div>
<hr size="" class="netscape4" />
</div>
\end{verbatim}
\vspace{1cm}
\normalsize
Fin de la barre de chemin.
\scriptsize
\vspace{1cm}
\begin{verbatim}
<div class="message"
i18n:domain="plone"
metal:define-macro="portal_message"
tal:define="portal_message request/portal_status_message | nothing"
tal:condition="portal_message">
<img tal:replace="structure here/info.gif" />
<strong tal:content="portal_message" i18n:translate=""></strong>
</div>
\end{verbatim}
\normalsize
\subsubsection{Quelques modifications possibles :}
Pour l'interface de navigation :
\subsection{Le footer}
Le fichier "footer" original se situe aussi dans l'objet PloneSite puis
portal\_skins/plone\_templates
\subsubsection{Le bas de page se présente ainsi :}
\scriptsize
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<div class="footer" metal:define-macro="portal_footer" i18n:domain="plone"
tal:define="portal_url here/portal_url">
<a href="http://plone.org">
<img src=""
height="30"
width="96"
border="0"
alt="Powered by Plone"
title="This site was built using the Plone
Content Management System.Click for more information."
tal:attributes="src string:$portal_url/plone_powered.gif"
i18n:attributes="alt title" />
</a>
\end{verbatim}
\vspace{1cm}
\normalsize
Ci dessus le logo de Plone, que les auteurs demandent de laisser ou de remplacer
par un lien ou de créer une page évoquant la presence d'un Plone Site.
\scriptsize
\vspace{1cm}
\begin{verbatim}
<!--
Please keep the Plone Powered button (or a textual link to us) if you use
Plone on your site. It's a nice token of gratitude, and we appreciate your
help in promoting the Plone name.
Plone is powered by the combined forces of Zope and CMF, two absolutely
great systems made by Zope Corporation (http://zope.com) and they in turn
are based on the best programming language in the world - Python
(http://www.python.org). We owe these guys a lot, thanks for making Plone
possible!
-->
\end{verbatim}
\vspace{1cm}
\normalsize
Les contributeurs :
\scriptsize
\vspace{1cm}
\begin{verbatim}
<br />
<span i18n:translate="description_copyright" tal:omit-tag="">
Plone is Copyright © 2000-
<span i18n:name="current_year"
tal:define="now modules/DateTime/DateTime" tal:content="now/year" />
by
<span i18n:name="limi"><a href="http://limi.net">Alexander Limi</a></span>,
<span i18n:name="runyaga"><a href="http://www.runyaga.com">Alan Runyan</a></span>,
<span i18n:name="blacktar"><a href="http://blacktar.com">Vidar Andersen</a></span>.
</span>
\end{verbatim}
\vspace{1cm}
\normalsize
Mot de la fin ;)
\scriptsize
\vspace{1cm}
\begin{verbatim}
<hr size="" class="netscape4" />
<strong class="netscape4">
If you can read this text, it means you are not experiencing the Plone design at its best.
Plone makes heavy use of CSS, which means it is accessible to any internet browser,
but the design needs a
<a href="http://www.webstandards.org/upgrade/">
standards-compliant browser to look like we intended it</a>.
Just so you know ;)
</strong>
</div>
\end{verbatim}
\normalsize
\subsubsection{Quelques modifications possibles :}
Le rajout d'un lien vers le haut de la page :\\
<span class="description">Site Intranet de .... ---
<a href="javascript:window.scrollTo(0,0);">
Retour au Haut de la Page</a></span>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Avoir un slot de navigation (à la racine) en images}\label{sectionnavdeux}
Pour ne pas aller dans la ZMI pour créer et remplir ce slot de navigation, que l'on va
imaginer vertical, montrant seulement les répertoires de type 'Plone Folder', publiés et
présents à la racine du site. On va publier dans les répertoires concernés, un contenu de
type image appelé 'image.gif' qui est en réalité un bouton.
\subsection{le code}
\scriptsize
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="navdeuxBox"
i18n:domain="plone"
tal:define="isContainer here/isPrincipiaFolderish|nothing;
portal here/portal_url/getPortalObject;
global portal_url portal;"
tal:condition="python:test(not site_properties.allowAnonymousViewAbout and
site_properties.portal_membership.isAnonymousUser(), 0, 1)"
tal:omit-tag="">
<table>
<metal:block tal:repeat="obj python:here.portal_url.getFolderContents(suppressHiddenFiles=1)"
tal:condition="python:test(not site_properties.allowAnonymousViewAbout
and site_properties.portal_membership.isAnonymousUser(), 0, 1)" >
<tr>
<td>
<a href="#" tal:condition="python:obj.meta_type=='Plone Folder'"
tal:attributes="href string:${obj/absolute_url}/view">
<img src="image.gif" tal:attributes="src string:${obj/absolute_url}/image.gif" border="0"></a>
</td>
</tr>
</metal:block>
</table>
</div>
</body>
</html>
\end{verbatim}
\normalsize
\subsection{les remarques}
Pour que la page ne soit pas trop lourde il faut ajouter un RAMcache pour ces images.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{LES M\'ETADONN\'EES}\label{chap:metadonnees}
%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Utilité et Présentation}
Une des méthodes pertinentes pour améliorer la recherche de documents est
l'ajout de métadonnées à ces documents.
Les métadonnées sont des informations techniques et descriptives ajoutées à un
document pour mieux le qualifier (titre, auteur, date de publication, brève
description...).
Le schéma des métadonnées utilisé dans Plone par défaut est basé sur celui
proposé par l'organisation appelée Dublin Core Metadata Initiative (DCMI)
apparaissant dans Plone comme "Dublin Core".
Il existe d'autres types de schémas correspondant à des documents au contenu
plus pédagogique sont proposés en particulier le schéma Learning Object Mode
(LOM), issu de l'organisme de standardisation IEEE.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Les métadonnées dans Plone}
Elles se présentent donc d'après le schéma Dublin Core.\\
\vspace{1cm}
On peut remplir les champs suivants :
\begin{tabular}{|*{3}{l|}}
\hline
Nom dans Plone pour le manager & Pour l'utilisateur & Explications\\
\hline
Identifier & & chemin absolu du document ou dossier et nom (id)\\
\hline
Title & Titre & le titre du document\\
\hline
Description & Description & brève description\\
\hline
Subject & Mots clés & peuvent \^etre nouveaux, forcés...\\
\hline
Contributors & Contributeurs & \\
\hline
Creation Date & & non modifiable\\
\hline
Last Modified Date & & non modifiable\\
\hline
Effective Date & Date de publication & parution\\
\hline
Expiration Date & Date d'expiration & obsolète \\
\hline
Format & Format & par exemple text/html\\
\hline
Language & Langue &\\
\hline
Rights & Droits ou Copyright &\\
\hline
\end{tabular}
\vspace{1cm}
C'est donc dans l'objet portal\_metadata à la racine du site Plone que l'on peut
paramétrer les métadonnées et leurs entrées.
\textbf{Rappels sur l'onglet Elements = Update Element Metadata Policies}
Les éléments par défaut sont Subject, Rights, Format, Language, Description,
Title.
Pour chaque Content type (Evénement, Document, News...), on demande pour chaque
élément :
\begin{enumerate}
\item s'il est requis
\item d'entrer une réponse par défaut
\item de proposer la réponse par défaut
\item d'entrer des termes appelés "vocabulaire" (correspond à la liste des "subjects")
\item de forcer l'utilisation des termes du vocabulaire
\end{enumerate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Validator ou comment obliger l'entrée des métadonnées}
Pour comprendre cette méthode, un exemple est démonstratif :
%%%%%%%%%%%%%%%%
\subsection{Script validant la création d'un dossier}
Ce script se trouve dans portal\_skins/plone\_scripts/form\_scripts \\
et se nomme validate\_folder\_edit :
\begin{verbatim}
## Script (Python) "validate_folder_edit"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=Validates a folder edit_form contents
##
validator = context.portal_form.createForm()
validator.addField('title', 'String', required=1)
errors=validator.validate(context.REQUEST)
if errors:
return ('failure', errors,
{'portal_status_message':'Please correct the indicated errors.'})
return ('success', errors,
{'portal_status_message':'Your folder properties have been saved.'})
\end{verbatim}
Dans ce script on note que l'on peut rajouter pour chaque métadonnées que l'on
veut une ligne du type de : \\
\vspace{0.3cm}
\textit{validator.addField('title', 'String', required=1)}\\
\vspace{0.3cm}
En changeant la vérification du champ 'title' et le type de remplissage par les
champs pour lesquels on souhaite forcer le remplissage. \\
\vspace{0.3cm}
On peut donc rajouter :
\textit{validator.addField('description', 'Text', required=1)}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{L'aspect du formulaire d'édition doit montrer que le champ est
obligatoire}
Cela ne suffit pas car l'utilisateur ne saura pas que le champ doit \^etre rempli,
on va le
lui indiquer en changeant dans le formulaire le style du label du champ
description.
On va donc ouvrir /portal\_skins/plone\_forms/folder\_edit\_form, seul le code
concernant le champ description du formulaire est répété ci-dessous:
\scriptsize
\begin{verbatim}
<div class="row">
<div class="label">
<span i18n:translate="label_description">Description</span>
<div id="description_help"
i18n:translate="help_description"
class="help"
style="visibility:hidden">
Enter a brief description of the folder.
</div>
</div>
<div class="field"
tal:define="description request/description | here/Description ">
<textarea cols="40"
rows="5"
tabindex=""
name="description"
onfocus="formtooltip('description_help',1)"
onblur="formtooltip('description_help',0)"
tal:content="description"
tal:attributes="tabindex tabindex/next"
>
Description
</textarea>
</div>
</div>
\end{verbatim}
\normalsize
La seule chose à changer pour ajouter un point rouge à côté du label du champ
texte à remplir est :\\
\vspace{0.3cm}
\textit{<div class="label"> que l'on change en <div class="label required">}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CHAPITRE %%%%%%%%%%%%
\chapter{R\'EFLEXION SUR LES M\'ETADONN\'EES}\label{chap:reflmetadonnees}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Le concept}
Chaque utilisateur peut avoir (si on le décide voir l'onglet configuration de l'objet site Plone) un dossier personnel. C'est cette
possibilité qui va rendre la réflexion sur les métadonnées possible.
%%%
\subsection{Le contexte}
Imaginons que vous désirez :
\begin{itemize}
\item Un site intranet / extranet où des utilisateurs vont pouvoir publier des contenus
\item Un besoin de modération avant publication
\item Une idée de dossiers où, par thème (donné plus loin de niveau 0) puis sous-thème (donné plus loin comme niveau 1) un
utilisateur pourra publier ses contenus
\end{itemize}
%%%%
\subsection{Design de ce contexte}
\begin{enumerate}
\item Installation de Zope, installation des produits CMF et Plone
\item Création d'un manager pour le serveur Zope (dans le acl\_users de la ZMI)
\item Création d'un objet Plone Site (nommage...)
\item Création de quelques utilisateurs dans le acl\_users du site Plone créé (un manager, un relecteur, deux membres)
\item Passage à l'interface view du site Plone, se loguer en manager
\item Passage dans la boite de navigation sur la droite en "switch to content view"
\item Création des dossiers se rapportant aux thèmes de niveaux 0 par exemple comme titre "Biologie"
\item Paramétrage des métadonnées, pour pouvoir classer les contenus par thèmes de niveau 0, puis par sous-thèmes de niveau 1 qui
pourront \^etre par exemple "Biologie moléculaire", "Embryologie" et "Bactériologie"
\item Création des pages d'affichages (templates) qui correspondront à l'intérieur du dossier "Biologie" aux deux sous-thèmes de niveau
1.
\item Mise en place de ces templates dans le dossier "Biologie" pour qu'un membre (voire un anonyme par défaut) puisse se rendre dans la
rubrique "Biologie" et consulter la liste de tous les contenus correspondant à la "Biologie Moléculaire"
\end{enumerate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% section %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Les détails de la mise en oeuvre}
%%%
\subsection{Installations}
\begin{itemize}
\item On installe Zope, puis CMF et Plone comme décrit dans le chapitre sur les installations.
\item Dans la ZMI : on réalise :
\begin{itemize}
\item la création d'un manager de Zope dans le conteneur acl\_users
\item la création d'un objet Site Plone
\item à l'intérieur de ce site Plone on ajoute des utilisateurs dans le conteneur acl\_users
\end{itemize}
\item Notez qu'on peut Localiser le site Plone lors de
cette étape, comme toujours ajout d'un objet Localizer avec un message catalog Plone, ajout d'un objet Translation\_service avec comme
domaine par défaut Localizer/Plone.
\end{itemize}
%%%
\subsection{Adaptation de l'architecture du site Plone}
\begin{itemize}
\item On s'identifie en manager dans notre site Plone (via http://zopeserver:8080/monsiteplone/ par exemple).
\item On va se situer dans la zone de la bo\^ite de navigation et passer en mode "Switch to content view"
\item La liste de certains des dossiers contenus à la racine du site Plone s'affiche. Ajouter un dossier appelé "biologie" comme id, et
"Biologie" comme titre, remplir la description du dossier "Tous les contenus relatifs à la Biologie"
\end{itemize}
%%%
\subsection{Paramétrage des métadonnées}
\begin{itemize}
\item Se rendre dans la ZMI du site Plone (via http://zopeserver:8080/monsiteplone/manage par exemple)
\item Ouvrir portal\_metadata, se rendre sur l'onglet Elements (Update Element
Metadata Policies)
\item Si pour chaque type de contenu, on veut forcer l'édition des métadonnées,
et surtout l'édition du Sujet "SUBJECT" (selon l'appelation
Dublin Core), les mots clés dans l'appelation courante, il faut considerer les champs correspondants à "Content Type <default>"
\item Le paramétrage serait alors :\\
\begin{tabular}{|*{3}{l|}}
\hline
Nom du Champ & Action à réaliser & Explications \\
\hline
Supply default & Cocher ou non & Cocher si on veut proposer \\
& & quelque chose par défaut\\
\hline
Enforce Vocabulary & Cocher ou non & Obliger l'utilisation du vocabulaire \\
& & décrit dans Vocabulary\\
\hline
Required & Cocher ou non & Obliger la sélection d'au moins un \\
& & mot clé (subject)\\
\hline
Default & Ecrire une chaine de caractère ou non & Sera le mot clé proposé \\
& & par défaut\\
\hline
Vocabulary & Ecrire une liste de mots clés & Seront les mots clés proposés \\
& & (aller à la ligne pour changer de mot clé)\\
& & pour notre exemple, entrer :\\
& & Biologie Moléculaire \\
& & Embryologie \\
& & Bactériologie \\
\hline
\end{tabular}
\vspace{0,3cm}
\item Ne pas oublier de cliquer sur le bouton "Update" pour valider le
paramétrage
\end{itemize}
%%%
\subsection{Ecrire les pages templates pour le classement}
\subsubsection{Premier objectif :}
Le premier objectif est de faire une requête sur le sujet "Biologie moléculaire", pour ce faire :
\begin{scriptsize}
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
lang="en-US"
metal:use-macro="here/main_template/macros/master"
i18n:domain="plone">
<metal:block fill-slot="base">
<tal:block tal:define="dummy python:request.set('disable_border', 1)"
tal:replace="nothing">
Disable the tabs
</tal:block>
</metal:block>
<!-- Change the following line -->
<div metal:fill-slot="main"
tal:define="results python:request.get('subject',
here.portal_catalog.searchResults( Subject='Biologie moléculaire'
, sort_on='Date'
, sort_order='reverse'
, review_state='published'));"
tal:condition="python:test(results, 1, 0)">
<div>
<h1 tal:content="here/Title"> Le titre </h1>
<br><br>
<div>
<table align="center" width="90%">
<tr>
<td>Type</td>
<td>Titre</td>
</tr>
<tr tal:repeat="item results">
<span tal:define="object item/getObject">
<td>
<img tal:attributes="src string:${object/getIcon}">
<span tal:content="object/portal_type"> Type </span>
</td>
<td>
<a href=""
tal:attributes="href object/absolute_url">
<span tal:content="object/Title"> Titre </span>
</a>
</td>
</span>
</tr>
</table>
</div>
</div>
</div>
</html>
\end{verbatim}
\end{scriptsize}
\subsubsection{Deuxième objectif :}
Le second objectif sera de créer une page template, permettant l'affichage des contenus se
rapportant dans notre exemple à l'ensemble Biologie, à savoir Embryologie, Bactériologie et
Biologie moléculaire.
\begin{scriptsize}
\begin{verbatim}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
lang="en-US"
metal:use-macro="here/main_template/macros/master"
i18n:domain="plone">
<metal:block fill-slot="base">
<tal:block tal:define="dummy python:request.set('disable_border', 1)"
tal:replace="nothing">
Disable the tabs
</tal:block>
</metal:block>
<!-- Change the following line -->
<div metal:fill-slot="main"
tal:define="results python:request.get('subject',
here.portal_catalog.searchResults( Subject=['Biologie moléculaire','Embryologie','Bactériologie']
, sort_on='Date'
, sort_order='reverse'
, review_state='published'));"
tal:condition="python:test(results, 1, 0)">
<div>
<h1 tal:content="here/Title"> Le titre </h1>
<br><br>
<div>
<table align="center" width="90%">
<tr>
<td>Type</td>
<td>Titre</td>
</tr>
<tr tal:repeat="item results">
<span tal:define="object item/getObject">
<td>
<img tal:attributes="src string:${object/getIcon}">
<span tal:content="object/portal_type"> Type </span>
</td>
<td>
<a href=""
tal:attributes="href object/absolute_url">
<span tal:content="object/Title"> Titre </span>
</a>
</td>
</span>
</tr>
</table>
</div>
</div>
</div>
</html>
\end{verbatim}
\end{scriptsize}
\subsubsection{Troisième objectif :}
Le dernier objectif sera de créer une page d'accueil à l'intérieur de notre répertoire "Biologie",
permettant au visiteur du site de choisir les contenus de sous-thème ou tous les contenus du thème
qu'il veut consulter.
\textit{Première façon de procéder : }
\begin{itemize}
\item Créer une page d'accueil à l'objet "Biologie" par le bouton situé sur le site web en étant
loggué en manager (via http://zopeserver:8080/monsiteplone/ )
\item Editer cette page d'accueil et faire un lien vers chacune des pages templates déposées dans
le répertoire par exemple. (l'id de la page template est la cible dans le lien)
\begin{scriptsize}
\begin{verbatim}
<a href="biologie"> Tous les contenus du thème Biologie </a><br>
<a href="biomol"> Tous les contenus du sous-thème Biologie Moléculaire </a><br>
<a href="embryo"> Tous les contenus du sous-thème Embryologie </a><br>
<a href="bacterio"> Tous les contenus du sous-thème Bactériologie </a><br>
\end{verbatim}
\end{scriptsize}
\end{itemize}
\textit{Seconde façon de procéder plus esthétique et pratique (attention à ne pas confondre id et
titres): }
\begin{itemize}
\item Créer une page d'accueil (index\_html) à l'objet "Biologie" par le bouton situé sur le site web en étant
loggué en manager (via http://zopeserver:8080/monsiteplone/ )
\item Préparer pour chaque thème et sous-thème une image. L'id de l'image peut \^etre "biomol.png"
et le titre de l'image sera "biomol" Mettre ces images dans portal\_skins/custom/imgbio.
\item Préparer les pages templates pour le thème biologie. L'id de la zpt devra \^etre "biomol",
le titre pourra \^etre "Biologie moléculaire". Mettre les pages templates dans portal\_skins/custom/zptbio
\item Se rendre dans l'index\_html créé dans l'objet "Biologie". L'éditer et entrer la boucle :
\begin{scriptsize}
\begin{verbatim}
<body>
<div metal:fill-slot="main">
<div class="contentHeader">
<h1 tal:content="here/title_or_id">Title or id</h1>
</div>
<div class="body">
<span tal:repeat="maVariable container/portal_url/imgbio/objectValues">
<span>
<a href="" tal:attributes="href string:portal_url/zptbio/${maVariable/title}">
<img src="" tal:attributes="src string:portal_url/imgbio/${maVariable/id}" border="0">
</a>
</span>
</span>
</div>
</div>
</body>
\end{verbatim}
\end{scriptsize}
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Source (s) de l'article sur la gestion de parc avec Zope (tar.gz)
Source de la documentation (en GFDL) sur Pykota
coreblog2-fr.po