Datei mit Objekt abspeichern

  • Hallo, ich habe ein Problem für das es bestimmt schon Lösungen gibt. Wär nett wenn jemand einen Tipp hätte.
    Ich möchte, dass zusammen mit einem vorgefertigten Objekttyp auch Dateine, wie zum Beispiel Bilder oder pdfs hinterlegt werden und einem Objekt zugeordnet werden können. Als ganz primitiven Ansatz wollte ich realisieren, dass das Anzeige Template nachsieht, ob eine Datei mit gleicher id nur mit angehängtem .pdf existiert, und falls ja einen Link ausgibt:

    <tal:block tal:define="resultObject result/getObject">
    <p class="body" tal:define="pdfpath string:${resultObject/absolute_url}.pdf">
    .
    .
    .
    <b tal:condition="exists:path:pdfpath" tal:replace="pdfpath">pdfpath[/b]
    .
    .
    ...

    Die condition wird aber immer als wahr ausgewertet. Kann ich die absolute url wieder in einen Pfad zurückbauen der verstanden wird? Und weiss noch jemand von anderen Konzepten, mit denen man dieses Problem angeht?

    Dank im Voraus

  • Der Code st ziemlicher Murks.

    Wenn Du eine Catalog Abfrage machst und dann gleich das Objekt anziehst...was ist der Sinn der Kataloganfrage dann? Die Katalogabfrage ist eine optimierte Suche und erspart Dir das Laden von Objekten aus der ZODB. Das Objekt via getObject() wieder zu laden bringt nichts und ist unnötig.


    """
    <tal:block tal:define="resultObject result/getObject">
    <p class="body" tal:define="pdfpath string:${resultObject/absolute_url}.pdf">
    """

    resultObject hat Methoden, um auf die URL den Pfad des referenzierten Objektes zuzugreifen (getURL(), getPath()).

    Wenn Du überprüfen willst, ob in einem bestimmten Ordner, dessen Objekt Du hast ein Objekt mit einer bestimmten ID vorhanden ist machst Du dies am besten via

    some_id in folderobject.objectIds()

    -aj

  • Erstmal danke für die Antwort.

    Zitat

    Wenn Du eine Catalog Abfrage machst und dann gleich das Objekt anziehst...was ist der Sinn der Kataloganfrage dann? Die Katalogabfrage ist eine optimierte Suche und erspart Dir das Laden von Objekten aus der ZODB. Das Objekt via getObject() wieder zu laden bringt nichts und ist unnötig.


    Meinst du damit die erste Zeile:
    <tal:block tal:define="resultObject result/getObject">
    oder die darauf folgende?
    Die erste Zeile ist nicht von mir sondern Teil des Anzeige-Templates das ich modifizieren will. Das lasse ich lieber wie es ist.
    Den Vorschlag some_id in folderobject.objectIds() zu verwenden ist mir leider nicht gelungen? Ich nehme an du meinst sowas wie:
    <b tal:condition=python:[some_id in folderobject.objectIds()]">
    ?

    Deswegen habe ich es erstmal so gemacht:

    Code
    <tal:block tal:define="resultObject result/getObject"> 
    <p class="body" tal:define="pdfpath string:${resultObject/absolute_url}.pdf">
    
    
    <tal:block repeat="files here/../bibfiles/getFolderContents">
      <tal:block define="pdfid files/getId">
        <b tal:condition="python: pdfpath == pdfid" tal:replace="pdfpath">pdfpath[/b]
      </tal:block>
    </tal:block>
    </p>


    Auch murrks?

  • Ich habe das Problem jetzt auf eine andere Art gelöst. Ich habe die Plone-Eigenen Verweise verwendet.
    Indem man /portal_skins/plone_scripts/computeRelatedItems leicht modifizert, erhält man von dieser Funktion alle backreferences auf ein Objekt. Mit dem Macro portal_skins/plone_content/document_relatedItems und der modifizierten computerelatedItems kann man so alle Objekte anzeigen lassen, die Referenzen auf ein gegebens Objekt enthalten. Das ist genau was ich gesucht habe.
    Ich poste mal lieber keinen Code um den Blutdruck gewisser Nutzer nicht in ungesunde Höhen zu treiben und beschimpfungen per PN zu entgehen.