Portlet nur auf bestimmten Seiten anzeigen lassen

  • Hi Leute,

    ich möchte ein Portlet (in meinem Fall das PloneGazette Newsletter Portlet) nur auf der Startseite anzeigen lassen und sonst auf keiner. Wie realisieren ich das? Gibt es da Einstellungen oder komme ich nicht um paar Zeilen Code rum.

    Im Forum habe ich nichts gefunden und Google hilft bei Ploneproblemen ja eh nur selten.

    Viele Grüße,
    gen

    Webmaster in München gesucht?
    http://www.sudaric.de - Konzeption - Erstellung - Betreuung - Optimierung

  • Der Weg der mir einfallen würde, wäre der, dass man in das Portlet (also im Code) ein Condition einbaut welches auf die Front-Page prüft.
    Hier der Code am Bsp. des News-Portlets (CMFPlone\skins\plone_portlets)

    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;
                     isStartpage python: here.meta_type == 'Plone Site' or here.getId() == 'front-page';"
         tal:condition="python: test(template.getId()!='news' and results and isStartpage, 1, 0)">
    ...

    Ich hoffe es wird klar, dass ich folgendes tue:
    * isStartpage == True, wenn der Plonesite Root oder die Frontpage angezeigt wird
    * der Condition nur erfüllt ist, wenn auch isStartpage == True ist

    Sollte es einen anderen (einfacheren) Weg geben, würde mich dies natürlich auch interessieren.

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Hi Torty,

    Vielen Dank schonmal! Das hört sich sehr vielversprechend an. Leider habe ich noch einige Probleme, das auf mein Newsletter portlet zu übertragen, da ich noch so gut wie gar keine Erfahrung mit den Template Ausdrücken und dem TALES Zeug habe.

    Ich habe folgenden Code versucht:

    Code
    ...
    <dl metal:define-macro="portlet"
           i18n:domain="plonegazette" class="portlet" id="portlet-gazette"
           tal:define="nl_brains python: here.portal_catalog(portal_type='NewsletterTheme', allowedRolesAndUsers='Anonymous');
                       nl_objects python: [brain.getObject() for brain in nl_brains if brain.getObject()];
                       nl_unique python: len(nl_objects) == 1;
                       isStartpage python: here.meta_type == 'Plone Site' or here.getId() == 'front-page';"
           tal:condition="nl_objects;
                          python: test(template.getId()!='news' and results and isStartpage, 1, 0)">
    ...

    Der liefert mir folgenden Kompilierungsfehler:

    Zitat

    Compilation failed
    TAL.TALDefs.TALError: Invalid variable name "nl_objects;
    python: test(template.getId()!='news' and results and isStartpage, 1, 0)" in expression "nl_objects;\n python: test(template.getId()!='news' and results and isStartpage, 1, 0)", at line 11, column 3

    Ich hoffe du kannst mir nochmal weiterhelfen.

    Viele Grüße,
    gen

    Webmaster in München gesucht?
    http://www.sudaric.de - Konzeption - Erstellung - Betreuung - Optimierung

  • Der Fehler ist dein Condition. Du musst das nl_objects je nach Bedarf rechts vom python: einbauen. Also z.B. so:

    Code
    ...
    <dl metal:define-macro="portlet"
           i18n:domain="plonegazette" class="portlet" id="portlet-gazette"
           tal:define="nl_brains python: here.portal_catalog(portal_type='NewsletterTheme', allowedRolesAndUsers='Anonymous');
                       nl_objects python: [brain.getObject() for brain in nl_brains if brain.getObject()];
                       nl_unique python: len(nl_objects) == 1;
                       isStartpage python: here.meta_type == 'Plone Site' or here.getId() == 'front-page';"
           tal:condition="python: nl_objects and test(template.getId()!='news' and results and isStartpage, 1, 0)">
    ...

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Hi Torty,

    Vielen Dank für deine Mühe. Ein Kompilierungsfehler liegt nicht mehr vor, allerdings erhalte ich einen Site Error wenn ich auf das Portal zugreifen will.

    Hier die relevante Stelle:

    Ich werde aus der Fehlermeldung nicht schlau, hast du eine Idee woran es liegt?
    Kann es sein das "results" bei dem Portlet garnicht vorhanden ist und nur beim Event-Portlet benötigt wird?

    Edit: Ok ich habs! Es war wie ich vermutet habe, habe die Abfrage "and results" aus der condition raus genommen und jetzt gehts.

    Vielen Dank nochmal Torty für die geniale hilfe!

    Viele Grüße,
    gen

    Webmaster in München gesucht?
    http://www.sudaric.de - Konzeption - Erstellung - Betreuung - Optimierung

  • es gäbe da noch die möglichkeit für die ersten Ordner, also die portaltabs noch jeweils eine property left_slots bzw. right_slots mit dem Type lines zu erstellen und dann werden nur die Portlets genommen di darin stehen umso tiefer man geht.


    Startseite (Left_slots=here/portlet_gazette/macros/portlet)
    |
    |
    |----Seite 1 (unveränderte Propertys) - Startportlet wird angezeigt
    |
    |
    |----Seite2 (Left_slots=here/portlet_calendar/macros/portlet) - es werden nur der kalender angzeigt

  • Hallo Leute,

    vlt. weis jemand wieso die von Shorty vorgestellte Methode bei folgendem Portlet (portlet_document_view) nicht funktioniert. Es soll nur auf der Startseite angezeigt werden, allerdings wird es jetzt nie angezeigt.

    Vielen Dank schonmal,
    gen

    Webmaster in München gesucht?
    http://www.sudaric.de - Konzeption - Erstellung - Betreuung - Optimierung