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

Einzelne Checkbox als Pflichtfeld geht nicht.

Es gibt bis dato wohl Probleme mit Powermail und date2cal. Wenn man eine einzelne Checkbox hat, die dann auch noch ein Pflichtfeld ist, wird diese nicht übermittelt. Das ganze ist aber schnell umgangen und sollte helfen bis es ein Update der Extensions gibt. Einfach diese Zeile im Konstantenfeld des TS eintragen:

plugin.powermail.field.checkboxJS = 0
Share

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