Indexed Search in TYPO3 einrichten

Basierend auf einen Älteren Beitrag (Eigene Suchbox mit Typoscript für Indexed Search) , habe ich mich entschlossen noch mal generell die Einrichtung von Indexed Search zu berichten.

Wichtig finde ich zu wissen, dass man zwar direkt loslegen kann, wenn man das Plugin aktiviert hat, aber die Seiten erst in den Index müssen. Am besten bietet sich dafür das interne Plugin “Scheduled” / “Taskplaner”. Dieser könnte entweder direkt oder mit einem weiteren Plugin “Crawler” die Seite 1:1 einmal abrufen und dann den Index aufbauen.

Alternative wäre vielleicht ein externer Site-Crawler / Sitemap-Generator, da diese einmal über die komplette Seite gehen. “Indexed Search in TYPO3 einrichten” weiterlesen

Eigene Suchbox mit Typoscript für Indexed Search (tx_indexedsearch)

Bei vielen Seiten vorallem neuen Responsive-Seiten, wünscht man sich eine Suchbox die man komplett selber gestalten kann. Die Plugins die man findet, sind leider nicht immer passend und selber schreiben geht, aber wie….

Hier im Artikel, zeige ich euch wie es mit kurzen TypoScript anweisungen dies zu realisieren ist.

“Eigene Suchbox mit Typoscript für Indexed Search (tx_indexedsearch)” weiterlesen

RealURL valueDefault language

Hallo zusammen,
damit in TYPO3 kein doppelter Content entsteht, sollte man die default-Language in der URL direkt mit darstellen, ansonsten wird domain.ltd/home und domain.ltd/de/home als doppelter Content gezählt. Um das zu vermeiden, kann man ein wenig an der Config von RealURL arbeiten.

RealURL-Teil-Auszug — NICHT komplette Konfiguration!

<?php
$GLOBALS&#91;'TYPO3_CONF_VARS'&#93;&#91;'EXTCONF'&#93;&#91;'realurl'&#93; = array (
    '_DEFAULT' => array (
        'preVars' => array (
            '0' => array (
                'GETvar' => 'no_cache',
                'valueMap' => array (
                    'nc' => '1',
                ),
                'noMatch' => 'bypass'
            ),
            '1' => array (
                'GETvar' => 'L',
                'valueMap' => array (
                    'de' => '0',
                    'en' => '1',
                    'fr' => '2',
                ),
                'valueDefault' => 'de', // default language 
                //'noMatch' => 'bypass',
            ),
            '2' => array (
                'GETvar' => 'lang',
                'valueMap' => array (
                    'de' => 'de',
                    'en' => 'en',
                    'fr' => 'fr',
                ),
                'noMatch' => 'bypass',
            ),
        ),
    ),
);
?>

Dann würde ich noch auf dem Root-Pfad im Seitenbaum ein Shortcut auf eine Unterseite machen. Somit entsteht direkt eine URL mit Sprach-Segemet (http://domain.ltd/de/SEITENNAME). Und alle anderen Semantischen-Links haben das Sprachsegment mit im Pfad.

Viel Spaß damit

wt_directory für TYPO3 6.2.x

Update: 2016/01/01

Hallo zusammen,
hier noch ein kleines Updat ezu dem Thema. Es wurde weiter entwickelt…
Git:

Alte Version:

Hallo in die Runde,
im Zuge eines Update bei einem Kunden, habe ich das sehr alte Plugin von wt_directory und wt_doormann auf die neue TYPO3 6.2.x Version angepasst. Ich garantiere nichts aber bei mir läuft es nun wieder und man kann auch wie in den alten Versionen alle Punkte hädnisch anpassen im Backend.

Gestet: TYPO3 6.2.9 – 11.01.2015

Bugfix#1: Danke Frank für die Anpassungen für die Kategorie-Auswahl.
Bugfix#1 – Info:
Habe noch was zum “Mehr-Link” herausgefunden, mit dem man von der Listenansicht auf die Detailansicht eines Adresseintrags wechselt:
Hierbei wird derzeit dieser Fehler ausgegeben “#1401732564: Invalid file identifier given. It must be of type string and not empty. “NULL” given.” Ein Bug im Source von TYPO3 6.2.x, an dem anscheinend aktuell gearbeitet wird (siehe https://forge.typo3.org/issues/62184).
Beim wt_directory ist davon die Funktion zum Einbinden von Bildern betroffen (imageLinkWrap), welche man durch folgenden Eintrag im TS-Setup deaktivieren kann (getestet mit TYPO3 6.2.9):
plugin.tx_wtdirectory_pi1.detail.field.image.split.1.10.imageLinkWrap.enable = 0

Viel Spaß,
Marc

Form-Session-Data per Typoscript überprüfen mit If-Else

Hallo zusammen, aus einem gegeben Anlass wieder ein kleines Tutorial diesmal zum Thema:
IF-Else und Typo3-Session in einer Typoscript verarbeitung.

Wenn man in Typo3 einen bestimmten Content zeigen muss bevor man gewisse AGB’s akzeptiert hat, kann man das am besten über die Session und einem kleinen Formular lösen. Dazu muss man im Folgeschritt etwas am Typoscript arbeiten um dies zu Händeln.

Mein aktuelles Projekt ist sehr alt und daher wird der „Template Auto-parser“ noch verwendet, wodrauf das Beispiel beruht. Ich denke, aber das es auch eben so mit TemplaVoila läuft.

An diesem Beispiel zeige ich, wie man mit ein paar Tricks, eine kleine Content-Weiche
schaltet und dem User dazu bringen muss, etwas zu akzeptieren oder darauf zu verzichten was nach der Weiche steht.

Das Typoscript:

# Display a tt_content record
###################################
lib.agbtext = RECORDS
lib.agbtext {
      tables = tt_content
      source = 911,939
      dontCheckPid = 1
}

# check the session-data
###################################
tmp.check = COA
tmp.check {
  10 = COA
  10 {
       if {
           value.data = TSFE:fe_user|sesData|recs|ts|akz
           equals = Akzeptieren
           negate=1
       }
       10 < lib.agbtext
  }
  20 = COA
  20 {
       if {
           value.data = TSFE:fe_user|sesData|recs|ts|akz
           equals = Akzeptieren
       }
       10 < temp.content
  }
}

# override the template-parsing
###################################
temp.mainTemplate.subparts.content < tmp.check
page.10 < temp.mainTemplate
&#91;/code&#93;
<p>&nbsp;</p>
<p><strong>Das Formular:</strong></p>

<div class="absatzDisclaimer">
  <form method="post">
    <table cellspacing="0" cellpadding="0" border="0"><tbody>
      <tr>
        <td style="width: 150px;">
        <input type="submit" name="recs&#91;ts&#93;&#91;akz&#93;" value="Nicht akzeptieren"></td>
        <td style="width: 150px;">
        <input type="submit" name="recs&#91;ts&#93;&#91;akz&#93;" value="Akzeptieren"></td>
      </tr></tbody>
    </table>
  </form>
</div>

 

Erklärung:

Das „lib.agbtext“ speichert 2 Datensätze von der Webseite die in einem nicht sichtbaren Bereich abgelegt werden, am besten so dass die Suchmaschine es auch nicht finden kann (SEO Hintergrund).

Das „tmp.check“ checkt die Session und zeigt je nach Zustand entweder den „lib.agbtext“ oder wenn es erfolgreich / zutreffend ist wird der aktuelle Content dargestellt.

Am Schluss wir durch das Schreiben in den Subpart wie Weiche vervollständigt. „temp.mainTemplate.subparts.content < tmp.check“

 

Viel Spaß damit 🙂
Marc

Image aus Templavoila mit Fallback-Bild (ifEmpty, isFalse)

Hallo Freunde,
ich hatte das Problem, wenn ich ein Bild in TemplaVoila als “Image-Field” setze, wird mir nie ein Fallback Bild angezeigt. Nach langem Suchen, Testen & Probieren habe ich folgende Lösung entwickelt.

Wie wo was warum:
Was: field_backimg wird als Image-Field festgelegt.
Wo: In den Seiten-Eigenschaften.
Was: Man kann pro Seite ein Bild auswählen und definiert somit das Hintergrundbild.
Warum: Der Kunde soll ein Hintergrundbild selber bestimmen können, aber auch ein Fallback-Bild bekommen, wenn er keins wählt.

Das Problem:
Im normalem Fall wird durch TemplaVoila Folgendes geschrieben:

10 = IMAGE
10.file.import = uploads/tx_templavoila/
10.file.import.current = 1
10.file.import.listNum = 0
10.file.maxW = 200

Damit kann man aber dann kein Default-Fallback-Bild definieren, da das “current = 1” alles überschreibt. Auch die ifTrue, ifFalse & ifEmpty fassen hier bei nicht.

Die Lösung:
Man bindet das Bild nicht mit “current = 1” ein, sondern holt sich die Daten über “import.data” aus dem Feld. Somit macht man das gleiche wie “current = 1” nur das man dann ein Fallback-Bild setzen kann.

10 = IMAGE
10 {
	file = fileadmin/user_upload/backgrounds/default.jpg
	file {
		import = uploads/tx_templavoila/
		import.data = field:field_backimg
		import.listNum = 0
	}
	# optional Pagetitle als alt/titletag
	altText.data= levelfield :-1, title, slide
	#titleText.data= levelfield :-1, title, slide
}

Viel Spaß damit,
Marc