Hallo,
ich habe Probleme mit meiner userFunc.
Ich möchte gerne Mobile-Geräte auf eine seperate PID umleiten.
Dazu habe ich in die localconf.php folgende Funktion eingebaut:
function user_checkMobile() {
if(preg_match('/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge|
maemo|midp|mmp|mobile safari|opera mini|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up
\.(browser|link)|vodafone|wap|linux|windows(ce|phone)|xda|xiino/i',$_SERVER['HTTP_USER_AGENT']) ||
preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|awa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|
ar(ch|go)|as(te|us)|attw|au(di|\-m|r|s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm
\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|
\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1u|g560|gene|gf
\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-|
|_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|
\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt
|kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m
\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-||o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|
5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|
\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i
\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh
\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18-)|ta(gt|lk)|tcl
\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|
\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98-)|w3c(\-|)|webc|whit|wi(g|nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas
\-|your|zeto|zte\-/i',substr($_SERVER['HTTP_USER_AGENT'],0,4)))
{
header('Location: http://www.meinedomain.de/mobile.html');
}
}
Im Root-Setup steht:
[userFunc = user_checkMobile]
# tu nichts!
[end]
Der Filter funktioniert super. Nur leitet das System im LOOP auf die Seite mit der PID 30 (mobile.html). Aber auf der PID 30 liegt ein weiteres ROOT-Template, wo im Setup NICHTS von der userFunc auftaucht. daher verstehe ich das nicht, warum das so ist. Ich kann keinen Fehler finden.
Bin am verzweifeln. :o
Hallo,
es sieht so aus, als ob das Template von ROOT vererbt wird.
Versuch mal bitte in den Seiteneigenschaften von der Seite PID 30,
unter Options > Clear: Constants und Setup beide Haken zu setzen.
VG,
LuP
Hi,
also clear constants, clear setup & wurzelebene ist aktiviert.
Das ist auch der Grund, warum ich nicht weiter weiss. 8-)
LG Daniel
Boah,
die RegExp ist ja dicke, und die funktionoert (oO) ??
Egal,
schau doch mal unter Templates im ObjectBrowser
der Unterseite das Setup durch, ob hier vielleicht doch etwas
geerbt wird
Versuch mal
[userFunc = user_checkMobile()]
also mit Klammern am Ende.
Danke für den Tip.
Habe jetzt aber einfach meine Lösung weggeschmissen und mir die
Extension cwmobileredirect installiert und Ihr werdet es nicht
glauben, aber auch hier entsteht ein Loop.#angry#
Also muss der Fehler woanders liegen. Ich finde den aber nicht.
Bitte um Hilfe.:o
Ach wie dumm von mir, habe die Frage zu schnell überflogen und falsch verstanden.
Hast Du im TS-Setup der Seite mobile.html auch simulatestatic aktiviert?
Nein, ich benutze realURL, daher habe ich folgende Konfig:
config.simulateStaticDocuments = 0
Naja gut, dann halt RealURL. Hast Du auf der Seite mobile.html realurl aktiviert? Hast Du schonmal die Weiterleitungs-Extension und -Script weggelassen und geschaut, ob die URL dann korrekt aufgerufen werden kann? Nicht dass die Seite aufgrund falscher URL-Konfiguration nicht gefunden wird und dann deshalb immer wieder auf eine Fehlerseite umgeleitet wird (oder je nach Standardkonfiguration die Startseite) und diese wieder versucht auf die mobile.html weiterzuleiten usw.
Hmm...nein, ohne der Extension klappen die URLs und auch die
Navigation in den beiden Bereichen, wie es soll.
Ja, dann muss ich den anderen Recht geben, irgendwie muss das TSSetup doch auf die Seite vererbt werden, so dass auch die Seite mobile.html auf mobile.html weiterleitet.
Oder hast Du vielleicht zwei Seiten, die den Seitentitel mobile tragen und er leitet an die falsche weiter?
Bist Du Chrisslis Rat schonmal gefolgt? Was sagt denn der ObjectBrowser?
Chrissli schrieb
Egal,
schau doch mal unter Templates im ObjectBrowser
der Unterseite das Setup durch, ob hier vielleicht doch etwas
geerbt wird
Alternativ kannst Du ja auch statt einer User-Condition ein USER_INT verwenden, was den Vorteil hat, dass Du, um auf Nummer sicher zu gehen, das USER_INT im TSSetup der mobile-Seite mit dem > Operator wieder löschen kannst.
igorshmigor schrieb
Ja, dann muss ich den anderen Recht geben, irgendwie muss das TSSetup doch auf die Seite vererbt werden, so dass auch die Seite mobile.html auf mobile.html weiterleitet.
Nein, das stimmt nicht, wenn Du die */mobile.html aufrufst, bleibst Du auch auf der und wirst nicht weitergeleitet.
igorshmigor schrieb
Oder hast Du vielleicht zwei Seiten, die den Seitentitel mobile tragen und er leitet an die falsche weiter?
Nein, habe ich geprüft.
igorshmigor schrieb
Alternativ kannst Du ja auch statt einer User-Condition ein USER_INT verwenden, was den Vorteil hat, dass Du, um auf Nummer sicher zu gehen, das USER_INT im TSSetup der mobile-Seite mit dem > Operator wieder löschen kannst.
Habe doch meine eigene userFunc schon lange entfernt und mir, wie weiter oben beschrieben, die EXT cwmobileredirect installiert, die das selbe machen soll. Aber auch da ist ein Loop. Trotz der erfolglosen Prüfungen. #angry#
Ich habe mir einmal den Inhalt der /typo3conf/mobile_device_detect.php angesehen,
die diese Extension abgelegt hat. Die verweist per PHP-Header-Location eben genau
auf die Seiten-ID (30):
<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge|maemo|midp|mmp|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows(ce|phone)|xda|xiino/i',$ua)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|awa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r|s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-||o|v)|zz)|mt(50|p1|v
)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18-)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98-)|w3c(\-|)|webc|whit|wi(g|nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($ua,0,4)))
{
header('Location: http://www.meineDomain.de/?id=30');
t3lib_div::_GP('isMobile') = true;
}
else
{
t3lib_div::_GP('isMobile') = false;
}
?>
Verwendest Du die aktuelle Version der Extension? Ich kann im Quellcode der aktuellen Extension cwmobileredirect nichts erkennen, was eine solche Datei erstellen würde.
Ja, DU hast recht. Habe die Datei entfernt und die Funktionalität ist noch vorhanden. :o
Blöde Frage:
Tritt die Loop immer auf oder nur wenn die auf mobile.html weitergeleitet wird d.h. deine
userFunc greift?
Wenn dass der Fall ist, könnte das Problem evtl. an einer Rewrite-Regel liegen, die im Zusammenhang
mit realurl in der HTACCESS steht.
Hi Chrissli,
TheFreeman schrieb
Habe doch meine eigene userFunc schon lange entfernt und mir, wie weiter oben beschrieben, die EXT cwmobileredirect installiert, die das selbe machen soll. Aber auch da ist ein Loop. Trotz der erfolglosen Prüfungen. #angry#
...und ja, der Loop tritt immer nur bei der Weiterleitung auf die mobile.html auf.
Ich hab' das mal ausprobiert,
wenn ich mittels Plugin den Browser als iPhone ausgebe, tritt die Loop bei mir auch auf.
Ich habe den Browser testweise so eingestellt, das eine Warnung ausgegeben wird, wenn eine
Webseite versucht mich umzuleiten. Das funktioniert z.B. bei Javascript und PHP wenn mittels "Location"
die URL gewechselt werden soll. In diesem Fall würde der Browser erst nach Bestätigung der Weiterleitung folgen.
In diesem Fall kommt aber kein Hinweis, was im Normalfall bedeutet, das die Webseite schon weiterleitet, bevor
die Browser Seiteninhalte lädt.
Ich vermute daher, dass du eine fehlerhafte Angabe in deiner .htaccess-Datei hast.
Soweit ich das nämlich sehen kann, werden mobile Geräte auf "mobile.html/" weitergeleitet. Wenn ich das
im Browser normal aufrufe werde ich auch wieder auf die Home-Seite verwiesen. Ich behaupte mal, dass du nur
den "/" am Ende entfernen müsstest, damit es wieder funktioniert. Zumindest sehe ich die mobile.html wenn ich die mobile.html
ohne Slash am Ende auf meinem iPod aufrufe, während ich in die Schleife falle, wenn der Slash am Ende steht.
Danke für den Test. :-)
Also bei mir (Android) ist das egal, ob ich den Slash angebe, oder nicht.
Wenn ich die mobile.html direkt aufrufe, dann wird diese auch angezeigt.
Klicke ich da aber auf einen Menüpunkt, dann bin ich wieder im Loop unterwegs.#angry#
Die .htaccess beinhaltet nichts besonderes. Nur die Standard-Einträge für realURL:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]
RewriteRule ^(typo3|t3lib|tslib|fileadmin|typo3conf|typo3temp|uploads|showpic\.php|favicon\.ico)/ - [L]
RewriteRule ^typo3$ typo3/index_re.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]
Anscheinend wird vor der Ausgabe der Inhalte schon umgeleitet.
Da stimme ich Dir zu. Das macht auch Sinn, um die Ladezeit zu verkürzen.
Doch eigentlich darf er ja nicht mehr zurückleiten. Macht er aber.#paralyzed#