bei eigenem Content nach eigenem Wert suchen/sortieren

  • Hallo und Guten Morgen,

    ich stehe momentan vor einem, für mich größerem Problem, weil ich das noch nie gebraucht habe... :cry: :cry:

    Ich habe ein eigenes Produkt gebastelt, das will ich auf einer Seite geordnet ausgeben.

    Mein CT besteht aus folgenden Felder:
    Title (kommt von Plone)
    Vorname
    Nachname
    Abteilung

    Wie kann ich Plone sagen, ich will die Ausgabe nach Nachnamen sortieren?
    Und nimm nur Mitarbeiter die in der Abteilung "EDV" sind?

    Hier die Ausgabe momentan:

    Also nochmal kurz, ausgeben sort_on = Nachname und (in einer anderen Seite) ausgeben, wenn Abteilung = EDV

    Was vielleicht noch interessant sein könnte, ich arbeite hauptsächlich mit "Poseidon".

    Das sollte ich jetzt auch noch erwähnen, ich will eine "automatische" Indexiereung, sh. ich will nicht manuell in portal_catalog einen neuen FieldIndex anlegen!!! :roll:

    lg michi

  • Der Ablauf wie er momentan ist /sein soll:

    - erstelle Organisation
    - erstelle Abteilung / Studiengang
    - erstelle Mitarbeiter
    ------ wähle bei Mitarbeiter die passende Abteilung, bzw Studiengang
    --- fertig


    Bei der Organisation ( /skins/mitarbeiter/mitarbeiter_all.cpt ) sollen alle vorhandenen Mitarbeiter nach Nachname sortiert werden können......

    Bei Abteilung/Studiengang ( /skins/mitarbeiter/mitarbeiter_team.cpt ) sollen alle Mitarbeiter angezeigt werden die die jeweilige Abteilung /Studiengang haben....
    Zuerst der Abteilungsleiter, dann der Stellvertreter, dann alle anderen...

    Es fehlt eigentlich noch alles bei mitarbeiter_team, weil ich keine ahnung habe wie ich das Zeug auslesen kann.

    Bei mitarbeiter_all, alle Mitarbeiter nach Nachname sortieren geht ja, will ich zwar nich so, (portal_catalog - > FieldIndex ) soll ja auch funktionieren wenn ich das ganze auf einem anderen Rechner installiere, also automatisch

    ... hoffe man hat jetzt verstanden was ich will :D


    mfg michi

  • Hallo mgraf,
    ich kenne die Lösung, habe das jedoch auch noch nie gemacht. Die Lösung heißt: AdvancedQuery. Somit sind Anfragen möglich, die man nach mehr wie einem Kriterium sortieren kann. Dies bedeutet der portal_catalog() - Part muss in ein AdvancedQuery geändert werden.

    Wenn du Glück hast schreibt dir Maik noch n paar Zeilen dazu. Sonst selbst einarbeiten oder warten. :)
    http://www.dieter.handshake.de/pyprojects/zope/#AdvancedQuery
    und
    http://www.dieter.handshake.de/pyprojects/zope/AdvancedQuery.html

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Hallo,

    hier mal ein bisschen code von mir, das hilft dir sicher weiter:
    im ZPT:
    <div metal:fill-slot="main" id="content-register"
    tal:define="results python:here.nanoAdvancedSearchItems(request);
    results python:[r for r in results if r.getObject()];
    Batch python:modules['Products.CMFPlone'].Batch;
    b_start python:request.get('b_start',0);
    searchterm request/NanoSearch|nothing;">

    dann mein script "nanoAdvancedSearchItems.py":

    ## Script (Python) "nanoAdvancedSearchItems"
    ##bind container=container
    ##bind context=context
    ##bind namespace=
    ##bind script=script
    ##bind subpath=traverse_subpath
    ##parameters= request
    ##title=
    ##
    from Products.AdvancedQuery import Eq, Between, Le, In, And, MatchRegexp

    portalTypes = []
    queries = []


    if hasattr(request, 'NanoSearchUnternehmen'):
    portalTypes += ['Unternehmen']

    if hasattr(request, 'NanoSearchHochschulen'):
    portalTypes += ['Hochschule']


    queries.append(In('portal_type', portalTypes))
    queries.append(Eq('review_state','published'))

    if hasattr(request, 'Organisationsform') and request['Organisationsform'][0] != '':
    queries.append(MatchRegexp('getOrganisationsform', request['Organisationsform']))

    if hasattr(request, 'Kompetenzrolle') and request['Kompetenzrolle'][0] != '':
    queries.append(MatchRegexp('getKompetenzrolle', request['Kompetenzrolle']))

    if hasattr(request, 'Branchen') and request['Branchen'][0] != '':
    queries.append(MatchRegexp('getBranchen', request['Branchen']))

    if hasattr(request, 'Technologie') and request['Technologie'][0] != '':
    queries.append(MatchRegexp('getTechnologie', request['Technologie']))

    if hasattr(request, 'Eigenschaften') and request['Eigenschaften'][0] != '':
    queries.append(MatchRegexp('getEigenschaften', request['Eigenschaften'][0]))

    if hasattr(request, 'searchterm') and request['searchterm'] != '':
    queries.append(Eq('SearchableText', request['searchterm']))


    query = And(*queries)
    results = context.portal_catalog.evalAdvancedQuery(query, (('sortable_title'), 'getProfessor', 'getFachbereich'))

    return results


    Die Sortierung geht dann in folgender Reihenfolge:
    1. sortable_title
    2. getProfessor
    3. getFachbereich

    die indexe müssen natürlich als fieldindex vorhanden sein.
    Das kannst du dir dann so umschreiben wie du möchtest.

    mfg maik