IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zope Python Discussion :

variable / fixe


Sujet :

Zope Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut variable / fixe
    slt tout le monde,
    En faite, pour recuperer une partie du texte d'un document de titre "focus", on doit utliser ça:

    <DIV class="ZoneTextBasGauche"
    tal:define="focus python:getattr(here,'focus',None);
    text python: focus.CookedBody(stx_level=2)[:150];
    title python:focus.Title().upper()">
    <div class="focus">
    <span class="A" tal:content="string:[ $title ]">recuperer le titre de document</span>
    </div>
    <div tal:content="structure text" >recuperer la partie du texte
    </div>
    </DIV>
    mais ce que je veux avoir , ce la meme resultad sauf que le document ou je doix recuperer la partie de texte est variable, par exemple"variable"(il peut etre 'focus' comme il peut etre un autre document)
    mon probleme que j'arriver pas à trouver la bon syntaxe pour dire un document variable
    J'ai essayer ça :

    <DIV class="ZoneTextBasGauche"
    tal:define="focus python:getattr(here,variable,None);
    text python: variable.CookedBody(stx_level=2)[:150];
    title python:variable.Title().upper()">
    <div class="variable">
    <span class="A" tal:content="string:[ $title ]">recuperer le titre de document</span>
    </div>
    <div tal:content="structure text" >recuperer la partie du texte
    </div>
    </DIV>
    mais ça pas marché
    si vous pouvez m'aider, je serai trop reconnaissant
    merdi d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Je crois que dans votre cas, le plus simple est de créer une fonction python (dans un script ou dans un produit) qui renvoie l'objet que vous voulez utiliser.
    Dans ce cas, votre zpt ressemblera à :

    <DIV class="ZoneTextBasGauche"
    tal:define="focus python:context.getFocusObject();
    text python: focus.CookedBody(stx_level=2)[:150];
    title python:focus.Title().upper()">
    etc etc etc
    </DIV>
    Bon courage,
    pascal de oliveira
    RamaPlus

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    merci pour ta reponse mais, j'ai deja creer mon script python(getCasClient.py), et j'ai reussi a recuperer son Title mais part contre je n'arriver pas à recuperer son contenu(texte)

    from Products.CMFCore.utils import getToolByName
    import random
    catalog = getToolByName(context, 'portal_catalog')
    # contruire sa requete
    results = catalog.searchResults(path = {'query' :
    '/'.join(context.getPhysicalPath()) },

    portal_type = ['Folder','Event',],
    )

    i = random.choice(results)
    return i
    pour le title j'ai que faire ça :
    <div class="titreCasClient" tal:define="Objet container/getCasClient" tal:content="Objet/Title"> Cas client </div>
    alors, est ce qu'ilya quelqu'un parmi vous qui save la réponse ou qui pourra me proposer une autre idée
    merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut Tu n'as pas accès à l'objet mais à un "pointeur" vers ce dernier
    pdeoliveira t'a donné la solution.
    il faut depuis un script récupéré l'objet, comme celà tu accèderas à ses propriétés.
    Or tu fais une requête dans le catalog de ton Zope. Ce dernier te retourne une liste de brains, c'est à dire des indexs vers tes objets mais non les objets eux mêmes. C'est une erreur classique d'autant plus insidieuse que tu crois avoir un lien vers l'objet car tu récupères son attribut Title. Mais c'est un leurre car en fait tu récupères le Title qui est indexé dans le catalog de Zope car c'est une méta-data. Donc contrairement à ce que tu pourrais croire tu n'as toujours pas accès direct à l'objet. Fais le test avec description, ou la date de dernière modif, le catalog te les renverras.

    Ce que tu peux faire dans ta zpt tu crées un lien vers l'objet depuis le résultat du catalog :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    1 - requete catalog :
     
    results = catalog.searchResults etc...
     
    2 - tu as un tal repeat pour chaque objet de results ici par exemple :obj
     
    <tal:block tal:repeat="obj results">
     
    3 - tu récupères l'objet depuis le brain remvoyé par le catalog (ici : obj)
     
    <div tal:define="o python:obj.getObject();
                   text python:o.CookedBody(stx_level=2)[:150];">
     
    tu as maintenant ton objet il s'appelle o, tu peux jouer avec
    Voilà @++

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    Merci pour votre reponse.
    Voila, j'ai essayer ce que vous m'avez dis, en faisant :
    <div class="titreCasClient"
    tal:define="Objete container/getCasClient;
    o python:objete.getObject()">
    <div tal:define= "titre python:o.Title()"
    tal:content="titre"> Cas client
    </div>

    <DIV class="textCasClient"
    tal:define="texte python:o.CookedBody(stx_level=2)[:150];">

    <div tal:content="structure texte" >...</div>
    </DIV>
    </div>
    et voila mon script python qui envoie bien ce qu'on veut
    (il m'envoie un seul objet d'une maniere aleatoire, ce pour cela que je n'utilise pas de tal:repeat dans la ZPT)
    from Products.CMFCore.utils import getToolByName
    import random
    table = []
    catalog = getToolByName(context, 'portal_catalog')
    # contruire sa requete
    results = catalog.searchResults(path = {'query' :
    '/'.join(context.getPhysicalPath()) },

    portal_type = ['Folder','Event',],
    )

    i = random.choice(results)
    return i

    et voila ce qui me donner comme erreur
    Expression: <PythonExpr objete.getObject()>
    je ne sais pas vrement quoi faire

  6. #6
    Membre habitué Avatar de HexChit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    objete??? C'est pas object plutot? lol
    et puis si tu define Objete et que tu utilises objete ca marchera peut etre pas ^^

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    voila :
    <div
    tal:define="objete container/getCasClient;
    o python:objete.getObject()">
    <div class="titreCasClient" tal:define= "titre python:o.Title()"
    tal:content="titre"> Cas client
    </div>

    <DIV class="textCasClient"
    tal:define="texte python:o.CookedBody(stx_level=2)[:150];">

    <div tal:content="structure texte" >...</div>
    </DIV>
    </div>
    mais ça donner rien de tout, voila l'erreur
    Expression: <PythonExpr o.CookedBody(stx_level=2)[:150]>
    je crois que j'ai pas reussi encore à recupérer l'objet

  8. #8
    Membre habitué Avatar de HexChit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    Je peux peut etre me tromper mais est ce que le define de o n'aurait pas une portée limitée?

    Si tu met ton define="texte o.machin()" dans le meme bloc que define="o objete.getObject()" est ce que cela marcherait mieux???

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut oulla !
    Pour HexChit
    la portée est valable car o est déclaré dans le premier div qui englobe les autres.

    Bon plusieurs points :

    mais ça donner rien de tout, voila l'erreur
    Citation:
    Expression: <PythonExpr o.CookedBody(stx_level=2)[:150]>
    je crois que j'ai pas reussi encore à recupérer l'objet
    a mon avis tu as l'objet, sinon tu aurais eu une exception au niveau de o.Title

    Bref pour t'en assurer commente le div de o.description.

    Si ça gaze c'est que tu as bien ton objet.

    D'ailleurs je n'avais pas fait gaffe que tu ne remontais qu'un seul brain de ton catalog. tu devrais directement faire retourner ton objet o depuis le script.
    Mais bon ce n'est pas bien grave. tu fignoleras après.

    2- je crois plutôt que ton objet retourné n'a pas de champs body d'ou l'échec de CookedBody() qui est une méthode qui t'éviteras les problèmes d'encodage.

    Parce que ta requête au niveau du catalogue elle filtre les objets de type "Folder" et "Event".
    Quelle est ta version de Plone ?
    Parce qu'en plone 2.0 les folder et event n'ont pas de champ Body.

    Donc vérifie bien que tes objets retournés ont le champ que tu veux afficher.

  10. #10
    Membre habitué Avatar de HexChit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    oui désolé je ne connais pas du tout Plone : je travaille avec Zope tout court et puis je ne suis que débutant
    Dailleur si tu t'y connais autant en Zope qu'en Plone peut être que tu pourrais m'aider

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut
    Tu n'as pas à être désolé !

    J'ai mis ça pour que ça serve à d'autres, et non pour le "plaisir" de te reprendre.
    D'ailleurs le oulaa du titre n'était pas pour ça mais pour le o.CookedBody.

    Pour ce qui est de l'aide postes toujours on verra bien.
    En tout cas si je peux ce sera avec plaisir
    @++

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    je travaille sur plone 2.1.2
    ahhhhhhhhhh
    je crois que voua avez raison sur le faite que mes objets n'ont pas tous de body
    j'avoue que je les a pas tous rempli, mais normalement en cas ou le body est vide, il nous affiche un vide comme meme et pas un erreur, vous pensez pas ?????????

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut ben ça dépend
    Il ya deux choses différentes :
    1 le fait que le champs body existe.
    2 le fait qu'il soit rempli.

    Pour le premier soit tu fais un test pour savopir s'il existe ou alors c'est plutôt ce que je ferais tu vérifies son type.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <block tal:define="types_without_body python:['Folder', 'etc'];
              with_body python:o.Type not in types_without_body">
    <div tal:condition="with_body"
           tal:replace="structure python:o.cookedbody(etc)"/>
     
    </block>
    @++

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    j'ai vider un objet et j'ai appliquer dessus le cookebody et ça marche(il m'affiche pas un erreur)

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    je remarque que lorsque je travailler avec un objet bien defini comme par exemple 'focus', mon code n'affiche pas des erreurs, par contre lorsque j'introduit un objet variable qui changer tous le temps, là ça casse
    je crois que l'erreur est dans la syntaxe utilisé

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    c bon, je trouve la solution
    wahouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    j'attire votre attention qu'on pourra pas appliquer un CookedBody sur un folder.
    merci pour tout les personnes qui m'ont aidé
    je vous aiment tous
    A bientot

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par malmzi2007
    c bon, je trouve la solution
    wahouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    j'attire votre attention qu'on pourra pas appliquer un CookedBody sur un folder.
    merci pour tout les personnes qui m'ont aidé
    je vous aiment tous
    A bientot
    Merci de porter mon attention sur le fait que les folder n'ont pas de champ body et que donc cookedBody ne peut s'appliquer.
    Mais si tu avais lu ma réponse d'hier à 16h56 c'est ce que j'avais écrit.

    jpcw2002 à écrit :
    2- je crois plutôt que ton objet retourné n'a pas de champs body d'ou l'échec de CookedBody() qui est une méthode qui t'éviteras les problèmes d'encodage.

    Parce que ta requête au niveau du catalogue elle filtre les objets de type "Folder" et "Event".
    Quelle est ta version de Plone ?
    Parce qu'en plone 2.0 les folder et event n'ont pas de champ Body.

    Donc vérifie bien que tes objets retournés ont le champ que tu veux afficher.
    Tu aurais gagné 24 heures
    lol !

    Donc si ton random choppait un folder = pas bon.

    En plus pour éviter ça je t'ai craché le code ZPT qui t'évitait ce désagrément, un quart d'heure plus tard !

    Sinon de rien, mais essaye de lire un peu mieux les prochaines réponses, tu gagneras du temps ! et moi j'aurai pas l'impression d'écrire dans le vide
    lol
    @++

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    merci encore
    pour ton message, je crus que tu parler de plone 2.0 et du coup je penser que les folder et les event ont un body.
    désole pour la mal entendu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Déclaration variable fixe
    Par IL-MAFIOSO dans le forum VB.NET
    Réponses: 12
    Dernier message: 15/04/2013, 16h21
  2. Réponses: 2
    Dernier message: 20/05/2009, 23h22
  3. [BO 5.1.8] Création d'une variable fixe
    Par raoudi57 dans le forum Débuter
    Réponses: 7
    Dernier message: 07/08/2008, 10h37
  4. select avec des variables fixes
    Par Smix007 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 01/04/2008, 11h02
  5. [Runtime] Récupération d'une variable fixée dans un .bat
    Par seiryujay dans le forum API standards et tierces
    Réponses: 18
    Dernier message: 16/10/2006, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo