News aus verschiedenen Ordnern

  • Hallo ich bins mal wieder....

    habe folgendes Problem:
    in einem Ordner 1 mit dem unterordner "News" soll das Portlet für die news angezeigt werden mit nur den News aus diesem Unterordner des Ordners 1 angezeigt werden.
    in einem Ordner 2 soll dann das selbe sein nur wiederum hat dieser auch einen Unterordner "News" woraus diesmal news genommen werden sollen.

    also sprich ich bin in ordner 1, aus folgendem Pfad die news im portlet: Ordner1/News
    und dann bin ich in Ordner 2 , da aus diesem Pfad die news im portlet: Ordner2/News


    Bin da schon relativ weit, wollte das mit jeweils intelligenten Ordnern lösen da man diesen sagen kann woher sie welchen Artikeltyp nehmen sollen, allerdings stellt sich mir jetzt die Frage wie sage ich dem News Portlet dass die News aus den jeweiligen unterordnern nehmen soll.
    Hatte mir gedacht ok ich kann auch für jeden Ordner wo das so sein soll nen extra Portlet machen und dieses dann nur anzeigen wenn ich in dem Ordner bin, das geht ja wie ich in einem anderen Beitrag gelesen hab ^^.
    Allerdings weis ich nicht welche Angabe im portlet für den Pfad steht.

    Code
    <div metal:define-macro="portlet"
         tal:define="view context/@@news_view;
                     results python:view.published_news_items()[:5];
                     news_link view/all_news_link"
         tal:condition="python:test(template.getId()!='news' and results, 1, 0)">

    ich denke mal bei "news_link" müsste der pfad stehen oder?
    Hat jemand vlt. eine andere Lösung? Denn mehrere news portlets zu haben stell ich mir etwas unhandlich vor...

    Danke schonmal

    Greetz
    Seawolf

  • Also die News für das Portlet werden durch die Klasse NewsPortlet gesucht. Siehe dazu Plone2.5.2/CMFPlone/browser/portlet/news.py
    Dort findest du die Methode


    Wie man hier sehen kann werden alle veröffentlichten News die in der aktuellen Plonesite gefunden werden ausgegeben.

    Somit kommst du nicht umhin den Code für das News-Portlet selbst zu schreiben. Eine mögliche Variante wäre die, dass dein neues Portlet im aktuellen Ordner nach einem Folder mit der ID 'news' sucht und diesen ausgibt.

    Ich sehe also nur ein eigenes Portlet als gangbare Variante.

    Torty

    "Carpe Diem" powered by positiv Feelings

  • ok soweit ist das klar.

    kann man irgendwo sehen welche Parameter die funktion self.request.get(...)
    erwartet?

    gibt es eine funktion die mir dennOrdner liefet in dem ich grade bin?

    mein Ansatz wäre folgender:

    Code
    return self.request.get('here/news', 
                                    portal_catalog.searchResults(portal_type='News Item',
                                                                 sort_on='Date',
                                                                 sort_order='reverse',
                                                                 review_state='published'))

    bezweifle aber das es so einfach ist.

    Danke dir mal wieder ^^, du hilfst mir hier aus vielen Sackgassen, very thx

    Greetz
    Seawolf

  • Nein das klappt nicht, aber du bringst mich da auf eine Idee, die ich auch übersehen hatte.
    Die Methode get() erwartet 2 Parameter:
    1.) Name des Key/Attribut des Objektes auf das es angewendet wird
    2.) einen Defailt-Wert, falls der Key nicht gefunden wird

    In deinem Fall sieht also die kürzeste Möglichkeit so aus:
    1.) eigenes Script ermittelt die News aus dem news-Folder im aktuellen Context
    2.) diese Liste an Brains wird in REQUEST als Key 'news' gespeichert

    Dadurch findet die get-Methode im Portlet deine News-Liste und verwendet nicht die Catalog-Anfrage wie oben gesehen.

    Ich weiß das klingt etwas kompliziert, aber damit kann das Standard-News-Portlet verwendet werden und ich denke das ist auch so vorgesehen.

    Ich hab zur Sekunde wenig Zeit, aber ich probiere das heute noch aus, denn das interessiert mich auch sehr.

    stay tuned

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Ok - es ist geschafft.

    Ich habe also ein Mini-Script geschrieben, welches ab dem aktuellen Ordner nach News schaut.
    Um das Script zu nutzen macht folgendes:
    * unter portal_skins/custom ein neues PageTemplate mit der ID my_news_portlet erstellen
    * Inhalt löschen und durch untenstehenden Code ersetzen
    * speichern
    * in den Properties eurer Plonesite (also im Plonesite Root) im Feld right_slots den Macroaufruf

    Zitat

    here/portlet_news/macros/portlet


    ersetzen durch

    Zitat

    here/my_portlet_news/macros/portlet


    * speichern

    Das Verhalten des neuen Portlet ist dabei wie folgt:
    Struktur:


    Das Script sucht nach allen veröffentlichten News ab dem aktuellen Pfad abwärts. Daraus ergibt sich nun folgende Portlet-Ausgabe in Abhängigkeit zum aktuellen Pfad:

    Code
    Pfad      -->  Anzeige
    --------------------------------
    /             "Item 1" bis "Item 5"
    /news1        "Item 1"
    /ordner-1     "Item 2" + "Item 3"
    /ordner-2     "Item 4" + "Item 5"
    /ordner-3     ---


    Das sollte doch das sein was du gern möchtest - oder?

    Der Code des Mini-Script my_portlet_news lautet:

    Torty

    "Carpe Diem" powered by positiv Feelings

  • hiho Torty cool, hatte gestern versucht die news.py umzuschreiben das es funzt ... naja allerdings erfolglos ^^

    deine Lösung is super damke dir, muss jetzt nur mal schauen wie es geht das ich dann nur den ertsen Ordner abwärts schaue.

    also folgender maßen

    Ordner Auto
    --> Tuning (da befinde ich mich mal)
    ----> Polo
    ----> Golf
    --> News (daraus dann die news)

    aber denke das geht ^^

    danke dir supi ^^

    Greetz
    Seawolf

  • Torty - das ist ganz groß! (ehrlich)

    Sowas hätte ich schon per default von Plone erwartet, aber mich nicht getraut zu fragen, weil ich dachte ich sei der einzige, der unterschiedliche News veröffentlichen will...

  • Zitat von Seawolf-371

    muss jetzt nur mal schauen wie es geht das ich dann nur den ertsen Ordner abwärts schaue.


    Du meinst also dass er nur 1 Level tiefer geht und nicht alle News aus den Unterorndern mit ausgibt?

    Schau dir dazu mal die Optionen an die du mit der Catalog-Anfrage mitgeben kannst. Speziell die zum ExtentedPathIndex.

    Torty

    "Carpe Diem" powered by positiv Feelings

  • hi torty naja so ungefähr ich meinte eigentlich so:


    wenn ich mich in einem Unterordner von Auto befinde soll er mir alle news, und nur diese, aus dem ordner Auto und abwährts ausgeben (also prinzipell das was du hast aber auch für die unterordner)

    sollte ich mich hingegen in einem unterordner von Flugzeug oder direkt in diesem Ordner befinden dann alle News aus dem ordner Flugzueg und abwärts...

    hoffe das war verständlicher, ich schreib meistens alles komplizierter als es is ^^

    hab mir den ExtendedPathindex mal angeschaut ... mit depth kann man ja festlegen ab wo er die news nehmen soll ... also ich bin Ordner 1 dann geht er zum bsp. max 2 level tiefer und gibt alles bis dahin gefundenes aus ...


    mein derzeitigesd Problem hab ciuh aber damit ncih s richtig lösen könn
    also das er immer alle news aus dem ersten Ordner nimmt.

    ploneInstanz/Auto -> wenn ich mich heir befinde, alle News ab auto abwärts
    ploneInstanz/Auto/Golf/ -> wenn ich mich heir befinde, alle News ab auto abwärts
    ploneInstanz/Auto/Golf/GTI -> wenn ich mich heir befinde, alle News ab auto abwärts
    ploneInstanz/Auto/Golf/GTI/Getriebe -> wenn ich mich heir befinde, alle News ab auto abwärts

    ploneInstanz/Flugzeug -> wenn ich mich heir befinde, alle News ab Flugzeug abwärts
    ploneInstanz/Flugzeug/Armee/ -> wenn ich mich heir befinde, alle News ab Flugzeug abwärts
    ploneInstanz/Flugzeug/Armee/Tornado -> wenn ich mich heir befinde, alle News ab Flugzeug abwärts
    ploneInstanz/Flugzeug/Armee/Tornado/Bewaffnung -> wenn ich mich heir befinde, alle News ab Flugzeug abwärts

    ich weis z.Zt. nciht wie ich der sich ständig ändernden Tiefe begegnen soll....

    und in jedem der Ordner nen Anderes Portlet wo die Tiefe hard gecoded ist würde zwar gehn, aber kann ja nich die Lösung sein oder?

    Greetz
    Seawolf

  • Naja - macht das mein Mini-Script doch so.
    Hier nochmals das Verhalten:


    und die Ausgabe dazu passend :

    Code
    Pfad      -->  Anzeige
    --------------------------------
    /             "Item 1" bis "Item 6"
    /news1        "Item 1"
    /ordner-1     "Item 2" + "Item 3"
    /ordner-2     "Item 4" + "Item 6"
    /ordner-2-1   "Item 6"
    /ordner-3     ---

    Sollte doch das sein was du suchst.

    Torty

    "Carpe Diem" powered by positiv Feelings

  • hi Torty ... wir reden an einander vorbei ;)

    naja hab jetzt ne Lösung gefunden ich mach für die Hauptordner, aslo Auto, Flugzeug usw. jeweils nen Portlet und code da den Pfad hart rein und dann auf Level 0 dann gehts ^^.

    das Script von dir is spitze und es passte ja auch fast ^^, denn es suchte wie du sagtest ja ab dem aktuellen Ordner abwärts. allerdings wollte ich das es ab dem ersten Ordner im pfad abwärts sucht.

    es ist nicht leichrt für mich Dinge zu beschreiben ^^. hoffe das ging jetzt.

    Danke dir nochmal

    Greetz
    Seawolf