Database Integration (wfqbe): Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(spam -> rückgängig gemacht.)
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 168: Zeile 168:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
== 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:
 +
<pre><nowiki>
 +
<!-- ###BROWSE_TEMPLATE### -->
 +
  <div class="wfqbe_browser">
 +
      Page ###PAGE_ACTUAL### of ###PAGE_TOTAL###<br />
 +
      <a href="###PAGE_PREV###" ###PAGE_PREV_TITLE###>&lt;&lt;</a> ###PAGE_LIST### <a href="###PAGE_NEXT###" ###PAGE_NEXT_TITLE###>&gt;&gt;</a>
 +
  </div>
 +
<!-- ###BROWSE_TEMPLATE### -->
 +
</nowiki></pre>
 +
 +
== CSV Export ==
 +
Sollte normalerweise funktionieren wenn das statische Template für wfqbe ausgewählt ist. Manchmal gehts aber nicht.
 +
 +
Zum Testen, so ungefähr sollte das TypoScript für den Seitentyp 181 (csv) aussehen:
 +
 +
<pre>
 +
## This enables the csv file export
 +
csv_wfqbe >
 +
csv_wfqbe = PAGE
 +
csv_wfqbe {
 +
  typeNum = 181
 +
 +
  10 < plugin.tx_wfqbe_pi1
 +
  10.template = EXT:wfqbe/pi1/wfqbe_csv_template.html
 +
  10.defLayout = 0
 +
 +
  config {
 +
    disableAllHeaderCode = 1
 +
    additionalHeaders = Content-type:application/csv|Content-Disposition: attachment; filename=results.csv|Content-Transfer-Encoding:binary
 +
    xhtml_cleaning = 0
 +
    admPanel = 0
 +
  }
 +
}
 +
</pre>
 +
 +
Manchmal ist auch ein falsch generierter Link die Ursache z.B wenn der Parameter ?type=181 lautet statt &type=181
 +
 +
Das tritt z.B. im Zusammenhang mit simulateStaticDocuments auf. Abhilfe schafft ein angepasstes Template für die Ausgabe in dem man den Link passend baut, oder wenn es einfach nur um den Export geht ausschalten. Vielleicht läßt sich [simulateStaticDocuments auch irgendwie anpassen.

Aktuelle Version vom 5. August 2011, 14:04 Uhr

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

Platzhalter benutzen:

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

Detailansichten realisieren[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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### -->

CSV Export[Bearbeiten]

Sollte normalerweise funktionieren wenn das statische Template für wfqbe ausgewählt ist. Manchmal gehts aber nicht.

Zum Testen, so ungefähr sollte das TypoScript für den Seitentyp 181 (csv) aussehen:

## This enables the csv file export
csv_wfqbe >
csv_wfqbe = PAGE
csv_wfqbe {
  typeNum = 181

  10 < plugin.tx_wfqbe_pi1
  10.template = EXT:wfqbe/pi1/wfqbe_csv_template.html
  10.defLayout = 0

  config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:application/csv|Content-Disposition: attachment; filename=results.csv|Content-Transfer-Encoding:binary
    xhtml_cleaning = 0
    admPanel = 0
  }
}

Manchmal ist auch ein falsch generierter Link die Ursache z.B wenn der Parameter ?type=181 lautet statt &type=181

Das tritt z.B. im Zusammenhang mit simulateStaticDocuments auf. Abhilfe schafft ein angepasstes Template für die Ausgabe in dem man den Link passend baut, oder wenn es einfach nur um den Export geht ausschalten. Vielleicht läßt sich [simulateStaticDocuments auch irgendwie anpassen.