local.xml zur Entwicklungs-Unterstützung

Da Magento eher eine Enterprise-Shop-Lösung ist sollte auch die Entwicklung mit Enterprise-Methoden erfolgen. Das bedeutet natürlich das bei der Entwicklung auf Versionsverwaltung durch z.B. Subversion geachtet wird. Dazu gehört jedoch genau der Testbetrieb durch den Kunden auf einem Staging-Server. Erst nach Abnahme wird die Entwicklung, in der Regel halbautomatisch, auf die Kundenserver verteilt.

Nun besteht die Herausforderung daran, gerade sobald mehrere Entwickler an einem Projekt arbeiten, den Entwickler das Leben möglichst einfach zu machen. Dazu kann z.B. eine gemeinsame Magento-Datenbank gehören - das verhindert das jeder Entwickler Produkte selbst pflegen muss bzw. ständig seine Datenbank aktuell hält. Bei dieser Lösung stolpert man jedoch schnell über eine Stelle: Die Projekt-URL wird von Magento in der Datenbank gespeichert. Dadurch lässt sich nicht "mal eben" ein Dump von der Live-Instanz lokal einspielen und testen. Hier kann jedoch die local.xml in app/etc Abhilfe schaffen. Mit ihr lassen sich problemlos die Einstellungen aus dem Magento-Admin überschreiben.

Um z.B. die Store-Adresse zu überschreiben ergänzen wir die local.xml wie folgt:

<config>
[..]
<stores>
	<default>
		<web>
			<unsecure>
				<base_url>http://localhost.magento/tobi/</base_url>
			</unsecure>
			
			<secure>
				<base_url>http://localhost.magento/tobi/</base_url>
			</secure>	
		</web>
	</default>
	
	<admin>
		<web>
			<unsecure>
				<base_url>http://localhost.magento/tobi/</base_url>
			</unsecure>
			
			<secure>
				<base_url>http://localhost.magento/tobi/</base_url>
			</secure>				
		</web>
	</admin>	
	
</stores>
[..]
</config>

Genauso einfach lassen sich aber auch die Template-Hints aktivieren. Dazu wird der Block Default/Web einfach um folgenden Code ergänzt:

<config>
	[..]
	<stores>
		<default>
			[..]
			<dev>
				<debug>
					<template_hints>1</template_hints>	
				</debug>			
			</dev>			
			[..]
		</default>
	</stores>
	[..]
</config>

Auf diesem Wege lässt sich jedes Attribute in der Konfiguration überschreiben. Wer nicht weiß wie es heißt guckt sich einfach den Namen des Eingabefeldes an. Dieser ist immer im selben Schema aufgebaut: Die ersten beiden Teile getrennt durch einen Unterstrich (_) sind ein verschachtelter XML-Tag. Das Übrige umgibt dann den Wert der gesetzt werden soll.

Fazit: Als Entwickler lässt sich so auf einfachem Wege, ohne große Anpassung, Einstellungen die Online viel Sinn machen konsequent lokal deaktivieren ohne sich jedes mal die Mühe machen zu müssen alles wieder manuell umzustellen.



Ein Beitrag von Tobias Vogt
Tobias's avatar

Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Seit 2016 ist er Mitgründer und CTO bei der connect-io GmbH, einer Magento-Agentur mit Sitz im idyllischen Paderborn-Salzkotten. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.

Alle Beiträge von Tobias

Kommentare
ThinkTank am

Kann es möglicherweise sein, dass seit Magento 1.8. das Überschreiben der Base_Urls für andere Stores als 'default' oder 'admin' auf diese Weise nicht mehr funktioniert?

Hab hier einen Shop, bei dem für folgenden Eintrag stets der Wert in der Datenbank bevorzugt wird, obwohl in der local.xml bspw. steht: stores->eng->web->unsecure->base_url = http://meinShop.com/eng/

Wird der Konfig-Eintrag 'stores/eng/web/unsecure/base_url' in der DB gelöscht, greift der Wert aus der local.xml. Das sollte ja eigentlich nicht so sein...

Hat sich möglicherweise wieder etwas geändert?

Tobias Vogt am

Das freut mich. Dann am besten noch eine local.xml.dev anlegen, mit ins SVN packen und die anderen Entwickler können die Einstellungen relativ leicht übernehmen :)

JimmyBlue am

Hallo Tobias, vielen Dank für Deine Hilfe. Ich habe Deinen Tipp verfolgt. Es funktioniert. Das hat mir sehr geholfen. Jetzt können wir unsere Testdatenbank mit der Entwicklerdatenbank synchron halten. Gruß Jimmy

Tobias Vogt am

Genau, meinen Artikel wolle ich aktualisieren. Das einzige was du beachten musst ist das stores->default nun stores->DEIN_STORE_CODE heißen muss. Dann Cache leeren und es sollte gehen.

JimmyBlue am

Hi Tobi,

vielen Dank für die zügige Antwort. Meintest Du, dass Du Deinen Artikel aktualisieren willst?

Ist es aktuell generell möglich, eine solche Einstellung vorzunehmen, oder ist diese Option entfallen?

Gruß Jimmy

Tobias Vogt am

Hi Jimmy,

der Beitrag ist leider schon etwas älter. Ganz 100% klappt das so in der aktuellen Magento-Version nicht mehr. Ich notiere mir mal das ich das aktualisierte :) Dauert aber leider ein paar Tage/Wochen - sorry.

Liebe Grüße

Tobi

JimmyBlue am

Irgendwie nimmt Magento die Konfiguration bei mir lokal nicht an. Kann es sein, dass ich bei den XML-Tags eine bestimmte Reihenfolge beachten muss? Stimmt das Tag "Stores"? Danke schon mal

Tobias Vogt am

Super und immer wieder gerne :) Wie man das Layout mittels local.xml verändert ist übrigens eigentlich unter http://www.webguys.de/magento/layout-updates-uber-die-local-xml/ beschrieben. In dem Artikel hier geht es um die local.xml in app/etc!

TonkBerlin am

UPS, da löscht deine Seite einfach mein XML :) Egal, Fehler ist behoben. Mein XML war falsch geschrieben. Danke für die Hilfe!

TonkBerlin am

Die komplett aufzubauen ist eine gute Idee. Ich hab bisher nur folgendes drin:

            css/local.css
Tobias Vogt am

Da bin ich mir gerade nicht ganz sicher. Eigentlich hatte ich nichts gelesen das das Feature irgendwie abgestellt wurde. Ist die local.xml auch komplett aufgebaut? Also inkl. der layout-Tags? Hast du mal "mit voller Gewalt" ein probiert?

TonkBerlin am

Ist die Datei local.xml bei 1.5.1 raus geflogen? app/design/frontend/default/skinname/layout/local.xml scheint bei mir nicht zu wirken. Danke für die Hilfe!

Dein Kommentar