Donnerstag, 27. Oktober 2011

sr_feuser_register mit md5: Wechsel auf rsa/saltedpasswords

Versionen vor dem Wechsel (funktionierte nicht mehr):
  • TYPO3 4.5.6
  • felogin 1.3.1
  • sr_feuser_register 2.5.27
  • kb_md5fepw 0.4.0
Schritt 1: Extensions
  • kb_md5fepw entfernen
  • sr_feuser_register update auf 2.6.1
  • rsaauth 1.1.0 installieren
  • saltedpasswords 1.0.0 installieren
  • srfeuserregister_t3secsaltedpw 0.2.0 importieren/installieren
Schritt 2: localconf.php anpassen, folgendes hinzufügen
  • $TYPO3_CONF_VARS['FE']['loginSecurityLevel'] = 'rsa';
  • $TYPO3_CONF_VARS['BE']['loginSecurityLevel'] = 'rsa';
Schritt 3: saltedpasswords erneut konfigurieren
  • FE und BE aktivieren
  • MD5 salted hashing verwenden
Schritt 4: sr_feuser_register Konfiguration ändern
  • plugin.tx_srfeuserregister_pi1.useMd5Password = 0
  • plugin.tx_srfeuserregister_pi1.useRSA = 0
  • plugin.tx_srfeuserregister_pi1.useSaltedPassword = 1

Mittwoch, 5. Oktober 2011

Return Path bei Emails

Wenn mailformplus oder der formhandler Emails versenden steht als return-path im Email die Adresse des Servers. Automatische Antworten oder Unzustellbar-Meldungen werden dann aber auch an diese return-path Adresse gesendet. Nicht an die reply-to Adresse.

Damit auch die return-path Adresse korrekt gesetzt ist, muss man im localconf.php folgende Zeile hinzufügen.
$TYPO3_CONF_VARS['SYS']['forceReturnPath'] = 1;

Beim formhandler muss man beim Finisher auch den return_path setzen.
plugin.Tx_Formhandler.settings.predef.myform {
finishers {
5.class = Tx_Formhandler_Finisher_Mail
5.config {
admin {
return_path = return@to.me
}
user {
return_path = return@to.me
}
}
}
}

Dienstag, 26. Juli 2011

Standard Sprache ändern (2/2)

Die Seiten habe ich via eine Kopie der Tabelle erstellt.

Zuerst die Tabelle pages kopieren, inkl. Inhalte. (pages_new)

Schritt 1:
update pages left join pages_language_overlay on pages.uid=pages_language_overlay.pid set pages.title=pages_language_overlay.title,        pages.subtitle=pages_language_overlay.subtitle,     pages.description=pages_language_overlay.description,        pages.keywords=pages_language_overlay.keywords,        pages.abstract=pages_language_overlay.abstract,        pages.nav_title=pages_language_overlay.nav_title    where pages_language_overlay.sys_language_uid=1;

Schritt 2:
update pages_language_overlay right join pages_new on pages_language_overlay.pid=pages_new.uid set pages_language_overlay.title=pages_new.title,        pages_language_overlay.subtitle=pages_new.subtitle,     pages_language_overlay.description=pages_new.description,        pages_language_overlay.keywords=pages_new.keywords,        pages_language_overlay.abstract=pages_new.abstract,        pages_language_overlay.nav_title=pages_new.nav_title    where pages_language_overlay.sys_language_uid=1;

Donnerstag, 21. Juli 2011

Standard Sprache ändern (1/2)

Soviel ich weiss gibt es keine Funktion im TYPO3, die erlaubt die Standardsprache zu ändern. Wenn man TemplaVoila verwendet ist es noch ein Level komplizierter, da IDs von Inhalten in einem templavoila Feld der Seite gespeichert werden.

Aktuelles Setup: Deutsch ist die Standardsprache, English Sprache 1, Französisch Sprache 2.

Ziel: Englisch soll die Standardsprache sein und Deutsch die erste alternative Sprache.

Mit folgenden SQL Statements hat es geklappt.

sys_language_uid der Deutschen Inhalte ändern (von 0 auf 10):
update tt_content set sys_language_uid=10 where sys_language_uid=0;

sys_language_uid der Englischen Inhalte ändern (von 1 auf 0):
update tt_content set sys_language_uid=0 where sys_language_uid=1;

sys_language_uid der Deutschen Inhalte ändern (von 10 auf 1):
update tt_content set sys_language_uid=1 where sys_language_uid=10;

l18n_parent neu setzen für die Deutschen Inhalte:
UPDATE tt_content as c1
    RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
    SET c1.l18n_parent=c1.uid,c1.t3_origuid=c1.uid
    WHERE c1.sys_language_uid=1
        AND c2.sys_language_uid=0;

uid ändern bei allen Deutschen Inhalten  (> als grösste aktuelle Content ID!):
UPDATE tt_content as c1
    RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
    SET c1.uid=c2.uid+10000
    WHERE c1.sys_language_uid=1
        AND c2.sys_language_uid=0;

uid der Englischen Inhalte ändern auf die Id der ehemals Deutschen Inhalte:
UPDATE tt_content
    SET uid=l18n_parent where sys_language_uid=0 and l18n_parent>0;

uid der Deutschen Inhalte wieder ändern
UPDATE tt_content
    SET uid=uid-10000 where sys_language_uid=1 and uid>10000;

Clean up
UPDATE tt_content 
    SET l18n_parent=0,t3_origuid=0,l18n_diffsource=''
    where sys_language_uid=0 and l18n_parent>0;

Und bestimmte Felder überetragen:
UPDATE  tt_content as c1
    RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
    SET c1.hidden=c2.hidden,
        c1.starttime=c2.starttime,
        c1.endtime=c2.endtime
    WHERE c1.sys_language_uid=0
        AND c2.sys_language_uid=1;

Multi-Domain Websites und Cross-Domain Links mit TYPO3

Damit Cross Domain Links bei Multi-Domain Setups korrekt funktionieren müssen folgende Voraussetzungen erfüllt sein. Getestet mit TYPO3 4.5.

1. Bei den Einstiegsseiten der Domains muss die Checkbox "Als Anfang der Website benutzen" aktiviert sein.

2. Folgende TypoScript Konfiguration muss gesetzt sein.
config.typolinkCheckRootline = 1
config.typolinkEnableLinksAcrossDomains = 1

Donnerstag, 23. Juni 2011

Mehrsprachige TYPO3 Website: Seltsame L-Werte

Kürzlich ist mir aufgefallen, dass seltsame L-Werte in den URLs von mehrsprachigen TYPO3 Websites auftauchen. Zum Beispiel L=azcdkefuds anstatt L=1 oder L=0

Irgendwo habe ich gelesen, dass es mit RealURL und dem Cache zusammenhängt. Ob das Problem nur bei gewissen Versionen von TYPO3 und/oder RealURL auftritt, habe ich nicht untersucht.

Mühsam war, dass bei der aktuellen Konfiguration diese seltsamen L-Wert bei jedem weiteren Link gesetzt war. Auch Google hatte bereits einige Seiten mit seltsamen L-Werten im Index.

Eine kleine Änderung bei der linkVars Definition schafft immerhin zum Teil Abhilfe. "Falsche" L-Werte werden bei Links nicht weiterverwendet.

Anstatt

config.linkVars = L

verwendet man bei z.B 3 Sprachen

config.linkVars = L(1-2)

Diese Einstellung hilft auch doppelte URLs für eine bestimmte Seite zu minimieren.
http://www.domain.com/seite.html und http://www.domain.com/seite.html?L=0 ist die gleiche Seite wird aber bei Google Analytics separat aufgelistet. Der canonical Tag soll/kann dabei auch helfen.

Donnerstag, 16. Juni 2011

Thumbnails bei Facebook Status Links

Verwendet man config.baseURL bzw. keine absoluten URLs zu Bildern, dann findet Facebook beim Posten von Links zu TYPO3 Webseiten keine Bilder und stellt daher auch keine Thumbnails zur Verfügung.

Abhilfe schafft config.absRefPrefix
config.absRefPrefix = http://www.domain.com/

Wenn man hauptsächlich Statusmeldungen mit Links zu News erstellt, kann man diese Einstellung auch nur bei der Detailansicht von News verwenden.

Donnerstag, 9. Juni 2011

Downloads in der Google Analytics Statistik

Wenn Google Analytics verwendet wird und auch Downloads von z.B. PDF Dateien überwacht werden sollen, kann man die _trackPageview Funktion verwenden.

Für normale Dateilisten (Inhaltselement für Dateien/Downloads) reicht ein kleines TypoScript Snippet aus.

tt_content.uploads.20 {
 layout.file = <div class="###CLASS###"><span><a href="###URL###" onclick="javascript:pageTracker._trackPageview('Download ###TITLE###'); ">###TITLE###</a> ###FILESIZE### ###CRID### ###MYMARK###</span><span>###DESCRIPTION###</span></div>
}

Eingefügt wurde nur:

onclick="javascript:pageTracker._trackPageview('Download ###TITLE###');"

Der Prefix "Download " ist optional, kann aber helfen im GA die Statistik für alle Downloads zu finden oder auch für Filter-Funktionen.

Spezielle Konfigurationen für tt_news und RTE Links
Damit auch Downloads bei News (tt_news) und via RTE verlinkte Dateien von Google Analytics erfasst werden, benötigt man zusätzlich eine JavaScript Funktion damit der Dateiname der _trackPageview() Funktion übergeben werden kann.

JavaScript Funktion
function getDownloadFileName(url) {
 var strFilename;
 var strHref = url;
 strHref = strHref.replace(/\//g,"\\");
 var index = strHref.lastIndexOf("\\");
 if (-1<index) {
  strFilename = strHref.substring(index+1);
 } else {
  strFilename = strHref;
 }
 return strFilename;
}

TypoScript Snippet für tt_news
plugin.tt_news {
 newsFiles {
  ATagParams = onClick="javascript:pageTracker._trackPageview(getDownloadFileName(this.href));"
 }
}

TypoScript Snippet für RTE Links
lib.parseFunc_RTE.tags.link.typolink.ATagParams {
  cObject = TEXT
  cObject {
    value = getDownloadFileName(this.href)
    wrap (
      onclick="javascript:pageTracker._trackPageview(|);"
    )
  }
}

Donnerstag, 2. Juni 2011

Syntax Highlighting in den Blog Posts

Damit Code Snippets in den Blog Posts schön dargestellt werden können, ist der Einsatz des SyntaxHighligher Pakets nützlich.

Installation
Bei Blogger.com geht man wie folgt vor. Design > HTML bearbeiten auswählen. Vor dem schliessenden </head> Tag folgenden Code einfügen.

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script language='javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>

Und vor dem schliessenden </body> Tag den Highlighter aufrufen.

<script language='javascript'>
    SyntaxHighlighter.all()
</script>

That's it.

Verwendung
Um ein Code Snippet in den Post integrieren zu können, wechselt man in die HTML Ansicht (HTML bearbeiten) und platziert den Code in ein pre-Tag.

<pre class="brush: php">
[code here]
</pre>

Brushes stehen für CSS (brush: css), JavaScript (brush: jscript), HTML und XML (brush: xml), PHP (brush: php), SQL (brush: sql) und viele weitere Sprachen zur Verfügung.

[code here] Encode HTML Entities !
HTML Entities müssen bei z.B. HTML Code umgewandelt werden, da bei der Eingabe von <i>text in italic</i> die Ausgabe text in italic sein wird. Daher müssen < in &lt; und > in &gt; umgewandelt werden. Ein nützliches Tool dafür ist z.B. Encode / Decode HTML Entities.