Kategorien
- [-]Developer (104)
- API (15)
- Backend (17)
- Extensions (29)
- HTML & CSS (4)
- Typoscript (33)
- [-]Redaktionelles (21)
- Anleitungen (9)
- Tipps (8)
- [-]Sonstiges (50)
- SEO (8)
Schlagwortwolke
« | April 2024 | » | ||||
---|---|---|---|---|---|---|
S | M | T | W | T | F | S |
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Letzte Nachrichten
- DSGVO
- 26.05.2018 18:39
- Trackingtools und Datenschutzerklärung
- 14.03.2014 23:07
- 1:n und n:1 Relationen in Extbase
- 06.12.2013 12:04
- Erste Abmahnungen wegen Google Analytics
- 04.10.2013 12:11
Letzte Kommentare
- Das liegt daran, dass die captcha.php versucht, das halbe...
- 05.12.2017 00:41
- Hallo, danke für den tollen Beitrag. Kann man die...
- 22.10.2015 10:05
- Vielen Dank für den Austausch guter Artikel. Es ist eine...
- 17.08.2015 10:58
- Hallo Peter, danke für die Extension. Ich habe sie auf...
- 27.08.2014 12:51
In eigener Sache
Peter Linzenkirchner, Lisardo EDV Beratung in Augsburg. Freelance und Partner für Design- und Webagenturen in Augsburg und München. Pixelgenaue Templates, valides HTML, barrierearm. TYPO3-Projekte, Extension-Programmierung und mehr ...
Übersetzungen [Translate to xx];
trans2rm
trans2rm ist eine Extension, um den Eintrag »[Translate to xx]« beim Anlegen einer neuen Sprachversion zu unterdrücken. Sie muss nur installiert werden.
Um zu verhindern, dass in leere Titel-Felder (Copy) eingefügt wird, muss ausserdem im Page TSconfig dieser Eintrag hinein:
- TCEMAIN.default.disablePrependAtCopy=1</span>
Weiterführende Links
Suchtipps
Links, die auf meine Domain zeigen:
- linkdomain:lisardo.de (bei Yahoo)
- link:www.lisardo.de (Google)
Links, die von meiner Domain wegzeigen:
- LinkFromDomain:lisardo.de (search.msn.de)
Ähnliche Seiten suchen:
- related:www.lisardo.de (Google)
Nur in meiner Domain suchen:
- Stichwort site:www.lisardo.de (Google)
Sprachmenü
Als Sprachumschalter wird sinnvollerweise das Sprachmenü von Typoscript benutzt. Hier ein Beispiel, das einen Sprachumschalter einbaut, der zwischen zwei Sprachen wechselt und dazu keine Fahnen benutzt, sondern Text.
- temp.nav_top_intern {
- 20=HMENU
- 20 {
- special=language
- special.value=1,0
- 1=TMENU
- 1 {
- NO=1
- NO.linkWrap= | |
- NO.stdWrap.cObject=TEXT
- NO.stdWrap.cObject {
- value=Englisch||German
- }
- USERDEF1< .NO
- USERDEF1 {
- doNotLinkIt=1
- stdWrap.typolink.parameter=399
- stdWrap.typolink.additionalParams= &L=1
- }
- }
- }
- }
Dieses Menü hat den Vorteil, dass bei einer fehlenden Übersetzung einer Seite auf eine selbst zu definierende Startseite gesprungen werden kann.
Man kann es auch so aufbauen, dass ein Wechsel zwischen den Textausgabe erfolgt, also in den deutschen Seiten wird nur Englisch als Link ausgegeben und umgekehrt.
- temp.nav_top_intern {
- 20=HMENU
- 20 {
- special=language
- special.value=1
- 1=TMENU
- 1 {
- NO=1
- NO.linkWrap= | |
- NO.stdWrap.cObject=TEXT
- NO.stdWrap.cObject {
- value=English
- }
- USERDEF1< .NO
- USERDEF1 {
- doNotLinkIt=1
- stdWrap.typolink.parameter=399
- stdWrap.typolink.additionalParams= &L=0
- }
- }
- }
- }
- [globalVar=GP:L=1]
- # Kopfmenü mit Sprachumschaltung.
- temp.nav_top_intern {
- 20.special.value=0
- 20.1.NO.stdWrap.cObject.value=Deutsch
- 20.1.USERDEF1.stdWrap.typolink.additionalParams= &L=0
- }
Weiterführende Links
- Typoscript-Referenz (Abschnitt “language” unter Rubrik “special”)
Sichere Extensions
Tipps zum Absichern eigener Extensions
Unsicher Programmierung in Extensions ist eine der größten Gefahren bezüglich der Sicherheit einer TYPO3-Installation. Während der Core regelmäßig geprüft wird und Sicherheitsmängel zügig behoben werden, gilt das für viele Extensions nicht. Die wichtigsten EXtensions werden einem regelmäßigen Audit unterworfen, aber bei weitem nicht alle, dazu sind es zuviele. Und Extensions, die ihren Weg nie ins TER finden, werden natürlich auch nie geprüft.
TYPO3-API für Datenbank-Zugriffe
Generell sollte die TYPO3-API für alle Datenbankzugriffe verwendet werden. Diese sorgt unter anderem für das nötige Quotieren der Eingaben.
Wichtig sind hier vor allem diese beiden Methoden:
- $GLOBALS['TYPO3_DB']->fullQuoteStr($str,$table)
- $GLOBALS['TYPO3_DB']->fullQuoteArray($arr,$table,$noQuote=FALSE);
Näheres im Abschnitt Datenbankabfragen.
Einige Methoden der Klasse t3lib_div
Die Methoden der Klassse t3lib_div werden statisch aufgerufen.
- // Entfernt gefährlichen Code, Rückgabewert der bereinigte String
- t3lib_div::removeXSS($string)
- // Gültige E-Mail: Rüpckgabewert true/false
- t3lib_div::validEmail($email)
- // Testet auf gültige URL, Rückgabewert tru/false
- t3lib_div::isValidUrl($sanitizedUrl)
Übergabeparameter
Alle GET- und POST-Variablen sollten über die entsprechenden Funktionen der TYPO3-API angesprochen werden:
- // Übernahme der Parameter mit Namensindex der Extension:
- $this->piVars['parameter'];
- // Wenn das nicht möglich ist, dann so:
- t3lib_div::_GP($var);
- // oder getrennt nach GET / POST
- t3lib_div::_GET($var);
- t3lib_div::_POST($var);
Wichtige PHP-Befehle
- // Kürzen eines UTF-8-Strings
- // Länge eines UTF-8-Strings prüfen
- // Integer erzwingen
- // Alle Tags aus einem String entfernen:
- // einige Tags erlauben (Achtung: die erlaubten Tags können Parameter enthalten!)
- // Tags in Entities umwandeln:
Datenfilter – neue Möglichkeiten mit PHP5
Diese Datenfilter werden in TYPO3 seit einigen Versionen ebenfalls eingesetzt. Einige kleine Anwendungsbeispiele:
- // Test auf korrekte URL
- $url='http://www.lisardo.de';
- if ( @filter_var($url,FILTER_VALIDATE_URL) ===FALSE){
- }else{
- }
- // oder ein Test auf korrekte E-Mail:
- if(!filter_var("someone@lisardo...de",FILTER_VALIDATE_EMAIL)){
- }
- else{
- }
- // Oder ein Test ob eine POST-Variable namens "mail" eine gültige E-Mail enthält:
- if (!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
- echo"E-Mail ist falsch";
- }
- else{
- echo"E-Mail korrekt";
- }
Ein schöner Überblick über alle Filter mit Beispielcode ist bei w3schools, PHP Filter Functions zu finden. eine genaue Erläuterung im offiziellen PHP-Manual, Datenfilterung
Weiterführende Links
Accordion mit rgaccordion von Georg Ringer
Accordion mit rgaccordion von Georg Ringer
Eine sehr leistungsfähige Extension für vielseitigen Einsatz. Man kann damit:
- alle Contentelemente einer Seite in ein Accordion zusammenfassen
- ausgewählte Contentelemente zu einem Accordion zusammenfassen
- ein Menü mit Accordion erstellen sowie
- die Inhalte vieler Extensions in ein Accordion packen.
Die Dokumentation ist gut und umfassend, muss allerdings genau gelesen werden, sonst klappt es nicht … Dort sind auch Hinweise zu finden, wie die Einbindung für normale Templates und für TemplaVoila funktioniert.
rgaccordion II für einzelne Contentelemente
Die Extension besteht aus zwei Teilen: rgaccordion I erlaubt das Auswählen einzelner Inhaltselemente für das Accordion im Inhaltselement selbst, während rgaccordion II dazu gedacht ist, alle Inhaltselemente einer Seite in ein Accordion zusammenzufassen. Leider unterscheiden sich beide Extensions aber noch in einer Eigenschaft: rgaccordion II öffnet standardmäßig immer nur einen Tab, während rgaccordion I jeden Tab unabhängig öffnet oder schließt. Damit sind bei rgaccordion I immer mehrere Tabs geöffnet. Wenn immer nur ein Tab geöffnet sein soll und gleichzeitig der Anwender selbst zu bestimmen kann, welche Inhalte in das Accordion aufgenommen werden sollen, muss rgaccordion II zusätzlich konfiguriert werden:
- plugin.tx_rgaccordion2 {
- stdWrap.outerWrap= <divclass="rgaccord2-content">|</div>
- stdWrap.outerWrap.if.isTrue.field=tx_rgaccordion_accordion
- stdWrap.outerWrap.stdWrap.prepend= TEXT
- stdWrap.outerWrap.stdWrap.prepend.field=header
- stdWrap.outerWrap.stdWrap.prepend.ifEmpty=Test
- stdWrap.outerWrap.stdWrap.prepend.wrap= <h3class="rgaccord2-toggle">|</h3>
- stdWrap.outerWrap.stdWrap.prepend.if.isTrue.field=tx_rgaccordion_accordion
- }
Achtung: der Code muss vor dem Zuweisen des Plugins eingefügt werden.
In rgaccordion II beim Laden einen bestimmten Tab öffnen
Um beim Laden der Seite einen bestimmten Tab zu öffnen (oder auch keinen) muss das JavaScript geändert werden:
- window.addEvent('domready', function(){
- varaccordion= newAccordion('h3.rgaccord2-toggle','div.rgaccord2-content',{
- alwaysHide:true,
- opacity:false,
- # hier kommt die Erweiterung:
- display:-1,
- # Ende der Erweiterung
- onActive: function(toggler,element){
- toggler.addClass('act');
- },
- onBackground: function(toggler,element){
- toggler.removeClass('act');
- }
- }, $('rgaccord2-nest'));
- });
display:-1 schließt alle Tabs; display:0 öffnet den ersten, danach durchnummerieren.
Damit nach dieser Änderung das Updaten der Extension noch möglich ist, sollte das JavaScript genauso wie dasCSS in fileadmin verschoben werden.
- page.includeCSS.file57=fileadmin/css/rgaccordion2.css
- page.includeJS.file51 =EXT:t3mootools/res/mootoolsv1.11.js
- page.includeJS.file52 =fileadmin/js/rgaccordion2.js
Tipp: Der Eintrag »EXT:t3mootools/res/mootoolsv1.11.js« ist abhängig von der verwendeten Version von T3-Mootools. Muss man ggf. nachschlagen; der Eintrag in der Dokumentation von rgaccordion ist wahrscheinlich veraltet.