Schnellnavigation:

Kategorien

« 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

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

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

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:

  1. TCEMAIN.default.disablePrependAtCopy=1</span>
  2.  

Weiterführende Links

Manual auf Typo3.org

Page TSconfig auf Typo3

 

Kategorien: Backend  Kommentare 0
Tags: sprachen, trans2rm
01September2010

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)
Kategorien: Sonstiges  Kommentare 0
Tags: suchtipps, seo
01September2010

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.

  1. temp.nav_top_intern {
  2.     20=HMENU
  3.     20 {
  4.         special=language
  5.         special.value=1,0
  6.         1=TMENU
  7.         1 {
  8.             NO=1
  9.             NO.linkWrap= |&nbsp;&#124;&nbsp;
  10.             NO.stdWrap.cObject=TEXT
  11.             NO.stdWrap.cObject {
  12.                 value=Englisch||German
  13.             }
  14.             USERDEF1< .NO
  15.             USERDEF1 {
  16.                 doNotLinkIt=1
  17.                 stdWrap.typolink.parameter=399
  18.                 stdWrap.typolink.additionalParams= &L=1
  19.             }
  20.         }
  21.     }
  22. }

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.

  1. temp.nav_top_intern {
  2.     20=HMENU
  3.     20 {
  4.         special=language
  5.         special.value=1
  6.         1=TMENU
  7.         1 {
  8.             NO=1
  9.             NO.linkWrap= |&nbsp;&#124;&nbsp;
  10.             NO.stdWrap.cObject=TEXT
  11.             NO.stdWrap.cObject {
  12.                 value=English
  13.             }
  14.             USERDEF1< .NO
  15.             USERDEF1 {
  16.                 doNotLinkIt=1
  17.                 stdWrap.typolink.parameter=399
  18.                 stdWrap.typolink.additionalParams= &L=0
  19.             }
  20.         }
  21.     }
  22. }
  23.  
  24. [globalVar=GP:L=1]
  25.  
  26. # Kopfmenü mit Sprachumschaltung.
  27. temp.nav_top_intern {
  28.     20.special.value=0
  29.     20.1.NO.stdWrap.cObject.value=Deutsch
  30.     20.1.USERDEF1.stdWrap.typolink.additionalParams= &L=0
  31. }
  32.  

Weiterführende Links

 

 

 

 

Kategorien: Typoscript  Kommentare 0
Tags: menü, sprachen

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: 

  1. $GLOBALS['TYPO3_DB']->fullQuoteStr($str,$table)
  2. $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.

  1. // Entfernt gefährlichen Code, Rückgabewert der bereinigte String
  2. t3lib_div::removeXSS($string)
  3. // Gültige E-Mail: Rüpckgabewert true/false
  4. t3lib_div::validEmail($email)
  5. // Testet auf gültige URL, Rückgabewert tru/false
  6. t3lib_div::isValidUrl($sanitizedUrl)

Übergabeparameter

Alle GET- und POST-Variablen sollten über die entsprechenden Funktionen der TYPO3-API angesprochen werden:

  1. // Übernahme der Parameter mit Namensindex der Extension:
  2. $this->piVars['parameter'];
  3. // Wenn das nicht möglich ist, dann so:
  4. t3lib_div::_GP($var);
  5. // oder getrennt nach GET / POST
  6. t3lib_div::_GET($var);
  7. t3lib_div::_POST($var);

Wichtige PHP-Befehle

  1. // Kürzen eines UTF-8-Strings
  2. mb_substr($string,0,50);
  3. // Länge eines UTF-8-Strings prüfen
  4. mb_strlen($string);
  5. // Integer erzwingen
  6. intval($this->piVars['wert']);
  7. // Alle Tags aus einem String entfernen:
  8. strip_tags($string);
  9. // einige Tags erlauben (Achtung: die erlaubten Tags können Parameter enthalten!)
  10. strip_tags($this->piVars['wert'],'<em><i>')
  11. // Tags in Entities umwandeln:
  12. htmlspecialchars($this->piVars['wert'])

Datenfilter – neue Möglichkeiten mit PHP5

Diese Datenfilter werden in TYPO3 seit einigen Versionen ebenfalls eingesetzt. Einige kleine Anwendungsbeispiele:

  1. // Test auf korrekte URL
  2. $url='http://www.lisardo.de';
  3. if ( @filter_var($url,FILTER_VALIDATE_URL) ===FALSE){
  4.     echo$url.' falsch';
  5. }else{
  6.     echo$url.' korrekt';
  7. }
  8. // oder ein Test auf korrekte E-Mail:
  9. if(!filter_var("someone@lisardo...de",FILTER_VALIDATE_EMAIL)){
  10.       echo("E-mail falsch");
  11. }
  12. else{
  13.       echo("E-mail korrekt");
  14. }
  15. // Oder ein Test ob eine POST-Variable namens "mail" eine gültige E-Mail enthält:
  16. if (!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
  17.       echo"E-Mail ist falsch";
  18. }
  19. else{
  20.       echo"E-Mail korrekt";
  21. }

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

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:

  1. plugin.tx_rgaccordion2 {
  2.     stdWrap.outerWrap= <divclass="rgaccord2-content">|</div>
  3.     stdWrap.outerWrap.if.isTrue.field=tx_rgaccordion_accordion
  4.     stdWrap.outerWrap.stdWrap.prepend=  TEXT
  5.     stdWrap.outerWrap.stdWrap.prepend.field=header
  6.     stdWrap.outerWrap.stdWrap.prepend.ifEmpty=Test
  7.     stdWrap.outerWrap.stdWrap.prepend.wrap= <h3class="rgaccord2-toggle">|</h3>
  8.     stdWrap.outerWrap.stdWrap.prepend.if.isTrue.field=tx_rgaccordion_accordion
  9. }

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:

  1. window.addEvent('domready', function(){
  2. varaccordion= newAccordion('h3.rgaccord2-toggle','div.rgaccord2-content',{
  3.     alwaysHide:true,
  4.     opacity:false,
  5.     # hier kommt die Erweiterung:
  6.     display:-1,
  7.     # Ende der Erweiterung
  8.     onActive: function(toggler,element){
  9.         toggler.addClass('act');
  10.     },
  11.  
  12.     onBackground: function(toggler,element){
  13.         toggler.removeClass('act');    
  14.     }
  15. }, $('rgaccord2-nest'));   
  16.  
  17. });

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.

  1. page.includeCSS.file57=fileadmin/css/rgaccordion2.css
  2. page.includeJS.file51 =EXT:t3mootools/res/mootoolsv1.11.js
  3. page.includeJS.file52 =fileadmin/js/rgaccordion2.js
  4.  

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.

Weiterführende Links