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
« | September 2023 | » | ||||
---|---|---|---|---|---|---|
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 ...
Zur Zeit wird gefiltert nach: php
Filter zurücksetzen
MySQL-Datenbank und TYPO3 auf utf-8 umstellen
Achtung: Keine Gewähr: bei mir hat das folgende geklappt, aber es hängt stark von der Konfiguration von PhpMyAdmin ab! Das muss nämlich bereits korrekt auf utf-8 konfiguriert sein (was allerdings bei neuen Verisionen der Fall sein sollte). Siehe unten die beiden Links für eine Version, die sicherer funktioniert, aber leider Shell-Zugriff benötigt.
Ziel ist die Umstellung einer vorhandenen Installation in ISO-8859-1 nach utf-8. Dazu sind eine Reihe von Schritten nötig:
- mit PhpMyAdmin die Datenbank exportieren. PhpMyAdmin erstellt dabei standardmäßig eine Datei in utf-8; heisst, die Daten sind bereits konvertiert.
- neue DB anlegen und dabei darauf achten, dass die neue DB eine Collation von utf8_general_ci bekommt. Notfalls nachträglich in PhpMyAdmin in der Karteikarte »Operationen« umstellen.
- Die exportiere SQL-Datei in einem Editor öffnen und dort die Einträge “DEFAULT CHARSET=latin1” entfernen.Achtung: bei mir gab es ein Problem mit der Tabelle »tx_realurl_pathcache« – beim Import erhielt ich eine Fehlermeldung, dass der Schlüssel länger wäre als 1000 Zeichen, was nicht erlaubt ist. Das liegt an der Umstellung auf utf-8: durch die benötigten 2 – 3 Byte pro Zeichen wird der Schlüssel zu lang. Ich habe deshalb bei dieser Tabelle “DEFAULT CHARSET=latin1” gelassen.
- Danach die Datei mit PhpMyAdmin importieren. Wenn alles richtig eingestellt ist, werden die Daten jetzt als utf-8 eingelesen. Das kann kontrolliert werden mit einer kleinen PHP-Datei:
Den Output überprüfen, indem die Kodierung im Browser entsprechend umgestellt wird (oder denOutput mit einem HTML-Header erweitern und ein charset mitgeben). Entscheidend ist diese Zeile:
sie stellt nämlich die Collation der Verbindung auf utf-8 um, die sonst standardmäßig auf latin stehen würde. Jetzt müssten alle Seitennamen korrekt in utf-8 im Browser erscheinen und PhpMyAdmin müsste sie ebenfalls korrekt anzeigen. Ohne Umstellen der Verbindung würde PhpMyAdmin zwar korrekt utf-8 in die Datenbank schreiben, wir würden aber mit PHP immer noch latin auslesen.
Der Witz ist, dass jetzt wirklich diese Testdatei und PhpMyAdmin die korrekten Zeichen anzeigen müssen!
Allerdings klappt es in TYPO3 noch nicht. Nächster Schritt:
- Im Installtool muss bei [forceCharset] “utf-8” und bei [setDBInit] “set names utf8” eingetragen werden. Der erste Eintrag sorgt dafür, dass das Backend und die Frontendausgabe immer auf utf-8 eingestellt sind und die zweite Angabe stellt die Kollation der Datenbankverbindung auf utf-8. Insbesondere der zweite Eintrag ist nötig, sonst erhält TYPO3 durch die falsche Standardkollation der Verbindung (latin) doch keine utf-8-Daten.
Weiterführende Links
- UTF-8-Umstellung (Großen Dank an Oliver, der Tipp mit [setDBInit] war der entscheidende Hinweis nach einigen Stunden Suche).
- MySQL: Zeichensatz-Grundlagen – Der ausführlichste Artikel zum Problem der Zeichensätze in MySQL. Köhntopp rät allerdings von einer Umstellung der gesamten Datenbank auf UTF-8 ab und begründet das auch überzeugend mit Speicher- und Performance-Vorteilen. Allerdings erfordert sein Ansatz sehr genaues Arbeiten – Definition von CHARSET und COLLATION auf Spaltenebene.
- UTF-8 für alle – der Artikel thematisiert einige Probleme der String-Verarbeitung in UTF-8 innerhalb von PHP. Ausführlicher in Handling UTF-8 with PHP
GLOBALS TSFE
Über GLOBAL[‘TSFE’] kann man bei der Extension-Programmierung mehr oder weniger auf das gesamte TypoScript-Setup von Typo3 zugreifen. Man kann aktuelle Konfigurationen abfragen oder auch ändern, so dass sich die Ausgabe ins Frontend abhängig vom installierten Plugin auf jeder Seite ändern kann.
Zum Beispiel können damit zusätzliche JavaScript- oder CSS-Definitionen im Kopfbereich ausgegeben werden (siehe CSS und JavaScript im Kopfbereich ausgeben) oder der Bodytag erweitert werden. Folgende Zeile fügt z. B. auf jeder Seite, auf der das Plugin installiert wirde, dem Body-Tag einen onload-Befehl hinzu, wie er für Google-Maps benötigt wird:
- $GLOBALS['TSFE']->pSetup['bodyTagAdd']='onload="load()" onunload="GUnload()';
Mit
- $GLOBALS['TYPO3_DB']->debugOutput=true;
- echot3lib_div::debug($GLOBALS['TSFE']->pSetup);
kann man sich die erste Ebene des $GLOBAL-Arrays ausgeben lassen:
- 0 id
- 1 type
- 2 idParts
- 3 cHash
- 4 no_cache
- 5 rootLine
- 6 page
- 7 contentPid
- 8 sys_page
- 9 jumpurl
- 10 pageNotFound
- 11 domainStartPage
- 12 pageAccessFailureHistory
- 13 MP
- 14 RDCT
- 15 page_cache_reg1
- 16 siteScript
- 17 fe_user
- 18 loginUser
- 19 gr_list
- 20 beUserLogin
- 21 workspacePreview
- 22 loginAllowedInBranch
- 23 ADMCMD_preview_BEUSER_uid
- 24 fePreview
- 25 showHiddenPage
- 26 showHiddenRecords
- 27 simUserGroup
- 28 TYPO3_CONF_VARS
- 29 TCAcachedExtras
- 30 tmpl
- 31 cacheTimeOutDefault
- 32 cacheContentFlag
- 33 cacheExpires
- 34 isClientCachable
- 35 all
- 36 sPre
- 37 pSetup
- 38 newHash
- 39 getMethodUrlIdToken
- 40 no_CacheBeforePageGen
- 41 tempContent
- 42 forceTemplateParsing
- 43 cHash_array
- 44 hash_base
- 45 pagesTSconfig
- 46 additionalHeaderData
- 47 additionalJavaScript
- 48 additionalCSS
- 49 JSeventFuncCalls
- 50 JSCode
- 51 JSImgCode
- 52 divSection
- 53 defaultBodyTag
- 54 debug
- 55 intTarget
- 56 extTarget
- 57 MP_defaults
- 58 spamProtectEmailAddresses
- 59 absRefPrefix
- 60 absRefPrefix_force
- 61 compensateFieldWidth
- 62 lockFilePath
- 63 ATagParams
- 64 sWordRegEx
- 65 sWordList
- 66 linkVars
- 67 excludeCHashVars
- 68 displayEditIcons
- 69 displayFieldEditIcons
- 70 sys_language_uid
- 71 sys_language_mode
- 72 sys_language_content
- 73 sys_language_contentOL
- 74 sys_language_isocode
- 75 applicationData
- 76 register
- 77 registerStack
- 78 cObjectDepthCounter
- 79 recordRegister
- 80 currentRecord
- 81 accessKey
- 82 imagesOnPage
- 83 lastImageInfo
- 84 uniqueCounter
- 85 uniqueString
- 86 indexedDocTitle
- 87 altPageTitle
- 88 pEncAllowedParamNames
- 89 baseUrl
- 90 anchorPrefix
- 91 cObj
- 92 content
- 93 clientInfo
- 94 scriptParseTime
- 95 TCAloaded
- 96 csConvObj
- 97 defaultCharSet
- 98 renderCharset
- 99 metaCharset
- 100 localeCharset
- 101 lang
- 102 langSplitIndex
- 103 labelsCharset
- 104 convCharsetToFrom
- 105 LL_labels_cache
- 106 LL_files_cache
- 107 config
- 108 no_cacheBeforePageGen
- 109 xhtmlDoctype
- 110 xhtmlVersion
Viele der Einträge kommen bekannt vor und man kann sich denken, worum es dabei geht. Wenn man sich für eine Rubrik interessiert, kann man sie sich einzeln ausgeben lassen, z. B. das gesamte config-Setup:
- $GLOBALS['TYPO3_DB']->debugOutput=true;
- echot3lib_div::debug($GLOBALS['TSFE']->config);
TSFE mit Typoscript auslesen
Man kann über Typoscript alle Werte des TSFE auslesen, hier ein Beispiel mit lastImageInfo:
- temp.bildinfo=COA
- temp.bildinfo {
- 10=IMAGE
- # Das Bild muss existieren!
- # Bildbreite
- 20=TEXT
- 20.data=TSFE:lastImageInfo|0
- # Höhe
- 30=TEXT
- 30.data=TSFE:lastImageInfo|1
- # Typ
- 40=TEXT
- 40.data=TSFE:lastImageInfo|2
- # Pfad
- 50=TEXT
- 50.data=TSFE:lastImageInfo|3
- # Pfad zum Originalbild
- 60=TEXT
- 60.data=TSFE:lastImageInfo|origFile
- # Datum und Zeit des Uplaods
- 70=TEXT
- 70.data=TSFE:lastImageInfo|origFile_mtime
- }
Weiterführende Links:
- Auslesen von Informationen des IMAGE
- Auslesen von Informationen aus dem typolink Objekt
- Auslesen von client Informationen
- Andere nützliche Informationen
Ein Anwendungsbeispiel wäre die Bildergalerie mit reinem TypoScript von Georg Ringer bei typo3blogger.de
Extension debuggen
Einige Möglichkeiten, während der Entwicklung einer Extension den Quellcode zu debuggen.
Ein Array ordentlich ausgeben:
- t3lib_div::debug($data);
Wenn es mehrere Debugs sind, kann man sie benennen:
- t3lib_div::debug($data,'Array vorher');
- $data['Name']='Dampf';
- $data['Alter']=32;
- t3lib_div::debug($data,'Array nachher');
Datenbankabfragen:
- $GLOBALS['TYPO3_DB']->debugOutput=true;