Der Bereich Shopware Labs ist die Plattform für alle Entwickler. Hier findet man technische Dokumentationen und zahlreiche Tipps und Tricks rund um das Thema Programmieren. In dieser Rubrik stellen außerdem die Entwickler der shopware AG neue und experimentelle Lösungsansätze vor. Neue Funktionen, die in dieser Rubrik bereitgestellt werden, sind teilweise auch für zukünftige Releases geplant. Die Funktionen können dann ohne Programmierkenntnisse zukünftig direkt im Shopware Backend konfiguriert werden oder werden über Plugins bereitgestellt. Informationen über neue, geplante Funktionen finden Sie in unserer Roadmap.
Bitte beachten Sie, dass die hier bereitgestellten Lösungsansätze nicht offiziell supportet werden und nur eingebaut werden sollten, sofern Sie über das entsprechende, technische Wissen verfügen.
Debuggen mit FirePHP in Shopware 3.0.5
3 KommentareInhaltsverzeichnis
- 1 Debuggen mit Shopware 3.0.5
- 1.1 Screenshot Firebug
- 1.2 Benchmarking
- 1.3 Screenshot PHP - Errorhandler
- 1.4 Screenshot Exeptions
- 1.5 SQL - Profiling
- 1.6 Smarty - Templates
- 1.7 Smarty - Variablen
- 1.8 Eigene Ausgaben / Dumps
- 1.8.1 Beispiel-Code
- 1.8.2 Beispiel-Ausgabe
- 2 Verwenden der alten Smarty {debug} Funktion
Debuggen mit Shopware 3.0.5
Wer kennt das Problem? In einem der vielen Projekte, die man als Entwickler betreut, hat sich ein Fehler eingeschlichen. Diesen zu finden, artet oftmals in Sisyphusarbeit aus. Vorausgesetzt es handelt sich um ein Live-Projekt, würde man wahrscheinlich wie folgt vorgehen:
1.) Synchronisieren der aktuellen Live-Umgebung mit einem Entwicklungssystem
2.) Versuchen den Fehler zu reproduzieren
3.) Viewport / Part der Anwendung identifizieren
4.) Verantwortliche Funktion / Methode identifizieren
5.) Konkreten Fehler-Ursprung suchen / finden ;)
6.) Bugfix erstellen
7.) Qualitätsprüfung
8.) Synchronisieren mit Live-System
Nicht wenige Entwickler operieren auch regelmäßig am offenen Herzen, sprich der Fehler wird direkt im Live-Projekt behoben. Blöd ist natürlich nur, wenn potentielle Kunden durch eventuelle Debug-Ausgaben irritiert werden oder der Shop plötzlich gar nicht mehr läuft ;)
Mit Shopware 3.0.5 bieten wir hier einen deutlich einfacheren Weg, um den Käfern schnell und einfach auf die Schliche zu kommen.
Alles, was Sie benötigen, ist die Firefox-Extension Firebug und die PHP-Erweiterung FirePHP.
Hierdurch ist es möglich auf Exceptions, PHP-Fehlermeldungen und andere Debug-Informationen zurückzugreifen, ohne das ein Dritter hiervon etwas mitbekommt. Alle Meldungen werden automatisch in die Firebug Konsole geschrieben.
Die Ausgabe lässt sich auf bestimmte IPs beschränken.
Um das Debugging zu aktivieren, muss folgende Konstante in der config.php definiert werden:
error_reporting(E_ERROR); define( '_DEBUG', "FirePHP" );
Danach erhalten Sie nach jedem Seiten-Upload folgende Ausgabe in Firebug:
Screenshot Firebug
Benchmarking
Sie können an beliebigen Stellen im Code die Ausführungsgeschwindigkeit messen:
Um einen Mess-Punkt zu implementieren, ist folgende Syntax notwendig:
$this->sSYSTEM->sNextBenchmark("Mein Mess-Punkt");
In der Konsole wird dann die Differenz zwischen dem letzten und dem aktuellen Mess-Punkt in Millisekunden ausgegeben!
Screenshot PHP - Errorhandler
Alle während der Laufzeit auftretenden PHP-Fehler werden ebenfalls in der Konsole protokolliert. Der gesamte Aufrufstack bis zum Auftreten des Fehlers wird hierbei protokolliert. Natürlich wird auch die genaue Zeile, in der der Fehler auftritt, reported.
Screenshot Exeptions
SQL - Profiling
Alle ausgeführten SQL-Abfragen werden protokolliert und sortiert nach Ausführungsgeschwindigkeit in der Konsole ausgegeben.
Smarty - Templates
In der Sektion "Templates" erfährt man auf einem Blick, welche Templates Smarty auf der aktuell dargestellten Seite verwendet.
Smarty - Variablen
Natürlich werden auch alle im aktuellen Viewport zur Verfügung gestellten Smarty-Variablen übersicht dargestellt.
Eigene Ausgaben / Dumps
Mit der nachfolgenden Syntax können direkt aus dem Code heraus beliebige Informationen / Variablen in die Konsole exportiert werden:
Equivalent zu "var_dump":
$this->sSYSTEM->_d->dump('Name',$variable);
Ausgabe Callstack:
$this->sSYSTEM->_d->trace("Trace Label");
Ausgabe "einfacher" Meldungen:
$this->sSYSTEM->_d->log("Text");
Beispiel-Code
Beispiel-Ausgabe
Verwenden der alten Smarty {debug} Funktion
Die alte Smarty-Debug Funktion ist in Shopware 3.0.5 nicht mehr verfügbar. Die Funktion wird aber im nächsten Update wieder standardmäßig integriert.
Durch das Austauschen der folgenden Funktion (Einfügen in inherit/myCore.php), kann die Debug-Funktion vorab wieder aktiviert werden.
function postfilter($tplsource, &$smarty) { if (strpos($tplsource, '</html>')===false) { return $tplsource; } $this->sLoadConfig(); if (!empty($this->sSYSTEM->sCONFIG["sUSEDEFAULTTEMPLATES"]) && !empty($this->sSYSTEM->sSubShop["inheritstyles"]) && $this->sSYSTEM->sLanguageData[$this->sSYSTEM->sLanguage]['isocode']!='de') { $tplsource = preg_replace_callback("/\<link .*\>/U",array($this,'sDuplicateStyle'),$tplsource); } // Rewrite path for <link href - CSS-Styles $tplsource = preg_replace_callback('#<(link|img|script|input|a|form|iframe)[^<>]*(href|src|action)="([^"]*)".*>#U', array($this,'sRewriteSrc'), $tplsource); $tplsource = preg_replace_callback('#<([a-z]+?)[^<>]*(style)="([^"]*)".*>#U', array($this,'sRewriteStyle'), $tplsource); // User defined, runtime rewriterules $sql = 'SELECT search, `replace` FROM s_core_rewrite ORDER BY id ASC'; $replaceRules = $this->sSYSTEM->sDB_CONNECTION->CacheGetAssoc(86400,$sql); if(!empty($replaceRules)) { $tplsource = preg_replace(array_keys($replaceRules),array_values($replaceRules),$tplsource); } // If cookies disabled, add sessionid to all form-handlers if ($this->sSYSTEM->sSESSION_ID && empty($this->sSYSTEM->_COOKIE)) { $tplsource = preg_replace("/\<form ([^>]+)\>/U","<form \\1><input type=\"hidden\" name=\"sCoreId\" value=\"".$this->sSYSTEM->sSESSION_ID."\" />",$tplsource); } // Fuzzy search patch if(!empty($this->sSYSTEM->sCONFIG['sUSEROUTER'])&&$this->sSYSTEM->_GET['sViewport']=='searchFuzzy') { $replace = ''; foreach ($this->sSYSTEM->_GET as $key => $value) { if(in_array($key, array('sSort', 'sCategory', 'sViewport'))) continue; $replace .= '<input type="hidden" name="'.htmlspecialchars($key).'" value="'.htmlspecialchars($value).'">'; } $tplsource = preg_replace('#(<form name="frmsort" [^>]+>)#U','\\1'.$replace, $tplsource); } // Remove comments if(!empty($this->sSYSTEM->sCONFIG['sSEOREMOVECOMMENTS'])&&empty($smarty->_tpl_vars['debug_output'])) { $tplsource = preg_replace('#(<script[^>]*?>.*?</script>)|(<style[^>]*?>.*?</style>)|<!--[^\[].*?-->#msi' ,'$1$2', $tplsource); } // Trim whitespace if(!empty($this->sSYSTEM->sCONFIG['sSEOREMOVEWHITESPACES'])&&empty($smarty->_tpl_vars['debug_output'])) { require_once(SMARTY_DIR.'plugins/outputfilter.trimwhitespace.php'); $tplsource = smarty_outputfilter_trimwhitespace($tplsource, &$smarty); } return $tplsource; }
Artikel-PDF erstellen
Artikel bewerten
Kommentare:
Ergänzung - 23. August 2011 - 13:21 Uhr
Von: Tim Stollberg
Ich fände es sinnvoll, wenn hier (am besten am Anfang der Seite) ergänzend stehend würde, dass man in Version 3.5.4 die DEBUG-Einstellung über den Plugin-Manager aktiviert. Ich hab mir eben einen Wolf gesucht....
VG Tim Stollberg
Smarty Debug - 1. April 2010 - 16:55 Uhr
Von: shopware AG
Hallo Herr Thrum,
diesbzgl. haben wir den Wiki-Artikel so eben ergänzt.
Viele Grüße,
Ihr Shopware Team
Smarty {debug} Funktion ? - 31. März 2010 - 23:10 Uhr
Von: M. Thrum
Ist es möglich das durch den Einbau dieser neuen Debug Funktionen über die Konsole die herkömmliche Smarty debug Ausgabe verhindert wird? Ich würde diese sehr gerne weiterhin nutzen, ist dies möglich? Wenn ja, wie? Ich wußte nicht wo ich diese Frage sonst hinschreiben sollte.
Vielen Dank
Artikel kommentieren
Weitere interessante Artikel:
Bestell-Nr.: SW1329_1693
Lieferzeit ca. 5 Tage
Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*
Preise inkl. gesetzlicher
MwSt. + Versandkosten*
Kategorien:








