DB Integration -> Wie komme ich in TS an die Übergabevariablen?

  • Fuchur84 Fuchur84
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    21. 08. 2009, 18:41

    Hallo Leute,

    ich habe mal wieder eine Frage und weiss nicht so genau wie ich das Problem lösen soll...

    Ich habe eine eigene Tabelle + ein Element (mit Kickstarter) geschrieben, so dass man jetzt über Typo3 neue Inhaltselemente in die DB einpflegen kann...

    Dann habe ich eine Suchfunktion mit Hilfe von "DB Integration" geschrieben...

    Dies hier ist mein SQL-Query-String dafür:
    [TS]SELECT DISTINCT
    r_name AS Raum, quadratmeter as qm, seats_reihe AS Reihe, seats_uform AS `U-Form`, seats_bank AS Bankett, seats_parl AS Parlament, link_to_pid AS Seite
    FROM
    tx_tagungsraeume_tagungsraeume
    WHERE
    ###WFQBE_WHERE### '-50000' != '###WFQBE_ART###'
    AND '-50000' != '###WFQBE_SITZE_MIN###'
    AND '-50000' != '###WFQBE_SITZE_MAX###'
    [/TS]

    (wundert euch erstmal nicht, warum da '-50000' != '###WFQBE_ART###' etc. steht. Das ist nur deshalb da, weil ich ..._MIN und ..._MAX im Formular drinstehen habe und es gelöscht wird, wenn ich es im Query nicht aufführe.)

    Was ich jetzt machen wollte war folgendes:
    Wenn WFQBE_ART nichts enthält, dann sollte WFQBE_WHERE definiert werden und zwar mit Folgendem:

    [TS][userFunc = is_art_empty(plugin.tx_wfqbe_pi1.customQuery.10.WFQBE_ART)]
    plugin.tx_wfqbe_pi1.customQuery.10 {
    WFQBE_WHERE = TEXT
    WFQBE_WHERE.data = (tx_tagungsraeume_tagungsraeume.seats_reihe >= ###WFQBE_SITZE_MIN### AND tx_tagungsraeume_tagungsraeume.seats_reihe >= ###WFQBE_SITZE_MAX###) OR (tx_tagungsraeume_tagungsraeume.seats_bank >= ###WFQBE_SITZE_MIN### AND tx_tagungsraeume_tagungsraeume.seats_bank >= ###WFQBE_SITZE_MAX###) OR (tx_tagungsraeume_tagungsraeume.seats_parl >= ###WFQBE_SITZE_MIN### AND tx_tagungsraeume_tagungsraeume.seats_parl >= ###WFQBE_SITZE_MAX###) OR (tx_tagungsraeume_tagungsraeume.seats_uform >= ###WFQBE_SITZE_MIN### AND tx_tagungsraeume_tagungsraeume.seats_uform >= ###WFQBE_SITZE_MAX###) AND
    WFQBE_WHERE.overrideAlways = 1
    }
    [else]###WFQBE_WHERE### = (tx_tagungsraeume_tagungsraeume.###WFQBE_ART >= ###WFQBE_SITZE_MIN### AND tx_tagungsraeume_tagungsraeume.###WFQBE_ART >= ###WFQBE_SITZE_MAX###) AND
    [end]

    [/TS]

    Das obrige steht bei mir in der Setup vom Template und habs auch schon in die TS_config der entsprechenden Seite gebastelt... alles ohne Erfolg.

    is_art_empty() macht nichts anderes als zu checken ob der Input equivalent zu "all" oder "alle" ist und returned wenn das so ist true, sonst false. (das Inputfeld übergibt bei der Auswahl "Alle" -> "all").

    Ihr seht worauf ich hinaus will... wenn beim einen Suchfeld "alle" ausgewählt wird, soll er auch alle Abfragen und dafür WFQBE_WHERE erzeugen und später im SQL-Code verwenden.

    Klappt aber nicht, WFQBE_WHERE bleibt leer, vermutlich mal weil "###WFQBE_...####" (und Co) hier nicht existieren? Wie komm ich denn an diese Variablen ran?
    Hab ich ne Chance diese zu überschreiben oder eine Neue zu erstellen, die ich dann in der Mysql-Query verwenden kann?

    Ich bin für jede Hilfe dankbar :)

    Vielen Dank im Voraus
    *Fuchur*


  • 1
  • freshman17 freshman1...
    Sternenflotten-Admiral
    0 x
    218 Beiträge
    2 Hilfreiche Beiträge
    22. 08. 2009, 12:54

    Hi,

    bei der Verwendung von [TS]userFunc[/TS]

    muß deine Funktion "is_art_empty" mit dem Prefix "user_" oder "tx_" beginnen und in der localconf.php (oder ext_localconf.php) liegen.

    Eine andere Frage, wieso verarbeitest du nicht alles innerhalb deiner Extension und verzichtest auf den Großteils des TypoScripts? Hier ein grobes Gerüst:

    [TS]plugin.tx_wfqbe_pi1 {
    var1 = wert1
    var2 = wert2
    noWrap = 1
    }
    [/TS]

    und in deiner Extension

    1. ...
    2. class tx_wfqbe_pi1 extends tslib_pibase {
    3. ..
    4. function main($content, $conf) {
    5. $this->conf = $conf;
    6. $this->pi_setPiVarDefaults();
    7. $this->pi_loadLL();
    8.  
    9. if($this->is_art_empty()) $this->set_WFQBE_WHERE();
    10.  
    11. return $this->conf['noWrap'] ? $content : $this->pi_wrapInBaseClass($content);
    12.  
    13. }
    14.  
    15. function is_art_empty() {
    16. return $this->$conf['var1'] && $this->$conf['var2'] ? true : false;
    17. }
    18.  
    19. function set_WFQBE_WHERE() {
    20. ...
    21. }
    22. ...
    23. }
    24. ...

    Gruß

  • Fuchur84 Fuchur84
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    24. 08. 2009, 15:56

    EDIT:
    Okay, kommando zurück... man kann es einfach über die $this -> piVars bzw. $this -> conf lösen.

    Einfach ne Funktion schreiben un in der main() der extension aufrufen lassen, die dann

    1. $this -> piVars['WHERE']['0'] = 'Was_man_will';
    2. $this -> conf['WHERE']['0'] = 'Was_man_will';

    setzt. Habe zugegebenermaßen nicht mehr den Nerv gehabt zu testen welches der beiden korrekt ist ;)

    Dann erstmal trotzdem vielen Dank an dich :)

    Bis dann
    *Fuchur*

    DEL:
    (Und wie / wo muss ich WFQBE_WHERE definieren?
    Wo sind denn diese Vars gespeichert?

    Hab grad mal in die Dateien reingeschaut, aber wo genau das gesetzt wird und wie ich dran komme ist bei Fremdprogrammierung für mich doch deutlich schwer zu finden.

    Ich kann sie über "piVars['ART']['0']" zB auslesen. (WFQBE_ART = $this->piVars['ART']['0'] in der main(), aber einfach eine neue Variable in dem Array zu setzen scheint nicht zu klappen...

    Viele Grüße
    *Fuchur*
    )

  • 1