26 Nachrichten unter 10 Themen von 14 Mitgliedern
[SilverStripe Roadmap][Changelog]

Scaffolded search form

Seite: 1 2558 mal gelesen
  • Euphemismus
    Community Member
    2 Beiträge

    Scaffolded search form

    Hi,
    ich bastel hier gerade mit Searchforms und Scaffolding herum und bin auf ein paar Fragen gestoßen.
    Gibt es eine Möglichkeit z.B. während der Definition des CustomSearchContext Formfelder vorzubelegen? Prinzipiell sollte das ja Instantieren des Feldtyps möglich sein:
    [...]
    'ExpiryDate'   => new LessThanFilter( 'ExpiryDate', date( "Y-m-d" ) ),
    [...]
    Übernimmt er aber an der Stelle nicht.
    Die andere Sache ist: Beim initialen Aufruf der Suchseite wird im Endeffekt der komplette Datenbestand für die jeweilige Kategorie geholt.
    Die Einschränkung geschieht hier mit
    [...]
    $data[ 'EntryCategoryID' ] = $this->ID;
    [...]
    Wobei $data der array ist, welcher später an die Suche weitergegeben wird.
    Gibt es hier eine Möglichkeit, Einschränkungen nicht nur <feld> == <wert>, sondern <feld> >= <wert> zu definieren?
    Ansonsten muss ich ja den Vorteil, dass mir an der Stelle die Abfrage zusammengebaut wird, aufgeben und mir den Kram selbst zusammensuchen.
    Zusammengefasst: Welche Möglichkeiten habe ich 1. vorab meine Datenmenge beim Seitenaufruf zu begrenzen und 2. das Formular vor zu befüllen.
  • Euphemismus
    Community Member
    2 Beiträge

    Re: Scaffolded search form

    Falls nochmal jemand so ein Problem haben sollte:
    Nach der Definition des Formulars ($fields, $filters), bevor dann der SearchContext() instanziert wird, einfach folgendes tun:
    $field = new WhateverFieldYouNeed( <preset_values> );
    $fields->replaceField( 'fieldToReplace', $field )

    So wird im $fields-Objekt das entsprechende Feld durch eines mit vorab gesetzten Werten ersetzt. Nicht sonderlich elegant, funktioniert aber.
    In meinem speziellen Fall mit den Datumswerten, füge ich ein HiddenField ein und setze einen Datumswert today -1. Der Suchfilter geht dann auf ExpiryDate (GreaterThanFilter). So kann ich davon ausgehen, dass das ExpiryDate entweder heute oder in der Zukunft liegt.

    Grüße,
    Marc

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: Jerryvaf