Fluid: Select mit zusätzlicher Option

30. Juni 2011 in TYPO3 von Leo

Lange war ich auf der Suche nach einer einfachen Möglichkeit in einem Fluid Select eine default Option anzufügen, sprich eine Option wie “Produkt auswählen” oder ähnlich. Schlussendlich war die beste lösung einen ViewHelper für das Select zu erstellen.
Dabei bin ich erstmals auf folgenden Artikel gestossen: Fluid: Select in Formularen mit weiteren Optionen. Leider führte dies zu einer Fehlermeldung, und ausserdem waren in meinem Fall noch ein paar Anpassungen nötig.

Hier nun eine kurze Anleitung:
Als erstes erstellen wir einen neuen ViewHelper mit dem Namen SelectViewHelper.php unter typo3conf/ext/meineExt/Classes/ViewHelpers/. In diesen fügen wir nun folgenden Code ein:

class Tx_MeineExt_ViewHelpers_SelectViewHelper extends Tx_Fluid_ViewHelpers_Form_SelectViewHelper {

    public function initializeArguments() {
        parent::initializeArguments();
        $this->registerArgument('additionalOptions', 'array', 'Associative array with values to prepend', FALSE);
    }

    protected function getOptions() {
        $options = parent::getOptions();
        $additionalOptions = array();
        foreach ($this->arguments['additionalOptions'] as $key => $value) {
            $additionalOptions[$key] = $value;
        }
        $return = $additionalOptions + $options;
        return $return;
    }

}

Hierbei noch den Namen der Klasse abändern und “meineExt” durch den eigenen Extension namen ersetzen.

Nun bearbeiten wir unser Fluid Template wo das Custom Select hin soll. Dort fügen wir zuoberst folgende Zeile ein:

{namespace meineExt=Tx_meineExt_ViewHelpers}

Der namespace kann eigentlich beliebig heissen, wie man es halt gerne hätte.

Und fügen dann an einer beliebigen Stelle darunter unser Select ein:

<meineExt:select additionalOptions="{- : '-- Produkt wählen --'}" sortByOptionLabel="name" name="products" property="products" options="{allProducts}" optionValueField="uid" optionLabelField="name" />

Der Parameter additionalOptions ist also für unseres Zusätzliche Feld, dort kann ein beliebiger Wert angegeben werden.

Wichtig: In meinem Fall wurde in der getOptions Methode in unserer ViewHelper Klasse keine array_merge verwendet, wie im Original Code, da die Array-Keys noch gebraucht wurden.

TYPO3: Felder über PageTS entfernen

21. Juni 2011 in TYPO3 von Leo

Um für Kunden welche Backend-Zugriff für ihre TYPO3 Installation den Umgang mit TYPO3 möglichst einfach und Benutzerfreundlich zu gestalten, wird alles unnötige – was sie halt nicht benötigen – entfernt. So auch bei den Feldern. Verschiedene Plugins wie z.B. tt_news sind sehr Umfangreich und bieten Felder an die der Kunde nicht benötigt. Da es teilweise sehr viele Felder hat, könnte dies den Benutzer nur verwirren, als dass sie ihm was nutzen. Eine möglichkeit diese Felder zu entfernen, ist über die Zugriffsliste. Man bearbeitet eine Gruppe und kann dort bei den Rechten die Zugriffsliste einschränken, somit werden die ausgeschlossenen Felder ausgeblendet.
Was wenn jedoch einige Felder auf verschiedenen Seiten (oder z.B. SysFoldern mit Datensätzen für Plugins) benötigt werden und auf anderen wiederum nicht?

Eine simple Methode ist das auslagern des pageTS in eine oder mehrere Dateien. Diese Dateien können wir im pageTS einbinden.
Und so gehts:

Wir erstellen eine Datei im fileadmin Ordner, wo genau ist egal. Am besten nehmen wir die Endung .ts, auch wenn es sich eigentlich um eine Textdatei handelt, so wissen wir was es ist.
In dieser Datei können wir für jedes Feld das wir nicht haben wollen folgende Zeile einfügen:

TCEFORM.tt_news.author.disabled = 1

Somit wird das Autoren-Feld von tt_news nicht mehr angezeigt. Dies kann für alle Spalten in einer Tabelle gemacht werden, am besten öffnet man noch phpMyAdmin (oder ähnlich) und kopiert dort die Namen der Spalten.
Um ein Feld zu erlauben wird demnach einfach eine “0″ gesetzt.

Damit das ganze seine Wirkung zeigen kann, muss es noch im pageTS eingebunden werden:

<INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/ts/setup/tt_news-fields.ts">

Fertig! Um Felder je nach Ort zu erlauben / verbieten, erstellt man am besten 2 Dateien (für zum erlauben / verbieten) und bindet diese je nach dem ein wo halt die Felder erlaubt oder verboten werden sollen.

pageTS: Seiten TypoScript, zu finden beim bearbeiten einer Hauptseite unter dem Tab “Resources” (Ressourcen).

Indexed Search installation und konfiguration

5. November 2010 in TYPO3 von Leo

Viele haben anscheinend Probleme mit Indexed Search, der TYPO3 Sucherweiterung. Hier nun ein einfach erklärtes Tutorial für die Installation und Konfiguration von Indexed Search, Schritt für Schritt.
1. Installieren der Extension über den Extension-Manager (da es sich hier um eine System Extension handelt ist sie bereits vorhanden).
2. Kopieren des Templates aus dem Verzeichnis “typo3/sysext/indexed_search/pi/indexed_search.tmpl” nach “fileadmin/templates/ext/indexed_search.tmpl” (Pfad kann aber auch frei gewählt werden, jedoch sollte das Template nicht im typo3/ Verzeichnis sein da es ansonsten bei einem Update überschrieben wird!).
3. Nun auf der obersten Seite ins TypoScript Setup folgenden Code einfügen:

#################################
# Indexed Search aktivieren
#################################
config.index_enable = 1

Dieser Code aktiviert Indexed Search und würde gleich mit dem caching beginnen. Wir benötigen jedoch noch zwei Marker in unserem Template (eigentlich freiwillig, aber empfohlen), welche den zu cachenden Bereich begrenzen, also den Bereich den die Suche dann auch durchsucht und in den Suchergebnissen widerspiegelt.
4. Also fügen wir folgende zwei Marker ein, welche unseren Inhalt umschliessen:

<!--TYPO3SEARCH_begin-->
...
<!--TYPO3SEARCH_end-->

5. Nun sollten die Seiten beim ersten Aufruf für indexed search gecacht werden. Dies kann man im Modul “Info” im Backend überprüfen. Beim Dropdown oben “Indexed Search” auswählen und links im Seitenbaum auf die oberste Seite klicken. Ist nach einem Seitenaufruf über das Frontend nun die Seite gecacht worden sieht man nun eingen kurzen Ausschnitt des gecachten Inhalts.
6. Nun wird im TS Template noch folgender Code im Setup benötigt, welcher noch etwas abgeändert werden muss:

config.language = de
config.locale_all = de_DE
config.sys_language_uid = 0

config.index_externals = 1
# Anzahl der anzuzeigenden Resultate pro Seite
plugin.tx_indexedsearch._DEFAULT_PI_VARS.results = 10
plugin.tx_indexedsearch {
  # ID der obersten Seite
  search.rootPidList = 2
  show.rules = 0
  show.advancedSearchLink = 0
  show.L1sections = 0
  templateFile = fileadmin/templates/ext/indexed_search.tmpl
  _DEFAULT_PI_VARS.lang = 0
  browseBoxWrap = <div class="browsebox">|</div>
  pageWrap = <span>|</span>
}

So weit so gut, Indexed Search wurde nun eingerichtet und läuft hoffentlich!

Pagebrowser (umblättern) funktioniert nicht:

Falls der Pagebrowser (also das Umblättern von Seiten bei Suchergebnissen) nicht funktioniert, rate ich jedem mal die Extension “accessible_is_browse_results” anzusehen, welche das ganze sehr wahrscheinlich wieder funktionstüchtig machen wird. Man kann das ganze jedoch auch ohne zusätzliche Extension gerade biegen, der Fehler wird durch das Umblättern per JavaScript ausgelöst, aber mehr dazu vielleicht mal später.

Java Programmieren Lernen mit MSN

7. Oktober 2009 in Java von Leo

Ja, auch dies ist möglich. Zwar nicht mit MSN direkt, sondern eher mit dem MSN Addon “MSN Plus!”. Für dieses kann man nämlich eigene Skripte erstellen, welche man dann in MSN benutzen kann. Für den Anfang kann man kleinere Skripte programmieren wie “Random Jokes” oder ähnliches. Das ganze wird in “.js” und “.xml” Dateien geschrieben. Das Hauptprogramm kommt in die “.js” Datei, welche den Namen des Skripts trägt. Dort findet (fast) alles statt. Die Skripts können alle mit Java geschrieben werden, der Vorteil ist dabei, dass auch ein Anfänger schnell die ersten Tricks raus hat und gerade bei MSN Plus Skripten schnell ein Resultat sieht. Natürlich bieten die Macher von MSN Plus eine Hilfe für Entwickler, so könnt ihr auf der offiziellen Seite eine Dokumentation – welche derzeitig leider nur auf englisch verfügbar ist – herunterladen. Diese erklärt euch wie alles Funktioniert, und zeigt auch einige Begriffe und Befehle in MSN Plus.