Shopware Knowledgebase

Dieser Artikel ist noch nicht für Shopware 3.5 geprüft bzw. freigegeben.
Shopware Labs

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 Kommentare

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

Exceptions werden analog zu PHP-Fehlern inklusive Funktions-Stack dargestellt.

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

Waren diese Informationen hilfreich? Ja Nein


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


Die mit einem * markierten Felder sind Pflichtfelder.

Weitere interessante Artikel:

Bezeichnung:
Rating:
Klicks:
Datum:

Bestell-Nr.: SW1329_1693

Lieferzeit ca. 5 Tage

€ 1,00

Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*

€ 1,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*

Kategorien: