Was genau steht jetzt exakt an der Stelle, die das NULL erzeugt? Kannst du das bitte noch ergänzen?
Was genau steht jetzt exakt an der Stelle, die das NULL erzeugt? Kannst du das bitte noch ergänzen?
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Ich denke er meint was für einen PHP Code du jetzt verwendest hast für diese Ausgabe.
Notiz an mich selbst: Detaillierter formulieren
@Grossvater
Ich meinte damit natürlich im Template!
Programmers don't comment their code. It was hard to write, it should be hard to understand...
PHP-Code:
<?php var_dump(\Environment::get('agent')->mobile);?>
HTML-Code:<li class="sibling"><a href="datenschutzerklaerung" title="Datenschutzerklärung" class="sibling" rel="nofollow" role="menuitem">Datenschutzerklärung</a></li> <li class="sibling last"><a href="disclaimer" title="Disclaimer" class="sibling last" rel="nofollow" role="menuitem">Disclaimer</a></li> </ul> <a id="skipNavigation33" class="invisible"> </a> </nav> <!-- indexer::continue --> <div class="contained"> <div class="container"> <!-- indexer::stop --> NULL <-------------------------------------------------------- Hier <div class="row"> <div class="col-xs-12"> <div class="float_right"> <ul class="unstyled shortKeys"> <li class="phoneNumber"><a href="tel:+493475-61437100"><span class="icon-phone"></span> 03475 - 61437100</a></li> <li class="quicksupport"><a title="Fernsupport starten" href="http://www.pcvisit.de/fileadmin/software/pcvisit_Support_15_Kunden_Modul.exe">PC Visit herunterladen</a></li> </ul> </div> </div> </div>
Füge mal in der /system/modules/core/library/Contao/Environment.php in Zeile 501 einein.PHP-Code:
var_dump( $ua );
var_dump( \Config::get('os') );
Also wenn ich mir so die Enivormentklasse ansehe, kann dieser Wert garnicht NULL werden, da er Standardmäßig auf "false" gesetzt ist und nur im Falle eines Match auf true gesetzt wird. Ich vermute hier ja eine andere Erweiterung die hier die Finger im Spiel hat.
Programmers don't comment their code. It was hard to write, it should be hard to understand...
poste mal bitte den Inhalt der Datei /system/config/agents.php
Ach shit, das hatten wir ja bereits auf Seite 1
Programmers don't comment their code. It was hard to write, it should be hard to understand...
PHP-Code:
<?php
/**
* Contao Open Source CMS
*
* Copyright (c) 2005-2016 Leo Feyer
*
* @license LGPL-3.0+
*/
/**
* Operating systems (check Windows CE before Windows and Android before Linux!)
*/
$GLOBALS['TL_CONFIG']['os'] = array
(
'Macintosh' => array('os'=>'mac', 'mobile'=>false),
'Windows CE' => array('os'=>'win-ce', 'mobile'=>true),
'Windows Phone' => array('os'=>'win-ce', 'mobile'=>true),
'Windows' => array('os'=>'win', 'mobile'=>false),
'iPad' => array('os'=>'ios', 'mobile'=>false),
'iPhone' => array('os'=>'ios', 'mobile'=>true),
'iPod' => array('os'=>'ios', 'mobile'=>true),
'Android' => array('os'=>'android', 'mobile'=>true),
'BB10' => array('os'=>'blackberry', 'mobile'=>true),
'Blackberry' => array('os'=>'blackberry', 'mobile'=>true),
'Symbian' => array('os'=>'symbian', 'mobile'=>true),
'WebOS' => array('os'=>'webos', 'mobile'=>true),
'Linux' => array('os'=>'unix', 'mobile'=>false),
'FreeBSD' => array('os'=>'unix', 'mobile'=>false),
'OpenBSD' => array('os'=>'unix', 'mobile'=>false),
'NetBSD' => array('os'=>'unix', 'mobile'=>false),
);
/**
* Browsers (check OmniWeb and Silk before Safari and Opera Mini/Mobi before Opera!)
*/
$GLOBALS['TL_CONFIG']['browser'] = array
(
'MSIE' => array('browser'=>'ie', 'shorty'=>'ie', 'engine'=>'trident', 'version'=>'/^.*MSIE (\d+(\.\d+)*).*$/'),
'Trident' => array('browser'=>'ie', 'shorty'=>'ie', 'engine'=>'trident', 'version'=>'/^.*Trident\/\d+\.\d+; rv:(\d+(\.\d+)*).*$/'),
'Edge' => array('browser'=>'edge', 'shorty'=>'ed', 'engine'=>'edgehtml', 'version'=>'/^.*Edge\/(\d+(\.\d+)*).*$/'),
'Firefox' => array('browser'=>'firefox', 'shorty'=>'fx', 'engine'=>'gecko', 'version'=>'/^.*Firefox\/(\d+(\.\d+)*).*$/'),
'Chrome' => array('browser'=>'chrome', 'shorty'=>'ch', 'engine'=>'webkit', 'version'=>'/^.*Chrome\/(\d+(\.\d+)*).*$/'),
'OmniWeb' => array('browser'=>'omniweb', 'shorty'=>'ow', 'engine'=>'webkit', 'version'=>'/^.*Version\/(\d+(\.\d+)*).*$/'),
'Silk' => array('browser'=>'silk', 'shorty'=>'si', 'engine'=>'silk', 'version'=>'/^.*Silk\/(\d+(\.\d+)*).*$/'),
'Safari' => array('browser'=>'safari', 'shorty'=>'sf', 'engine'=>'webkit', 'version'=>'/^.*Version\/(\d+(\.\d+)*).*$/'),
'Opera Mini' => array('browser'=>'opera-mini', 'shorty'=>'oi', 'engine'=>'presto', 'version'=>'/^.*Opera Mini\/(\d+(\.\d+)*).*$/'),
'Opera Mobi' => array('browser'=>'opera-mobile', 'shorty'=>'om', 'engine'=>'presto', 'version'=>'/^.*Version\/(\d+(\.\d+)*).*$/'),
'Opera' => array('browser'=>'opera', 'shorty'=>'op', 'engine'=>'presto', 'version'=>'/^.*Version\/(\d+(\.\d+)*).*$/'),
'IEMobile' => array('browser'=>'ie-mobile', 'shorty'=>'im', 'engine'=>'trident', 'version'=>'/^.*IEMobile (\d+(\.\d+)*).*$/'),
'Camino' => array('browser'=>'camino', 'shorty'=>'ca', 'engine'=>'gecko', 'version'=>'/^.*Camino\/(\d+(\.\d+)*).*$/'),
'Konqueror' => array('browser'=>'konqueror', 'shorty'=>'ko', 'engine'=>'webkit', 'version'=>'/^.*Konqueror\/(\d+(\.\d+)*).*$/')
);
Hab dir ne PN geschickt. Muss ich mir direkt ansehen, hier rumzuprobieren hilft ja irgendwie nix
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Also ich hab jetzt mal über eine Stunde getestet.
Im Template fand ich folgenden Code vor:
War wohl bezogen auf Beitrag #47 von Spooky (aber leider falsche stelle)
Habe nun direkt in der Environment Klasse in der Methode agent var_dump($ua); var_dump(\Config::get('os'));die(); hinzugefügt:PHP-Code:
<?php
var_dump(\Environment::get('agent')->mobile);
var_dump( $ua );
var_dump( \Config::get('os') );
?>
Ergebnis: Alles da (keine NULL-Werte)
Lasse ich mir das fertige Objekt $return aus der Methode agent ausgeben mit var_dump($return);die(); erhalte ich:PHP-Code:
string(73) "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
array(16) {
["Macintosh"]=>
array(2) {
["os"]=>
string(3) "mac"
["mobile"]=>
bool(false)
}
["Windows CE"]=>
array(2) {
["os"]=>
string(6) "win-ce"
["mobile"]=>
bool(true)
}
["Windows Phone"]=>
array(2) {
["os"]=>
string(6) "win-ce"
["mobile"]=>
bool(true)
}
["Windows"]=>
array(2) {
["os"]=>
string(3) "win"
["mobile"]=>
bool(false)
}
["iPad"]=>
array(2) {
["os"]=>
string(3) "ios"
["mobile"]=>
bool(false)
}
["iPhone"]=>
array(2) {
["os"]=>
string(3) "ios"
["mobile"]=>
bool(true)
}
["iPod"]=>
array(2) {
["os"]=>
string(3) "ios"
["mobile"]=>
bool(true)
}
["Android"]=>
array(2) {
["os"]=>
string(7) "android"
["mobile"]=>
bool(true)
}
["BB10"]=>
array(2) {
["os"]=>
string(10) "blackberry"
["mobile"]=>
bool(true)
}
["Blackberry"]=>
array(2) {
["os"]=>
string(10) "blackberry"
["mobile"]=>
bool(true)
}
["Symbian"]=>
array(2) {
["os"]=>
string(7) "symbian"
["mobile"]=>
bool(true)
}
["WebOS"]=>
array(2) {
["os"]=>
string(5) "webos"
["mobile"]=>
bool(true)
}
["Linux"]=>
array(2) {
["os"]=>
string(4) "unix"
["mobile"]=>
bool(false)
}
["FreeBSD"]=>
array(2) {
["os"]=>
string(4) "unix"
["mobile"]=>
bool(false)
}
["OpenBSD"]=>
array(2) {
["os"]=>
string(4) "unix"
["mobile"]=>
bool(false)
}
["NetBSD"]=>
array(2) {
["os"]=>
string(4) "unix"
["mobile"]=>
bool(false)
}
}
Also funktioniert die Methode!!PHP-Code:
object(stdClass)#12 (9) {
["string"]=>
string(73) "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
["os"]=>
string(3) "win"
["class"]=>
string(22) "win firefox gecko fx47"
["browser"]=>
string(7) "firefox"
["shorty"]=>
string(2) "fx"
["version"]=>
string(2) "47"
["engine"]=>
string(5) "gecko"
["versions"]=>
array(2) {
[0]=>
string(2) "47"
[1]=>
string(1) "0"
}
["mobile"]=>
bool(false)
}
Lasse ich mir jedoch einfach nur per var_dump in der Methode agent das $return ausgeben (also ohne die(); am Ende) und rufe die Environementklasse im Template nocmal auf, erhalte ich einmal ein Array, welches korrekt ist und ein weiteres (aus dem Template) bei dem 'os' und 'mobile' NULL sind!
Habe zwischenzeitlich in der localconfig den coreOnlyMode auf true geschalten. Jeglicher Cache ist ebenfalls deaktiviert.
Dann testete ich mal mit debug_print_backtrace() und sah, dass alles ja einmal durch die InsertTags läuft. In den InsertTags gibt es ebenfalls den Aufruf des Environment::get('agent'); setz ich hier ein var_dump() mit die(); ist auch an dieser Stelle bereits alles auf NULL (os,mobile).
Die Serverkonfiguration sieht auch gut aus. Sehr komische Sache.....
Geändert von the_scrat (25.05.2016 um 19:52 Uhr)
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Ja, richtig. Das Template kommt per inserttag auf die Seite.
Eventuell ein Bug?
Wie exakt wird das Template per Insert Tag eingesetzt?
Über {{file::support5.html}} in Modul "Eigenes HTML-Element.
Die Datei befindet sich auch sauber im Templateverzeichnis
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Und das Modul ist direkt über das Seitenlayout eingefügt? (Und ich nehme an das Template heißt support.html5?)
Mit den bisher geposteten Informationen kann ich das jedenfalls noch nicht nachstellen.
Übrigens, @Grossvater, wenn du das Template in ce_support.html5 umbenennst musst du nicht den Umweg über den Insert Tag gehen, sondern kannst das Template direkt im HTML Modul bzw. HTML Inhaltselement auswählen.
Das Modul (HTML) ist über das Seitenlayout eingefügt. In diesem wird über {{file::}} das weitere Template geladen, welches dann php code enhält...... ob der Inhalt des Templates überhaupt zurückgegeben wird.
Ich habs gerade mal ausprobiert ob es einen Unterschied macht, das Modul (HTML) direkt als Modul im Artikel zu laden. Wert bleibt aber weiterhin auf NULL
Bzgl. der ce_* Sache geht das in dem Fall nicht, da das HTML Modul mehrere InsertTags hat und neben dem Laden der Module per InsertTags auch noch eine HTML Struktur bereitstellt.
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Und ohne Insert Tag? Also das Template so wie in meinem Post davor beschrieben eingebunden?
Außerdem, im Original Post hat Grossvater erwähnt, dass der Contao Check bspw. auch die Dateienbemängelt, das sollte behoben werden.Code:vendor/autoload.php vendor/composer/autoload_real.php
Also es gibt das Modul HTML (Navibereich)
In der support.html5 steht aktuell das hier:Code:<div class="contained-small"> <div class="container"> {{file::support.html5}} <div class="line clearfix blue" id="header-row"> <div id="logo-banner"> <a href="{{env::url}}"> <div><img alt="XXXXX" id="logo" src="files/assets/img/XXXXX"/></div> </a> </div> <div id="header-menu"> <div class="right-top"> {{file::megamenu.html5}} {{insert_module::4}} </div> </div> <a id="XXX" href="#mmenu" class="open"></a> </div> </div> </div>
Modul HTML ist über das Seitenlayout eingebunden, läd dann die support5.html die wiederrum versucht ganz normal die Environment Klasse zu laden. PHP Code ist übersichtlich und m.M. nicht falsch.PHP-Code:
<!-- indexer::stop -->
<?php
var_dump(\Environment::get('agent')->mobile);
?>
<?php if(!\Environment::get('agent')->mobile):?>
<div class="row">
<div class="col-xs-12">
<div class="float_right">
<ul class="unstyled shortKeys">
<li class="phoneNumber">XXX</li>
<li class="quicksupport">XXX</li>
</ul>
</div>
</div>
</div>
<?php endif;?>
<!-- indexer::continue -->
Eben interessant, dass wenn ich in dieser Konstellation direkt in der Environment Klasse in der Methode agent() die Werte prüfe (per var_dump()) ist alles da. Führe ich die gleiche Anfrage übers Template aus, sind NUR die Werte für os und mobile weg, alles andere weiterhin vorhanden.
PS: Ich hab einige Teile mal zensiert, auch wenn die Seite bekannt ist, trotzdem find ich es doof, wenn hier die Telefonnummern etc. stehen.... denn zum Schluss findet ein Kunde das Forum hier anstatt die Seite.
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Und wenn duin ein ce_whatever.html5 Template gibst und dieses Template dann im HTML Modul auswählst (und den HTML code im Modul direkt natürlich entfernst), wie ist es dann?HTML-Code:<div class="contained-small"> <div class="container"> {{file::support.html5}} <div class="line clearfix blue" id="header-row"> <div id="logo-banner"> <a href="{{env::url}}"> <div><img alt="XXXXX" id="logo" src="files/assets/img/XXXXX"/></div> </a> </div> <div id="header-menu"> <div class="right-top"> {{file::megamenu.html5}} {{insert_module::4}} </div> </div> <a id="XXX" href="#mmenu" class="open"></a> </div> </div> </div>
Wieviele Templates befinden sich im Ordner /templates und was ist deren Inhalt?
@Spooky Contao Check sagt, dass die Installation sauber. ist.
Achso ja, dann halt mod_foo.html5 . Aber macht wahrscheinlich keinen unterschied. Was ist eigentlich das Ergebnis vondirekt in der index.php?PHP-Code:
var_dump( \Environment::get('agent') );
$controller = new FrontendIndex;
$controller->run();
var_dump( \Environment::get('agent') );
Das var_dump() nach dem run() kommt nicht an, weil die Seite dann bereits an den Browser geschickt wurde oder zumindest irgendwo ein exit enthält ;-)
Der erste Aufruf ist jedoch bereits erfolgreich und enthält alle Daten.
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Ergebnis vor dem exit
Also irgendwo geht dazwischen etwas verloren. Die Erweiterungen sind es nicht, da bereits mit coreOnly getestetPHP-Code:
object(stdClass)#12 (9) {
["string"]=>
string(73) "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
["os"]=>
NULL
["class"]=>
string(22) "win firefox gecko fx47"
["browser"]=>
string(7) "firefox"
["shorty"]=>
string(2) "fx"
["version"]=>
string(2) "47"
["engine"]=>
string(5) "gecko"
["versions"]=>
array(2) {
[0]=>
string(2) "47"
[1]=>
string(1) "0"
}
["mobile"]=>
NULL
}
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Na dann mal die gesamte Contao Installation nachdurchsuchen. Sollte nur ein Vorkommnis geben (system/config/agents.php).PHP-Code:
$GLOBALS['TL_CONFIG']['os']
ich habe das verzeichnis durchscannen lassen.
Diese Variable gibt es nur ein einzigstes mal. Nämlich in der agents.php
Tja, dann muss man noch mehr var_dumps im kompletten Seitenaufbau Prozess von Contao einbauen, um das Problem weiter eingrenzen zu können.
Such mal bitte nach Environment::set( oder Environment->set(
Da das OS in der Klasse noch vorhanden ist, kommt der Fehler nicht aus einer kaputten Globals Variable. Irgend etwas verändert das gecachte Array.
Gesendet von meinem D5803 mit Tapatalk
<?php var_dump(\Environment::set('agent')->mobile)?>
ergibt:
<?php var_dump(\Environment->set('agent')->mobile)?>Code:Warning: Missing argument 2 for Contao\Environment::set(), called in C:\xampp\htdocs\tps\templates\support.html5 on line 1 and defined in C:\xampp\htdocs\tps\system\modules\core\library\Contao\Environment.php on line 78 #0 C:\xampp\htdocs\tps\system\modules\core\library\Contao\Environment.php(78): __error(2, 'Missing argumen...', 'C:\\xampp\\htdocs...', 78, Array) #1 C:\xampp\htdocs\tps\templates\support.html5(1): Contao\Environment::set('agent') #2 C:\xampp\htdocs\tps\system\modules\core\library\Contao\InsertTags.php(1113): include('C:\\xampp\\htdocs...') #3 C:\xampp\htdocs\tps\system\modules\core\library\Contao\Controller.php(686): Contao\InsertTags->replace('...', false) #4 C:\xampp\htdocs\tps\system\modules\core\classes\FrontendTemplate.php(100): Contao\Controller::replaceInsertTags('...', false) #5 C:\xampp\htdocs\tps\system\modules\core\pages\PageRegular.php(190): Contao\FrontendTemplate->output(true) #6 C:\xampp\htdocs\tps\system\modules\core\controllers\FrontendIndex.php(267): Contao\PageRegular->generate(Object(Contao\PageModel), true) #7 C:\xampp\htdocs\tps\index.php(20): Contao\FrontendIndex->run() #8 {main} NULL
ergibt:
Code:Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in C:\xampp\htdocs\tps\templates\support.html5 on line 1
Wenn dann muss esoderPHP-Code:
\Environment::set('agent', …);
sein. Wie Thraile schon gesagt hat sollst du deine gesamte Contao Installation mal nachPHP-Code:
$this->Environment->set('agent', …);
undCode:Environment::set(durchsuchen. Und wenn das kein Resultat liefert, muss man weiter einzeln debuggen.Code:Environment->set(
Geändert von Spooky (08.06.2016 um 11:17 Uhr)
Thraile schrieb jedoch "Such mal... "
Meinte, durchsuch mal das gesamte Projekt nach "Environment::set(" oder "Environment->set("
Denn irgendwo wird anscheinend ein falscher Wert gesetzt!
Programmers don't comment their code. It was hard to write, it should be hard to understand...
<?php var_dump(\Environment::set('agent',mobile))?>
ergibt:
<?php var_dump(\Environment->set('agent',mobile))?>Code:NULL
ergibt:
Nachdem ich das Projekt nach Environment::set( durchgescannt hab, ergab es folgende Treffer:Code:Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in C:\xampp\htdocs\tps\templates\support.html5 on line 1
err.jpg
err1.jpg
err2.jpg
err3.jpg
Environment->set( dagegen ergibt keine Treffer.
Geändert von Grossvater (08.06.2016 um 12:21 Uhr)
Update:
Nachdem ich Contao von 3.5.9 auf 3.5.14 geupdatet habe, funktioniert $this->Environment->agent->mobile ohne Probleme.
Es wird also korrekt true oder false zurückgegeben.
Seltsam, oder?
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)