Database Integration (wfqbe)

Aus Wikizone
Wechseln zu: Navigation, Suche

Gute Extensions aber ein paar Bugs. Update: V1.0 - super... ab dieser Version kann man die Abfragen alle in einem Ordner platzieren. Das Plugin kann man verschieden plazieren und den gewünschten Datensatz auswählen.

V0.9.5 - mysql unterstützt keinen JOIN deshalb muß man in einigen Tabellen die JOINS durch LEFT JOIN ersetzen. Das betrifft die Funktionalität von Search Abfragen

/typo3conf/ext/wfqbe/tx_wfqbe_query_search/class.form_generator.php

Die Custom Templates werden nicht gefunden dazu folgende Änderung: Datei pi1/class.tx_wfqbe_results.php Folgendes ersetzen

function userLayout($ris,$row){
#$file = $this->cObj->fileResource($row['template']== ? $this->conf["template"] : $this->baseTemplateUrl.$row['template']);//estraggo il template
$file = $this->cObj->fileResource($row['template']== ? $this->conf["template"] : $this->pibase->baseTemplateUrl.$row['template']);


Sprachdatei erweitern

pi1/locallang.xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
	<meta type="array">
		<type>module</type>
		<description>Language labels for plugin "tx_wfqbe_pi1"</description>
	</meta>
	<data type="array">
		<languageKey index="default" type="array">
			<label index="prev">Previous page</label>
			<label index="next">Next page</label>
			<label index="go_to_page">Go to page </label>
		</languageKey>
		<languageKey index="de" type="array">
			<label index="prev">Zurück</label>
			<label index="next">Weiter</label>
			<label index="go_to_page">Gehe zu Seite </label>
		</languageKey>
		<languageKey index="it" type="array">
			<label index="prev">Pagina precedente</label>
			<label index="next">Pagina successiva</label>
			<label index="go_to_page">Vai a pagina </label>
		</languageKey>
	</data>
</T3locallang>

Suchabfragen

Dafür baut man ein Select Query in dem man die WHERE Clauses durch Platzhalter in der Art ###WFQBE_SUCHMICH### ersetzt. Eine 2. Suchabfrage wird im Search Modus ausgeführt und auf die vorher erstellte Liste verwiesen. Darin stehen die Platzhalter automatisch zur Verfügung.

Tipps

Platzhalter benutzen:

SELECT * WHERE meinFeld LIKE '%###WFQBE_SUCHMICH###%'

Detailansichten realisieren

Hinweis: die Beispiele entstammen aus einem Projekt und wurden etwas vereinfacht. Unter Umständen können sich in die Nummerierung der Felder Fehler eingeschlichen haben. Also nochmal vor dem Einsatz prüfen.

Wir möchten eine Liste von VHS-Kursen ausgeben. In dieser Ausgabeliste sollen alle Datensätze einen Link bekommen. Wenn man diesen anklickt werden die Daten des gewählten Datensatzes in einer Detailansicht gezeigt. Außerdem gibt es ein Datum und ein Bild des Referenten.

Als Ausgangspunkt haben wir für das Beispiel einen Datensatz mit der uid=1 der eine Liste ausgibt und einen mit der uid=4 der die Detailansicht ausgibt.

Abfrage der Listenansicht (uid des Datensatzes = 1)

SELECT tt_kurse.uid AS Detailansicht, tt_kurse.referent AS Referent, tt_kurse.hausOrt AS Ort, tt_kurse.seminarName AS Seminarname FROM tt_kurse

Abfrage der Detailansicht (uid des Datensatzes = 4)

 SELECT tt_kurse.seminarName, tt_kurse.seminarText, tt_kurse.referent, tt_kurse.referentBild, tt_kurse.seminarStart  FROM bb_kurse WHERE bb_kurse.uid = ###WFQBE_UID###

Der Platzhalter wird später durch die Übergabe des Parameters tx_wfqbe_pi1[uid]=uid ersetzt

Im TypoScript manipulieren wir jetzt die Listenansicht:

plugin.tx_wfqbe_pi1.customProcess.1 {
	0 = TEXT
	0.value = Show details
	0.typolink = 1
	0.typolink.parameter = 20
	0.typolink.additionalParams = &tx_wfqbe_pi1[uid]=###WFQBE_FIELD_0###
}

Erklärung Wir können alle Felder die wir Abfragen auch manipulieren. Wenn wir die Standardtabelle als Ausgabe nehmen, stehen sie als Nummer (beginnend mit 0) zur Verfügung bei einem Custom Template mit ihrem Namen der auch im Marker steht (uid = TEXT...)

customProcess.1 

Die Abfrage mit der uid=1 soll bearbeitet werden.

0 = TEXT

das erste Feld aus der Abfrage (uid des Kurses) soll ein Text-Objekt sein. Wir arbeiten mit der Defaulttabelle als Template, deshalb heißt es immer 0. bei einem eigenen Template könnte es auch uid. heißen.

0.typolink = 1

Link einschalten

...parameter = 20 

id der Zielseite

additionalParams...

die Parameter werden übergeben (die uid des Datensatzes der angezeigt wird. Sein Wert steht in dem Marker ###WFQBE_FIELD_0### zur Verfügung. Natürlich auch die der anderen Felder. Es ist auch möglich mit ###WFQBE_FIELD_uid### auf den WErt zuzugreifen (siehe unten).

Alle mit dem Select Query ausgegebenen Felder stehen als Array in einem COA TypoScript Objekt zur Verfügung. D.h. mit der 0 kann man das erste Feld als TypoScript Objekt ansprechen mit der 1 das nächste und so weiter. Der Inhalt steht außerdem als Marker in der Form ###WFQBE_FIELD_Nummer### zur Verfügung.

Im Beipiel wird das 1. Feld als TEXT Objekt generiert und mit einem Link versehen. Als Parameter geben wir die uid des Datensatzes mit. Der Marker in der letzten Zeile wird mit dessen Wert ersetzt.

Timestamp formatieren

Wir haben gesehen, daß man mit customProcess einen Query Datensatz ansprechen kann und seine Felder als TypoScript Objekte umsetzen. Das machen wir nun mit einem Datumsfeld. Dazu erweitern wir das TypoScript Template und greifen diesesmal auf den Datensatz mit der Detailansicht zu (uid = 4)

plugin.tx_wfqbe_pi1.customProcess.4 {
   # Datum ausgeben
   4= TEXT
   4.value = ###WFQBE_FIELD_4###
   4.date = d.m.Y

TypoScript geht normalerweise von einem Unix-Timestamp in der Datenbank aus. WEnn aber das Datum im Datumsformat eingegeben ist kann man es denoch als Timestamp ausgeben wenn man die SQL-Abfrage folgendermaßen erweitert.

SELECT ..., UNIX_TIMESTAMP(bb_kurse.seminarStart) AS Datum, ... FROM bb_kurse WHERE bb_kurse.uid = ###WFQBE_UID###

URL ausgeben

Für URLs nehmen wir wieder den Typolink

   # URL ausgeben
   6= TEXT
   6.value = ###WFQBE_FIELD_6###
   6.typolink = 1
   6.typolink.parameter = ###WFQBE_FIELD_6### 

Mit Markernamen anstatt Nummern

Ab Version 1 ist es auch möglich mit Markern statt mit Nummern zu arbeiten. Zumindest Wenn man ein eigenes Template zur Ausgabe benutzt und auf die Standard Tabellenausgabe Verzichten möchte funktioniert das gut. Dabei werden die Tabellenfeldernamen statt der Nummern eingesetzt:

   # URL ausgeben
   hausUrl= TEXT
   hausUrl{
      value = ###WFQBE_FIELD_hausUrl###
      typolink = 1
      typolink.parameter = ###WFQBE_FIELD_hausUrl### 
   }

Probleme kann es geben wenn z.B. Funktionen wie oben UNIX_TIMESTAMP nutzt. Man kann aber in problematischen Fällen immer noch auf die Nummerierung zurückgreifen.

Bild ausgeben

Constants

imagePath=fileadmin/kursbilder/

Setup

plugin.tx_wfqbe_pi1.customProcess.4 {
   #Bild ausgeben
   referentBild = IMAGE
   referentBild {
      file.maxH = 80
      file = {$imagePath}###WFQBE_FIELD_referentBild###
      
      imageLinkWrap = 1
      imageLinkWrap {
         enable = 1
         bodyTag = <BODY style="background:white;">
         wrap = <a href="javascript:close();"> | </a>
         width = 400
         JSwindow = 1
         JSwindow.newWindow = 1
         JSwindow.expand = 16,16
      }
   }
}

Page Browser

In eigenen HTML-Templates wird standardmäßig kein Seitenbrowser angezeigt (in der Standardtabelle schon). Dafür gibt es ein paar Marker mit denen man den Browser bauen kann:

<!-- ###BROWSE_TEMPLATE### -->
   <div class="wfqbe_browser">
      Page ###PAGE_ACTUAL### of ###PAGE_TOTAL###<br />
      <a href="###PAGE_PREV###" ###PAGE_PREV_TITLE###><<</a> ###PAGE_LIST### <a href="###PAGE_NEXT###" ###PAGE_NEXT_TITLE###>>></a>
   </div>
<!-- ###BROWSE_TEMPLATE### -->