<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ebene7 &#187; Snippets</title>
	<atom:link href="http://blog.ebene7.com/kategorie/snippets/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ebene7.com</link>
	<description></description>
	<lastBuildDate>Tue, 04 Jun 2013 18:57:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL: Doppelte Datensätze löschen</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/</link>
		<comments>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 05:00:20 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Duplikat]]></category>
		<category><![CDATA[Löschen]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[Selbstreferenz]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552</guid>
		<description><![CDATA[Hin und wieder kann es vorkommen, dass sich Datensätze ungewollt doppelt in der Datenbank wiederfinden. Hier ein kleiner Spickzettel, wie sich die Doubletten wieder entfernen lassen. Die Struktur der Testtabelle sieht folgendermaßen aus: CREATE TABLE `sqltest`.`duplicates` ( `id` INT(11) UNSIGNED &#8230; <a href="https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hin und wieder kann es vorkommen, dass sich Datensätze ungewollt doppelt in der Datenbank wiederfinden.</p>
<p>Hier ein kleiner Spickzettel, wie sich die Doubletten wieder entfernen lassen.</p>
<p><span id="more-2552"></span>Die Struktur der Testtabelle sieht folgendermaßen aus:</p>
<pre><code>CREATE TABLE `sqltest`.`duplicates` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `a` VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `b` INT(11) NOT NULL ,
  `c` DATETIME NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;</code></pre>
<p>Noch ein paar Daten rein und fertig ist die Spielwiese.</p>
<pre>mysql&gt; select * from duplicates;
+----+--------+-----+---------------------+
| id | a      | b   | c                   |
+----+--------+-----+---------------------+
|  1 | Apfel  | 123 | 2011-01-11 17:00:00 |
|  2 | Apfel  | 123 | 2011-01-11 17:00:00 |
|  3 | Banane | 234 | 2011-01-12 17:00:00 |
|  4 | Banane | 234 | 2011-01-12 17:00:00 |
|  5 | Birne  | 456 | 2011-01-15 17:00:00 |
|  6 | Birne  | 456 | 2011-01-15 17:00:00 |
+----+--------+-----+---------------------+
6 rows in set (0.00 sec)</pre>
<p>Die erste Abfrage macht einen JOIN auf sich selbst, dafür die Aliasse d1 und d2 und dient zunächst der Prüfung, ob wir die gewünschten Datensätze geliefert bekommen.</p>
<pre>SELECT d1.* FROM duplicates d1, duplicates d2
 WHERE d1.id != d2.id
   AND d1.a = d2.a
   AND d1.b = d2.b
   AND d1.c = d2.c
   AND d1.id &lt; d2.id</pre>
<p>Das Ergebnis:</p>
<pre>+----+--------+-----+---------------------+
| id | a      | b   | c                   |
+----+--------+-----+---------------------+
|  1 | Apfel  | 123 | 2011-01-11 17:00:00 |
|  3 | Banane | 234 | 2011-01-12 17:00:00 |
|  5 | Birne  | 456 | 2011-01-15 17:00:00 |
+----+--------+-----+---------------------+
3 rows in set (0.00 sec)</pre>
<p>MySQL kann offensichtlich keine Daten löschen, wenn die Löschaktion auf derselben Tabelle wie die Subquery gemacht wird. Darum schreiben wir die Ids in eine temporäre Tabelle.</p>
<pre>CREATE TABLE duplicates_ids AS (
  SELECT d2.id FROM duplicates d1, duplicates d2
   WHERE d1.id != d2.id
     AND d1.a = d2.a
     AND d1.b = d2.b
     AND d1.c = d2.c
     AND d1.id &lt; d2.id
)</pre>
<p>Im letzten Schritt löschen wir die zuvor ausgewählten Datensätze und auch die temporäre Tabelle. Je nachdem was wir behalten wollen, noch ggf. ein &#8220;NOT&#8221; vor das &#8220;IN&#8221; schreiben.</p>
<pre>DELETE FROM duplicates WHERE id [NOT] IN (SELECT * FROM duplicates_ids);
DROP TABLE duplicates_ids;</pre>
<p>Achtung! Ich hafte nicht bei Datenverlust oder sonstigen Fehlern. Ein Backup sollte sicherheitshalber vorher gemacht werden.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Aufzählungen mit GROUP_CONCAT()</title>
		<link>https://blog.ebene7.com/2010/11/02/aufzaehlungen-mit-group-concat/</link>
		<comments>https://blog.ebene7.com/2010/11/02/aufzaehlungen-mit-group-concat/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 05:00:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Formatierung]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=2159</guid>
		<description><![CDATA[Für verschiedene Anwendungsfälle ist es übersichtlicher, wenn 1:n Beziehungen als Aufzählung angezeigt werden. Für dieses Beispiel verwende ich eine kleine, übersichtliche Tabelle mit Emailadressen und deren Aliase. CREATE TABLE `mails` ( `id` int(11) NOT NULL auto_increment, `parent_id` int(11) NOT NULL, &#8230; <a href="https://blog.ebene7.com/2010/11/02/aufzaehlungen-mit-group-concat/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Für verschiedene Anwendungsfälle ist es übersichtlicher, wenn 1:n Beziehungen als Aufzählung angezeigt werden. Für dieses Beispiel verwende ich eine kleine, übersichtliche Tabelle mit Emailadressen und deren Aliase.<span id="more-2159"></span></p>
<pre>CREATE TABLE `mails` (
  `id` int(11) NOT NULL auto_increment,
  `parent_id` int(11) NOT NULL,
  `addy` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8</pre>
<p>Jede Emailadresse hat eine Id und eine ParentId. Sind beide Ids identisch, dann ist es die Originaladresse, ansonsten ein Alias.</p>
<pre>mysql&gt; select * from mails;
+----+-----------+------------------+
| id | parent_id | addy             |
+----+-----------+------------------+
|  1 |         1 | m1@example.com   |
|  2 |         1 | a1m1@example.com |
|  3 |         3 | m2@example.com   |
|  4 |         1 | a2m1@example.com |
|  5 |         3 | a1m2@example.com |
+----+-----------+------------------+
5 rows in set (0.00 sec)
</pre>
<p>Mit einem selbstreferenzierenden Join werden die Daten nun wieder aus der Tabelle ausgelesen. Dabei wird die Tabelle &#8216;mails&#8217; durch Aliasnamen wie zwei Tabellen behandelt. Wir selektieren die &#8216;addy&#8217; aus der Tabelle &#8216;m1&#8242; und die gejointen Aliase aus &#8216;m2&#8242;. Durch <a href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat" target="_blank">GROUP_CONCAT()</a> werden die Werte nun kommasepariert in der Spalte &#8216;aliases&#8217; ausgegeben.</p>
<pre>mysql&gt; SELECT m1.addy, GROUP_CONCAT(m2.addy SEPARATOR ', ') AS aliases
 -&gt;   FROM mails m1
 -&gt;   JOIN mails m2 ON m2.parent_id = m1.id
 -&gt;  WHERE m2.id &lt;&gt; m2.parent_id
 -&gt;  GROUP BY m1.id;
+----------------+--------------------------------------+
| addy           | aliases                              |
+----------------+--------------------------------------+
| m1@example.com | a1m1@example.com, a2m1@example.com   |
| m2@example.com | a1m2@example.com                     |
+----------------+--------------------------------------+
2 rows in set (0.00 sec)
</pre>
<p>Das funktioniert natürlich auch mit den Ids der Alias-Adressen. In diesem Fall muss dann aber der Rückgabewert von GROUP_CONCAT() gecastet werden, da sonst entweder nur die erste Id oder [BLOB] in der Ausgabe stehen würde.</p>
<pre>mysql&gt; SELECT m1.addy,
 -&gt;           CAST(GROUP_CONCAT(m2.id SEPARATOR ', ') AS char) AS alias_ids
 -&gt;   FROM mails m1
 -&gt;   JOIN mails m2 ON m2.parent_id = m1.id
 -&gt;  WHERE m2.id &lt;&gt; m2.parent_id
 -&gt;  GROUP BY m1.id;
+----------------+-----------+
| addy           | alias_ids |
+----------------+-----------+
| m1@example.com | 2, 4      |
| m2@example.com | 5         |
+----------------+-----------+
2 rows in set (0.00 sec)
</pre>
<p>Die Funktion kann nicht nur gruppieren und mit beliebigen Trennzeichen aufzählen, es ist auch möglich, eine Sortierrichtung mit anzugeben. Mehr dazu im MySQL-Manual.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/11/02/aufzaehlungen-mit-group-concat/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Attachment in CouchDB speichern</title>
		<link>https://blog.ebene7.com/2010/10/07/attachment-in-couchdb-speichern/</link>
		<comments>https://blog.ebene7.com/2010/10/07/attachment-in-couchdb-speichern/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 05:00:21 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Attachment]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Zend_Http_Client]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1532</guid>
		<description><![CDATA[Letzte Woche habe ich ja schon etwas über CouchDB berichtet und wie unkompliziert man damit arbeiten kann. In den Dokumenten können aber nicht nur beliebige Daten in beliebiger Struktur gespeichert werden, es ist auch sehr einfach Dateianhänge zu speichern. Dieser &#8230; <a href="https://blog.ebene7.com/2010/10/07/attachment-in-couchdb-speichern/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Letzte Woche habe ich ja schon etwas über <a href="http://blog.ebene7.com/2010/09/30/couchdb-kann-mehr-als-nur-moebel-speichern/" target="_self">CouchDB</a> berichtet und wie unkompliziert man damit arbeiten kann. In den Dokumenten können aber nicht nur beliebige Daten in beliebiger Struktur gespeichert werden, es ist auch sehr einfach Dateianhänge zu speichern. Dieser Code-Schnipsel ist ein einfaches Beispiel, wie es mit dem Zend_Http_Client funktioniert. Wichtig ist nur, dass immer die _rev(Id) des jeweiligen Dokumentes mit übergeben wird, da sonst nichts gespeichert wird und ein Konflikt auftritt.</p>
<pre><code>$image = 'bild.jpg'; $mimeType = mime_content_type($image); $content = file_get_contents($image); $url = 'http://developer:5984/database/document/path?rev=xx-xxxxx'; $client = new Zend_Http_Client(); $response = $client-&gt;setUri($url) -&gt;setMethod('PUT') -&gt;setHeaders(array('Content-Type' =&gt; $mimeType)) -&gt;setRawData($content, $mimeType) -&gt;request() </code></pre>
<p>Die Anhänge könnten auch mit dem Dokument im JSON-Format übertragen werden. Dafür müsste $content dann aber erst base64_encoded werden. Hierbei werden bestehende Anhänge aber gelöscht!</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/10/07/attachment-in-couchdb-speichern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArrayAccess und isset() / unset()</title>
		<link>https://blog.ebene7.com/2010/08/09/arrayaccess-und-isset-unset/</link>
		<comments>https://blog.ebene7.com/2010/08/09/arrayaccess-und-isset-unset/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 05:00:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Tipps und Tricks]]></category>
		<category><![CDATA[ArrayAccess]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[isset]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[SPL]]></category>
		<category><![CDATA[unset]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1231</guid>
		<description><![CDATA[Letztens stellte sich mir die Frage, wie PHP ArrayAccess-Objekte behandelt, wenn isset() oder unset() mit mehreren Parametern aufgerufen wird. Werden die Methoden offsetExists() und offsetUnset() mehrfach aufgerufen oder nur einmal mit einem Array als Parameter? PHP verhält sich an der &#8230; <a href="https://blog.ebene7.com/2010/08/09/arrayaccess-und-isset-unset/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Letztens stellte sich mir die Frage, wie PHP ArrayAccess-Objekte behandelt, wenn isset() oder unset() mit mehreren Parametern aufgerufen wird. Werden die Methoden offsetExists() und offsetUnset() mehrfach aufgerufen oder nur einmal mit einem Array als Parameter?</p>
<p>PHP verhält sich an der Stelle wie man es wahrscheinlich erwartet hätte und ruft die jeweilige Methode für jeden Parameter einmal auf. Es sind also keine besonderen Bedingungen innerhalb der Logik notwendig.</p>
<p><span id="more-1231"></span>Hier ein Beispiel zum Ausprobieren:</p>
<pre>&lt;?php
class myArray implements ArrayAccess
{
  function offsetExists($key)
  {
    echo __METHOD__ . print_r($key, true);
    return true;
  }

  function offsetUnset($key)
  {
    echo __METHOD__ . print_r($key, true);
  }

  function offsetGet($key) { return; }
  function offsetSet($key, $value) {}
}

$t = new myArray();
unset($t['tick'], $t['trick'], $t['track']); echo '&lt;br/&gt;';
isset($t['tick'], $t['trick'], $t['track']);</pre>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/08/09/arrayaccess-und-isset-unset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSV-Datei sortieren ganz einfach</title>
		<link>https://blog.ebene7.com/2010/07/28/csv-datei-sortieren-ganz-einfach/</link>
		<comments>https://blog.ebene7.com/2010/07/28/csv-datei-sortieren-ganz-einfach/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 18:15:32 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[Sortierung]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1160</guid>
		<description><![CDATA[Heute hatte ich im Büro ein lustiges Gespräch darüber, wie einfach es ist eine CSV-Datei alphabetisch zu sortieren und dass das passende Script als inline (also alles in einer Zeile) in unter zehn Minuten geschrieben ist. Zeitlich war das wie &#8230; <a href="https://blog.ebene7.com/2010/07/28/csv-datei-sortieren-ganz-einfach/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Heute hatte ich im Büro ein lustiges Gespräch darüber, wie einfach es ist eine CSV-Datei alphabetisch zu sortieren und dass das passende Script als inline (also alles in einer Zeile) in unter zehn Minuten geschrieben ist.<span id="more-1160"></span></p>
<p>Zeitlich war das wie erwartet locker drin, nur leider klappte das mit dem Inline aufgrund der Funktion sort() nicht, da diese das zu sortierende Array als Referenz verarbeitet.</p>
<p>Kleine Spielerei aber vielleicht braucht ja mal jemand den Schipsel.</p>
<pre><code>&lt;?php
$file = 'pfad/zur/datei.csv';
$lines = file($file);
sort($lines);
file_put_contents($file, implode('', $lines));</code></pre>
<p>Einmal ausgeführt und aus</p>
<pre><code>"test","test"
"bla","blubber"
"apfel","apfel"</code></pre>
<p>wird</p>
<pre><code>"apfel","apfel"
"bla","blubber"
"test","test"</code></pre>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/07/28/csv-datei-sortieren-ganz-einfach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySql-Dump erstellen und wieder einspielen</title>
		<link>https://blog.ebene7.com/2010/07/20/mysql-dump-erstellen-und-wieder-einspiele/</link>
		<comments>https://blog.ebene7.com/2010/07/20/mysql-dump-erstellen-und-wieder-einspiele/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:15:59 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Notiz an mich]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Dump]]></category>
		<category><![CDATA[Konsole]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=1083</guid>
		<description><![CDATA[Dump erstellen mysqldump -u[USERNAME] -p[PASSWORD] -r path/to/dumpfile.sql --databases [DATABASENAME] Dump einspielen mysql -u[USERNAME] -p[PASSWORD] &#60; path/to/dumpfile.sql oder auch mit mysqlimport.]]></description>
			<content:encoded><![CDATA[<p>Dump erstellen</p>
<pre>mysqldump -u[USERNAME] -p[PASSWORD] -r path/to/dumpfile.sql --databases [DATABASENAME]</pre>
<p>Dump einspielen</p>
<pre>mysql -u[USERNAME] -p[PASSWORD] &lt; path/to/dumpfile.sql</pre>
<p>oder auch mit mysqlimport.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/07/20/mysql-dump-erstellen-und-wieder-einspiele/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Magento-Cheatsheet</title>
		<link>https://blog.ebene7.com/2010/05/19/magento-cheatsheet/</link>
		<comments>https://blog.ebene7.com/2010/05/19/magento-cheatsheet/#comments</comments>
		<pubDate>Wed, 19 May 2010 05:00:08 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Notiz an mich]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Cheatsheet]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[Shop]]></category>
		<category><![CDATA[Spickzettel]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=794</guid>
		<description><![CDATA[Für diverse häufig gebrauchte Funktionen mit dem doch sehr umfangreichen Shopsystem hier eine kleine Übersicht (wird zukünftig noch erweitert): Diverse Werte &#60;?php $storeId = Mage::app()-&#62;getStore()-&#62;getId(); $storeName = Mage::app()-&#62;getStore()-&#62;getName(); $storeCode = Mage::app()-&#62;getStore()-&#62;getCode(); $groupId = Mage::app()-&#62;getStore()-&#62;getGroupID(); $groupName = Mage::app()-&#62;getStore()-&#62;getGroup()-&#62;getName(); $websiteName = Mage::app()-&#62;getWebsite()-&#62;getName(); &#8230; <a href="https://blog.ebene7.com/2010/05/19/magento-cheatsheet/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Für diverse häufig gebrauchte Funktionen mit dem doch sehr umfangreichen Shopsystem hier eine kleine Übersicht (wird zukünftig noch erweitert):<br />
<span id="more-794"></span></p>
<h3>Diverse Werte</h3>
<pre><code>&lt;?php $storeId = Mage::app()-&gt;getStore()-&gt;getId(); $storeName = Mage::app()-&gt;getStore()-&gt;getName(); $storeCode = Mage::app()-&gt;getStore()-&gt;getCode(); $groupId = Mage::app()-&gt;getStore()-&gt;getGroupID(); $groupName = Mage::app()-&gt;getStore()-&gt;getGroup()-&gt;getName(); $websiteName = Mage::app()-&gt;getWebsite()-&gt;getName();</code></pre>
<h3>Session</h3>
<pre>&lt;?php
$sessionId  = Mage::getModel('core/session')-&gt;getSessionId();
$customerId = Mage::getModel('customer/session')-&gt;getCustomerId();
$vistitorId = Mage::getModel('core/session')-&gt;getVisitorId();</pre>
<h3>Models</h3>
<pre><code>&lt;?php $customer = Mage::getModel('customer/customer'); $order = Mage::getModel('sales/order'); $product = Mage::getModel('catalog/product'); </code></pre>
<h4>Produkt-Model</h4>
<pre>$product    = Mage::getModel('catalog/product')-&gt;load($productId);
$categories = $product-&gt;getCategoryCollection();</pre>
<h3>Konfiguration</h3>
<p>auslesen</p>
<pre>$value = Mage::getStoreConfig('[MODULE]/[SECTION]/[FIELD]', $storeId);</pre>
<p>und wieder schreiben</p>
<pre>// Wert für Store 1 setzen
Mage::getConfig()-&gt;saveConfig('path/to/config/value', 12343, 'stores', 1);

// oder als Defaultwert
Mage::getConfig()-&gt;saveConfig('path/to/config/value', 12343);</pre>
<h3>Blocks</h3>
<pre><code>&lt;?php </code>$block = Mage::app()-&gt;getLayout()-&gt;createBlock('log/...');</pre>
<h3>Helpers</h3>
<pre>&lt;?php
$helper = Mage::helper('helper');</pre>
<h3>Logging</h3>
<pre><code>&lt;?php Mage::log('Schreibe das ins Logfile');</code></pre>
<h3>Sonstiges</h3>
<p>Store-Umgebung simulieren</p>
<pre><code>Mage::app()-&gt;getLocale()-&gt;emulate($storeId);</code></pre>
<p>Events auslösen</p>
<pre><code>Mage::dispatchEvent($eventName);</code></pre>
<p>Es geht weiter&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/05/19/magento-cheatsheet/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
