Beiträge der Kategorie TYPO3

Die ultimative Suche – zwei Suchextensions kombinieren

Es gibt einige Suchextensions für Typo3: die Indexed Search durchsucht PDFs und gecachte Seiten, aber leider keine Datensätze, andere Extensions durchsuchen Datensätze, aber keine PDFs. Also beschloss ich zwei Extensions zu kombinieren.

Die erste ist die an_searchit: eine tolle Extensions, die mit TypoScript perfekt an die Bedürfnisse angepasst werden kann, durchsucht Datensätze.
http://typo3.org/extensions/repository/view/an_searchit/2.4.1/

Die zweite ist die indexed_search: durchsucht gecachte Seiten und externe Dokumente (ist seit 4.0 eine Systemextension).

Ich brauche zwei Seiten, die erste ist sichtbar, da kommt die Suchbox drauf. Die zweite ist untergeordnet und unsichtbar, da sollen die Ergebnisse angezeigt werden. Auf der ersten Seite Extensiontemplate anlegen und die an_searchit konfigurieren, in diesem Fall sollen die Tabellen der Branchendatenbank (pro_industrydb) und der Veranstaltungskalender (sk_calendar) durchsucht werden:

temp.renderHeader {
length = 100
wrap = <h2>|</h2>
markupColor = #ff0000
}
temp.renderBody {
length = 100
wrap = <p>|</p>
markupColor = #ff0000
}
temp.searchitConfig {
sections {
2 {
title = Veranstaltungen
table = tx_skcalendar_events
fields = title|description
PID = 8
customBody.show = 1
customBody.title < temp.renderHeader
customBody.description < temp.renderBody
}
3 {
title = Branchenbucheinträge
table = tx_proindustrydb_entries
fields = title|short|description|addinfo
PID = 54
#doNotShowLink = 1
params = tx_proindustrydb_pi1[showUid]=#uid#&tx_proindustrydb_pi1[backLink]=80
customBody.show = 1
customBody.title < temp.renderHeader
customBody.description < temp.renderBody
}
}
}

seite.10.marks.CONTENT_CENTER >
seite.10.marks.CONTENT_CENTER = COA
# configure the search form
seite.10.marks.CONTENT_CENTER.10 < plugin.tx_ansearchit_form
seite.10.marks.CONTENT_CENTER.10 {
resultPID = 80
format = label,field,button
label.caption = Suche
label.cssStyle = margin-right: 10px;
field.title = Bitte geben Sie einen Suchbegriff ein
field.cssStyle = margin-right: 10px;
button.caption = Suchen
}
seite.10.marks.CONTENT_CENTER.80 < styles.content.get
plugin.tx_indexedsearch.show.advancedSearchLink = 0

Auf die zweite Seite kommt das Ergebnis hin. Das hab ich auf der ersten Seite vorkonfiguriert. Wieder Extensiontemplate anlegen und die beiden Extensions konfigurieren. Auf dieser Seite wird als Content Element die indizierte Suche eingebunden, die das Suchwort auch bekommen und auswerten soll. Deswegen schreib ich ein Mini-PHP-Skript, das diese Aufgabe für mich übernimmt:

Das Skript speichere ich im Ordner fileadmin/script als switch_search_vars.inc ab. Nun muss ich nur noch die Extension konfigurieren und das Skript einbinden.

config.no_cache = 1
# set post vars from indexed search
seite.10.marks.CONTENT_CENTER.5 = PHP_SCRIPT
seite.10.marks.CONTENT_CENTER.5.file = fileadmin/script/switch_search_vars.inc
# configure the search result overview
seite.10.marks.CONTENT_CENTER.20 < plugin.tx_ansearchit_resOverview
seite.10.marks.CONTENT_CENTER.20 {
config < temp.searchitConfig headline.show = 1 headline.caption = Gefunden in folgenden Bereichen headline.wrap = <h1 class="sectionsHeader">|</h1><p>klicken Sie eine Bereich an, um die komplette Ergebnisliste anzuzeigen</p> sections.format = name, count sections { NO.wrap = <strong>|</strong><br /> ACT = 1 ACT.doNotLink = 1 ACT.wrap = <strong>|</strong><br /> name.wrap = | count.wrap =  (|) } sections.wrap = <div class="sectionsDisplay">|</div> noResults.caption = Ihre Suche brachte leider keine Ergebnisse } #configure the search result list seite.10.marks.CONTENT_CENTER.30 < plugin.tx_ansearchit_resList seite.10.marks.CONTENT_CENTER.30 { config < temp.searchitConfig headline.show = 1 headline.caption = Ergebnisse headline.wrap = <h1 class="resultsHeader">|</h1> outString = <div class="resultItem">###BODY### ###LINK###</div> }

Mann kann noch aus dem HTML-Template der indexed_search die Inhalte vom Marker SEARCH_FORM löschen, damit immer nur ein Suchformular angezeigt wird.

Geschrieben in TYPO3 | Kommentare deaktiviert für Die ultimative Suche – zwei Suchextensions kombinieren

DB-Abfrage bei Zuordnung im BLOB

In Typo3 werden 1:n Beziehungen als kommaseparierte Liste in einem BLOB gespeichert. Dabei ist es nicht ohne weiteres möglich das Feld zu bearbeiten oder aus dem Feld auszulesen. Um aus einem solchen Feld auszulesen, liefert TYPO3 sinnvolle Funktionen, die man bei der Extensionentwicklung einsetzen kann. In der ersten Zeile bastelt man sich mit der Hilfe der Funktion listQuery einen Abfragestring. In diesem Fall sollte der gesuchte Eintrag der Kategorie $catint angehören, die Liste steht dazu im Feld ‘category’. Die Variable $table enthält den Namen der Tabelle, die Abgefragt werden soll. Die zweite Zeile führt eine Anfrage aus, in $fields gibt man die Felder an, die zurückgegeben werden sollte. An den Where-String aus der ersten Zeile kann man bei Bedarf weitere Abfragen dranhängen wie z.B. ‘hidden=0 AND deleted=0’.

$where = $GLOBALS['TYPO3_DB']->listQuery('category',$catint,$table);
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields,$table,$where);

Geschrieben in TYPO3 | Kommentare deaktiviert für DB-Abfrage bei Zuordnung im BLOB

Per TS Wert einer GET/POST Variablen auslesen

Wenn der Wert einer GET oder POST Variablen irgendwo per TS ausgelesen werden soll:

10 = TEXT
10.data = GPvar:foo

Dabei ist foo der Name der POST oder GET-Variablen. Falls die benötigte Variable jedoch in einem Array steht, kann man so darauf zugreifen:

Input-Feld:

<input type="text" name="foo[bar]" value="irgendwas" />

TS-Setup:

10 = TEXT
10.data = GPvar:foo|bar

Geschrieben in TYPO3 | Kommentare deaktiviert für Per TS Wert einer GET/POST Variablen auslesen

Zurück zur Suchseite – Nachfrage vermeiden

Das Problem: man hat nach was gesucht und es wurde eine Liste angezeigt. Nun möchte man gerne zurück zur Suchseite. Normalerweise klickt man auf den “zurück”-Button im Browser und es kommt ein Fenster mit der Nachricht, dass die Seite nicht mehr gültig ist.

Es ist nicht möglich die Suche auf GET umzustellen wie Google, aber es möglich das Caching des Browsers zu beeinflussen.

Dazu schreibe man die folgende Zeile ins Ext-Template der Suchseite. Cache-Control ist ein HTTP 1.1 Header, der das Caching von Browsers und Proxies steuert. “max-age” ist die relative Angabe in Sekunden, wie lange das dokument noch Gültigkeit besitzt – in diesem Fall einen Tag lang(24*60*60). “must-revalidate” zwingt den Browser dazu, eben genau die oben genannte Einstellung zu beachten.

config.additionalHeaders = Cache-Control: max-age=86400, must-revalidate

Ich habs nicht selbst rausgefunden, vielen Dank ans Forum auf typo3.net.

www.typo3.net/forum/list/list_post//42160/

Voreinstellungen für Content Elemente

Bestimmte Attribute eines Content Elementes können vorbelegt werden, wie z.B. Bilderrahmen, Bildgröße etc.

Beim Anlegen eines neuen Datensatzes in tt_content soll die Bildgröße auf 338×338, der Bildrand auf 1px eingestellt werden. Das Bild wird links oben ausgerichtet und es ist ein 1-spaltiges Layout.

Die dazugehörige Konfiguration im TSconfig (der Gruppe oder des Benutzers):

TCAdefaults.tt_content {
imageborder = 1
imagewidth = 338
imageheight = 338
imagecols = 0
imageorient = 0
}

Eine andere Möglichkeit ist ein Hook und die dadurch erst mögliche Definition der Standardwerte im Page-TSconfig: http://www.typo3-profibuch.de/artikelansicht/backend-default-werte-per-tsconfig-setzen/

Geschrieben in TYPO3 | Kommentare deaktiviert für Voreinstellungen für Content Elemente

Rahmen bei Content Elementen selektieren und umbenennen

Bei Content Elementen gibt es die Möglichkeit einen Rahmen anzugeben. Default ist das ein Abstand von x Pixeln davon bzw. danach. Man kann diesen Rahmen aber dazu verwenden, um Content Elemente mit komplett anderen Rahmen zu versehen.

Mit der folgenden Einstellung können unnötige Rahmen ausgeblendet werden:

TCEFORM.tt_content.section_frame {
removeItems = 1,5,6,7,10
}

Jedem Rahmentyp ist eine Zahl zugeordnet. Diese Zahlen bekommt man raus, wenn man sich den Quelltext des Frames anschaut. Dann werden die bleibenden Rahmen umbenannt, damit der FE-Benutzer weiß, was ein bestimmter Rahmen bewirkt:

TCEFORM.tt_content.section_frame {
altLabels.0 = Kein Rahmen
altLabels.11 = Rahmen grau doppelt hoch
altLabels.12 = Rahmen bunt doppelt hoch
altLabels.20 = Rahmen grau einfach hoch
altLabels.21 = Rahmen bunt einfach hoch
}

Anschliessend werden die Wraps der Rahmen im TSOB angepasst:

tt_content.stdWrap.innerWrap.cObject.20.value = <table border="0" class="content_normal" cellspacing="0" cellpadding="{$styles.content.frames.padding}"><tr><td>|</td></tr></table>
tt_content.stdWrap.innerWrap.cObject.21.wrap = |
tt_content.stdWrap.innerWrap.cObject.21.value = <table border="0" class="content_bunt" cellspacing="0" cellpadding="{$styles.content.frames.padding}"><tr><td>|</td></tr></table>
tt_content.stdWrap.innerWrap.cObject.11.value = <table border="0" cellspacing="0" cellpadding="{$styles.content.frames.padding}" class="content_normal_high"><tr><td>|</td></tr></table>
tt_content.stdWrap.innerWrap.cObject.12.value = <table border="0" cellspacing="0" cellpadding="{$styles.content.frames.padding}" class="content_bunt_high"><tr><td>|</td></tr></table>

GET-Variable einfügen

Falls eine GET-Variablen gesetzt ist, sollte sie an dieser Stelle eingefügt werden, ansonsten ein Standartwert.

page.config.no_cache = 1
seite.config.no_cache = 1
plugin.tx_proapagopixel_pi1.group &gt;
plugin.tx_proapagopixel_pi1.group = TEXT
plugin.tx_proapagopixel_pi1.group.value = Allgemein
plugin.tx_proapagopixel_pi1.group.override.data = global:HTTP_GET_VARS|eventName
plugin.tx_proapagopixel_pi1.group...

Geschrieben in TYPO3 | Kommentare deaktiviert für GET-Variable einfügen

Menü mit mehreren Teilen

Das Ergebnis ist ein Menü, dass 3 Hauptkategorien hat, die alle unterschiedlich farbig dargestellt werden. Die Hauptkategorien werden “manuell” gerendert. Die Unterpunkte als GMENU. In den Konstanten wird angegeben, in welcher Reihenfolge und Farbe die Menüpunkte gerendert werden.

#rendering template for main category
temp.pages = COA
temp.pages.10 = IMAGE
temp.pages.10.file = GIFBUILDER
temp.pages.10.file {
# set size
10 = TEXT
10.text.field = nav_title // subtitle // title
# set color, font file and font size for 10
}
# render first category
temp.mainmenu.10 = RECORDS
temp.mainmenu.10.source = {$first_page}
temp.mainmenu.10.tables = pages
temp.mainmenu.10.conf.pages < temp.pages
temp.mainmenu.10.stdWrap.typolink.parameter = {$first_page}

#render second category
temp.mainmenu.30 < temp.mainmenu.10
temp.mainmenu.30.source = {$second_page}
# change color in template
temp.mainmenu.30.conf.pages.10.file.10.fontColor = {$second_color}
temp.mainmenu.30.stdWrap.typolink.parameter = {$second_page}

#render third category
temp.mainmenu.40 < temp.mainmenu.10
temp.mainmenu.40.source = {$third_page}
# change color in template
temp.mainmenu.40.conf.pages.10.file.10.fontColor = {$third_color}
temp.mainmenu.40.stdWrap.typolink.parameter = {$third_page}

#render main menu
temp.mainmenu.20 = HMENU
temp.mainmenu.20 {
special = directory
special.value = {$first_page}
entryLevel = 1
1 = GMENU
1 {
NO = 1
NO {
# set dimensions and background color
10 = TEXT
10.text.field = nav_title // subtitle // title
# set color, font size and font file for 10
}
2 < .1
}
# end of temp.mainmenu.20
}

Geschrieben in TYPO3 | Kommentare deaktiviert für Menü mit mehreren Teilen

E-Mail Adressen verschlüsseln

config.spamProtectEmailAddresses = 2
config.spamProtectEmailAddresses_atSubst = @<img src="clear.gif" border="0" width="1px" height="1px" alt="_we_dont_like_spam_" />

Geschrieben in TYPO3 | Kommentare deaktiviert für E-Mail Adressen verschlüsseln

GMENU Menüpunkte durchnummerieren

NAVI = HMENU
NAVI.special = directory
NAVI.special.value = [pid]
NAVI.1 = GMENU
NAVI.1 {
NO = 1
NO {
XY = 119,29
10 = TEXT
10.text.field = subtitle // title
# hier text und farbe einfügen
30 < .10
30.text.field >
30.text.data = register:count_HMENU_MENUOBJ
30.text.wrap = 0|
30.if {
value.data = register:count_HMENU_MENUOBJ
isLessThan = 9
negate = 1
}
30.fontSize = 28
30.offset = 4, 24
40 < .30
40.text.wrap >
40.if >
40.if {
value.data = register:count_HMENU_MENUOBJ
isLessThan = 9
}
}

Geschrieben in TYPO3 | Kommentare deaktiviert für GMENU Menüpunkte durchnummerieren