<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Georges Racinet a écrit :
<blockquote cite="midDFDB9EE3-08C7-4E25-9F00-D0D57A101176@nuxeo.com"
type="cite"><br>
On Aug 9, 2006, at 10:48 AM, Christophe Otton wrote: <br>
<br>
<blockquote type="cite">Bonjour, <br>
<br>
Sur un CPS 3.2.4.0 et Zope 2.7.5 <br>
J'ai créé deux sites cps avec un chacun un produit dans lequel est
défini un chemin de stockage externe pour les fichiers attachés des
types : file, news et flexible. <br>
Pour les deux premiers pas de pb mais pour les flexibles le
'disk_storage_path' est défini uniquement dans un script : <br>
AttachedFileWidgetPatch.py avec la ligne : <br>
<br>
ExtendedWidgets.CPSAttachedFileWidget.field_inits[0]['disk_storage_path']
= 'var/StoSite1' <br>
et 'var/StoSite2' pour le deuxième site. <br>
<br>
Evidemment, le dernier produit installé défini le chemin de stockage
pour les docs flexibles des deux sites. <br>
J'ai donc essayé de trouver un endroit où modifier ce chemin uniquement
pour le site : <br>
D'après la doc de CPSSchema les champs CPS Disk File ont une propriété
'disk_storage_path' apparemment définie dans le schéma du document mais
les doc flexibles n'ont pas de schema ; Toujours d'après la doc, si
cette propriété n'est pas définie c'est la valeur du portal_schemas qui
est utilisée ? Mais je ne sais pas où est définie cette valeur. <br>
</blockquote>
<br>
Si, il y a un schéma (flexible), qui est créé dans le document au
moment de l'ajout du premier widget flexible par recopie de celui qui
est dans portal_types, qui sert donc de point de départ. <br>
<br>
Lorsque l'on ajoute un widget flexible, les champs nécessaires sont
créés dans ledit schéma, en fonction du type de widget créé. C'est
l'attribut de classe <br>
"field_types" qui sert à déterminer quels types de champs créer. <br>
<br>
<br>
En CPS 3.4 (je ne suis pas sûr pour 3.2), les propriétés des champs
sont de plus initialisées en fonction de l'attribut "field_inits".
Voici un extrait de CPSSchemas/ExtendedWidgets.py: <br>
<br>
class CPSAttachedFileWidget(CPSFileWidget): <br>
"""AttachedFile widget.""" <br>
meta_type = 'AttachedFile Widget' <br>
<br>
field_types = ('CPS File Field', # File <br>
'CPS String Field', # Plain text for indexing
(optional) <br>
'CPS File Field', # Preview (HTML, optional) <br>
'CPS SubObjects Field',) <br>
<br>
field_inits = ({'is_searchabletext': 0, <br>
'suffix_text': '_f1', # _f# are autocomputed field
ext <br>
'suffix_html': '_f2', <br>
'suffix_html_subfiles': '_f3', <br>
}, <br>
{'is_searchabletext': 1}, {}, {}, <br>
) <br>
<br>
Lorsque l'on ajoute un widget flexible de type (meta_type)
"AttachedFile Widget" il y a donc creation de 4 champs. Le premier (le
CPS File Field) portera les références aux autres, le second est
indexable full text et rien de particulier pour les autres. <br>
<br>
Pour faire ce que vous voulez le plus simple est de créer un nouveau
type de widget héritant de celui-là portant les bons paramètres
(disk_storage_path sur le Disk File Field) <br>
<br>
</blockquote>
Merci de votre réponse,<br>
Voilà ce que j'en ai fait en essayant de faire au plus simple (j'ai un
peu de mal avec le python...) <br>
J'aimerais bien quand même une confirmation de la validité de la manip
avant de la mettre sur le serveur en production - bien que ça m'ait
pris une journée de réflexion et 3h de travail, ça me semble qd même un
peu trop simple.<br>
<br>
Donc sur le site 1:<br>
J'ai laissé le patch complet du CPSAttachedFileWidget qui si je
comprends bien patch pour tous les sites :<br>
<blockquote><i>from Products.CPSSchemas import ExtendedWidgets<br>
</i></blockquote>
<blockquote><i><br>
field_types = ('CPS Disk File Field', 'CPS String Field', 'CPS File
Field')<br>
<br>
ExtendedWidgets.CPSAttachedFileWidget.field_types = field_types<br>
ExtendedWidgets.CPSAttachedFileWidget.field_inits[0]['disk_storage_path']
= 'var/storage'<br>
</i></blockquote>
Pour le site 2 : J'ai créé : <br>
<blockquote>un nouveau widget basé sur CPSAttachedFileWidget en mettant
dans mon produit un getCustomDocumentWidget.py comme ça (Facteau c'est
mon Site2):<br>
<blockquote><i>"""Return custom layouts types."""<br>
widgets = {<br>
'AttachedFileFacteau Widget': {<br>
'type': 'CPS AttachedFile Widget Type',<br>
'data': {<br>
'field_inits':{<br>
'disk_storage_path':'var/facteau',<br>
},<br>
},<br>
},<br>
}<br>
return widgets</i><br>
</blockquote>
</blockquote>
<blockquote>et un nouveau layout pour 'flexible_content'<br>
<blockquote><i>flexible_content_layout = {<br>
'widgets': { .../...<br>
</i>
<blockquote><i>'attachedFileFacteau': {<br>
'type': 'AttachedFileFacteau Widget',<br>
'data': {<br>
'title': 'cpsdoc_flex_attachedFile_title',<br>
'fields': ('?',),<br>
etc...<br>
</i></blockquote>
et<br>
<i>'layout': {</i><br>
<i> 'style_prefix': 'layout_default_',</i><br>
<i> 'flexible_widgets': ('textimage:10', 'link',
'attachedFileFacteau:10'),</i><br>
etc..<br>
</blockquote>
</blockquote>
Après un test rapide ça a l'air de fonctionner, mais j'ai un encore un
petit doute... <br>
<br>
<blockquote>
<blockquote>
<blockquote></blockquote>
</blockquote>
</blockquote>
<blockquote cite="midDFDB9EE3-08C7-4E25-9F00-D0D57A101176@nuxeo.com"
type="cite">
<blockquote type="cite"><br>
Est ce quelqu'un a une idée pour résoudre le pb ? <br>
<br>
Merci d'avance <br>
<br>
_______________________________________________ <br>
cps-users-fr <br>
Adresse de la liste : <a class="moz-txt-link-abbreviated"
href="mailto:cps-users-fr@lists.nuxeo.com">cps-users-fr@lists.nuxeo.com</a>
<br>
Gestion de l'abonnement :
<a class="moz-txt-link-rfc2396E"
href="http://lists.nuxeo.com/mailman/listinfo/cps-users-fr"><http://lists.nuxeo.com/mailman/listinfo/cps-users-fr></a>
<br>
</blockquote>
<br>
--------- <br>
Georges Racinet Nuxeo SAS <br>
<a class="moz-txt-link-abbreviated" href="mailto:gracinet@nuxeo.com">gracinet@nuxeo.com</a>
<a class="moz-txt-link-freetext" href="http://nuxeo.com">http://nuxeo.com</a>
<br>
Tel: +33 (0) 1 40 33 71 73 <br>
<br>
<br>
<br>
<br>
</blockquote>
<br>
<br>
</body>
</html>