blog.erikkothe.de rund um Magento, TYPO3, CSS, ….

Wie kann man das “Passwort ändern”-Formular direkt anzeigen lassen?

Wenn man auf der Benutzerkonto Seite ist, kann man direkt auf "Passwort ändern" gehen, aber man kommt nur zu dem allgemeinen Formular und muss erst runterscrollen und das Häckchen bei Passwort ändern setzten. Nicht gerade Benutzerfreundlich gestaltet. Um gleich das Formular anzuzeigen und dort hinzuspringen sind zwei kleine Änderungen zu machen.

Als erstes den Link anpassen, dieser findet man in der Datei *templatepfad*/customer/account/dashboard/info.html. Hier nur ?p=1#p hinzufügen:

<a href="<?php echo $this->getChangePasswordUrl() ?>?p=1#p"><?php echo $this->__('Change Password') ?></a>

Im Template unter *templatepfad*/customer/form/edit.phtml die Zeile

<input type="checkbox" name="change_password" id="change_password" value="1" onclick="setPasswordForm(this.checked)" title="<?php echo $this->__('Change Password') ?>"<?php if($this->getCustomer()->getChangePassword()==1): ?> checked="checked"<?php endif; ?> /> <label for="change_password"><?php echo $this->__('Change Password') ?></label>

mit der Zeile

<input type="checkbox" name="change_password" id="change_password" value="1" onclick="setPasswordForm(this.checked)" title="<?php echo $this->__('Change Password') ?>"<?php if($this->getCustomer()->getChangePassword()==1||$_GET[p]==1): ?> checked="checked"<?php endif; ?> /> <label for="change_password"><?php echo $this->__('Change Password') ?></label>

austauschen. Und hinter dem Fieldset (~Zeile 117) diese Zeilen anfügen, damit das Formular auch als Pflichtfeld gesetzt wird.

<?php
if($_GET[p]==1) echo "<script language=\"javascript\">$('current_password').up(3).show();$('current_password').addClassName('required-entry');$('password').addClassName('required-entry');$('confirmation').addClassName('required-entry');</script>";
?>

Getestet unter Magento 1.3.2.x

Share

Wie erstelle ich neue Spalten?

In der Kundenübersicht von Magento sieht man schon so einige Details auf den ersten Blick, aber was ist wenn das nicht genug ist?

Wenn man es mal gefunden hat, ist es leicht umgesetzt ;) Die Spalten für die Kundenübersicht werden in der Datei /app/code/core/Mage/Adminhtml/Block/Customer/Grid.php verwaltet. Hierbei müssen zwei Funktionen überschrieben werden. In meinem Beispiel hab ich Kundennummer und Firma den Spalten hinzugefügt. Diese Lösung habe ich unter 1.3.x getestet, ob es auch unter 1.4.x auch so funktioniert habe ich noch nicht überprüft.

protected function _prepareCollection()
{
$collection = Mage::getResourceModel('customer/customer_collection')
->addNameToSelect()
->addAttributeToSelect('email')
->addAttributeToSelect('created_at')
->addAttributeToSelect('group_id')
->addAttributeToSelect('kundennummer') // Muss ergänzt werden, damit die Daten auch ausgegeben werden
->addAttributeToSelect('company')
->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left')
->joinAttribute('billing_city', 'customer_address/city', 'default_billing', null, 'left')
->joinAttribute('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left')
->joinAttribute('billing_region', 'customer_address/region', 'default_billing', null, 'left')
->joinAttribute('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'left');

$this->setCollection($collection);

return parent::_prepareCollection();
}

und

protected function _prepareColumns()
{
/* ... */

$this->addColumn('kundennummer', array(
'header' => 'Kundennummer', // Spaltenüberschrift
'width' => '150', // Breite der Spalte
'index' => 'kundennummer'
));

$this->addColumn('company', array(
'header' => 'Firma', // Spaltenüberschrift
'width' => '150', // Breite der Spalte
'index' => 'company'
));

/* ... */

return parent::_prepareColumns();
}
Share

Wo bekomme ich Hilfe, wenn ich die Transaktionsmails bearbeiten will?

Es gibt einige Variablen die man von Haus aus benutzen kann. Um diese zu benutzen muss man zwei geschweifte Klammern zum öffnen und schliessen benutzen. Eine Liste möglicher Werte findet Ihr unter:
http://www.magentocommerce.com/wiki/modules_reference/english/mage_adminhtml/system_email_template/index

Um mehr Flexibilität zu bekommen, kann man auch seine eigenes E-Mail Template erstellen. Eine kleine Einführung ist unter http://nicholas.piasecki.name/blog/2009/10/creating-sane-plain-text-sales-transactional-e-mails-in-magento/ zu finden.

Wer in die E-Mails noch andere Daten vom Benutzer anzeigen lassen möchte findet hier Hilfe: http://snippi.net/magento-get-load-customer-object-based-customer-email Dort ist leider die E-Mail statisch hinterlegt hier hilft eine kleiner Ergänzung weiter:

$_order = $this->getOrder();
$customer->loadByEmail($_order->getCustomerEmail());

Share

Probleme mit Submenü bei TypoGento?

Heute bin ich über das Problem gestolpert das bei TypoGento das Menü auf der TYPO3 Seite nicht richtig angezeigt wird. Wenn man auf ein Produkt klickt, dann wird nur noch die oberste Ebene des Menüs angezeigt. Nach ein wenig Analyse der URLs die erzeugt werden und Nachforschungen im Quelltext habe ich eine Lösung dafür gefunden. Sie ist ziemlich simpel, da nur die Parameter in der URL nicht passend ausgewertet werden. Man muss nur in der Datei class.tx_fbmagento_navigation.php im Ordner EXT:fb_magento/lib die Funktion _parseNodes anpassen.

Alt:

protected function _parseNodes($nodes) {
    	foreach($nodes as $node) {
			if ($node->getId() ==  intval($this->_get['shop']['id']) || ($node->getChildren() && $this->_parseNodes($node->getChildren()))) {
    				$node->setAct(true);
    				return true;
    }
}

Neu:

protected function _parseNodes($nodes) {
    	foreach($nodes as $node) {
    		if(isset($this->_get['shop']['category'])){
			if ($node->getId() ==  intval($this->_get['shop']['category']) || ($node->getChildren() && $this->_parseNodes($node->getChildren()))) {
    				$node->setAct(true);
    				return true;
	    		}
		}else{
			if ($node->getId() ==  intval($this->_get['shop']['id']) || ($node->getChildren() && $this->_parseNodes($node->getChildren()))) {
    				$node->setAct(true);
    				return true;
	    		}
		}
    	}
    }

Share

Welche Typen von Felder kann man im Magento Admin Panel anlegen?

Im Ordner

lib/Varien/Data/Form/Element/

kann man sich einen Überblick verschaffen, welche Typen von Feldern man im Admin Panel anlegen kann. Ab der Version 1.4.x ist der Link-Typ neu dazu gekommen.

Share