Magento: Attribute zur Checkout-Quote hinzufügen

14. April 2011 at 17:01

Zuerst muss in der Datenbank die Quote Tabelle entsprechend mit dem neuen Attribute erweitert werden, dies geht wie gewohnt über die setup-scripte (z.B. mysql4-install-0.0.X.php):

$installer = $this;
$installer->startSetup();
$installer->addAttribute('quote', 'new_attribute', array(
 'label'                        => 'New Attribute',
 'type'                        => 'varchar',
));
$installer->endSetup();

Danach könnt ihr, z.b. im OnepageController.php dieses Attribute wie folgt mit Werten füllen:

Mage::getSingleton('checkout/session')->getQuote()->setNewAttribute('value');
 Mage::getSingleton('checkout/session')->getQuote()->collectTotals();
 Mage::getSingleton('checkout/session')->getQuote()->save();

Be careful on input and type. Input means the input type of the attribute. And type means the input type in database.

For textfield it will be:
'input' => 'text',
'type' => 'text',

For textarea it will be:
'input' => 'textarea',
'type' => 'text',

For date field it will be:
'input' => 'date',
'type' => 'datetime',

For select list it will be:
'input' => 'select',
'type' => 'text',

For boolean select it will be:
'input' => 'boolean',
'type' => 'int',

Magento: Admin URL für Admin-Backend-Bereich ändern – Anleitung / HowTo

13. April 2011 at 16:42

Den Pfad in der URL zum Magento Admin-Backend-Bereich könnt ihrin der local.xml unter app/etc/ im folgenden Bereich ändern:

<admin>
 <routers>
 <adminhtml>
 <args>
 <frontName><![CDATA[admin]]></frontName>
 </args>
 </adminhtml>
 </routers>
 </admin>

 

 

Wichtig ist dabei der Teil wo „Admin“ steht bei <frontName><![CDATA[admin]]></frontName>, soll der neue path lauten „admin-admin“ ändert den Part wie folgt: <frontName><![CDATA[admin-admin]]></frontName>

Magento: IE9 fix

1. April 2011 at 10:56

magento ecommerce logo

Nach der Veröffentlichung es neuen Internet-Explorer 9 (kurz: IE9), berichten einige Benutzer über Probleme mit Magento und JavaScript. Die Ursache ist ein geändertes DOM-Handling im IE9, die in Magento verwendete Ajax-Bibliothek Prototype berücksichtigt dies noch nicht berücksichtigt. In der aktuellen Prototype Version 1.7 ist dieser Fehler bereits behoben. Allerdings setzen die meisten Magento-Installationen noch ältere Prototype-Bibliotheken ein.

Durch hinzufügen folgender Meta-Tags könnt ihr diesen Fehler temporär umgehen:

<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta http-equiv="X-UA-Compatible" content="IE=7" />

2 Tipps für die Arbeit mit Zend Framework und Ajax – Magento

24. März 2011 at 11:40

isXmlHttpRequest()

/**
* myAction from myController
*/
function myAction()
{
if  ($this->getRequest()->isXmlHttpRequest()) {
// do the handling of your ajax request
}
else {
// if it's not an ajax request then do regular handling here
}
}

JSON action helper

/**
* myAction from myController
*/
function myAction()
{
if ($this->getRequest()->isXmlHttpRequest()) {
// do the handling of your ajax request
$myArrayofData = array('a','b','c');
//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
}
else {
// if it's not an ajax request then do regular handling here
}
}
Weitere Tipps / nützliche Funktionen? Postet diese als Kommentar zum Artikel und ich nehme diese, wenn sinnvoll, mit in den Artikel auf.

Magento: eigene Events mit Observer definieren

18. Februar 2011 at 14:15

Events mit Hilfe des Observer im Magento definiert ihr in der config.xml des Modules wie folgt (bsp. Event in der Customer_Adress-Klasse):

<frontend>
<events>
<namespace_module_address_save_after>
<observers>
<namespace_module_observer>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>customerSaveFrontEnd</method>
</namespace_module_observer>
</observers>
</namespace_module_address_save_after>
</events>
 </frontend>

Der Aufruf in PHP in der entsprechenden Funktion:

$eventArgs = array(
 'address' => $address,
 'request' => $this->getRequest(),
 );
 Mage::dispatchEvent('customer_address_save_after', $eventArgs);

Die aufgerufene Funktion in der Observer-Klasse:

public function customerSaveFrontEnd(Varien_Event_Observer $observer)
 {
// add your code here
 }

Magento Module ohne Magento Connect laden ?

4. Januar 2011 at 12:44

magento ecommerce logo

Ihr möchtet eine Magento Extension ohne Magento-Connect laden?

Über die Webseite connect.get-the-code.de ist dies möglich. Es gibt keine Garantie dass ihr alle Module findet, meine Tests waren bisher viel versprechend positiv und die Trefferquote bisher 100%!

Magento: Alle Produkt-Attribute und deren Optionen einer Collection ausgeben

3. Januar 2011 at 12:16

Mit dem folgenden Code könnt ihr in Magento eine Liste aller Attribute und deren Optionen ausgeben.

require_once $_SERVER['DOCUMENT_ROOT'] . '/app/Mage.php';
umask(0);
Mage::app();
$product = Mage::getModel('catalog/product');
$collection = Mage::getResourceModel('eav/entity_attribute_collection')
                ->setEntityTypeFilter($product->getResource()->getTypeId());
echo "<pre>\n";
foreach ($collection as $attribute) {
    echo $attribute['attribute_code'] . "\n";
    $collection = Mage::getResourceModel('eav/entity_attribute_collection')
                    ->setEntityTypeFilter($product->getResource()->getTypeId())
                    ->addFieldToFilter('attribute_code', $attribute['attribute_code']);
    $_attribute = $collection->getFirstItem()->setEntity($product->getResource());
    $attribute_options = $_attribute->getSource()->getAllOptions(false);
    if ($attribute_options) {
        foreach ($attribute_options as $option) {
            if ($option['label']) {
                echo "\t" . $option['label'] . "\n";
            }
        }
    }
}
echo "</pre>\n";

Magento / Import in MySQL 5.0 – USING BTREE Error

19. November 2010 at 17:22

Wenn ihr ein MySQL-Datenbank-Dump in eine MySQL 5.0 importieren möchtet welche mit mysqldump auf einer 5.1 erzeugt wurde, dann bekommt ihr höchstwahrscheinlich eine Fehlermeldung wie die folgende:

Der Grund ist dass die key syntax von 5.0 auf 5.1 wie folgt geändert wurde:
mysql50
UNIQUE KEY IDX_BASE( entity_type_id, entity_id, attribute_id, store_id ) USING BTREE,
mysql51
UNIQUE KEY IDX_BASE USING BTREE ( entity_type_id, entity_id, attribute_id, store_id ),

Leider gibt es kein aktuellen Kompatabilitäts-Modus like –comptability=mysql50 in mysqldump.
Es kann zwar mysqldump –comptability=mysql40 benutzt werden, allerdings auf eigene Gefahr 😉

Mit dem folgenden Befehl könnt ihr in der Bash den dump vor dem Import bereinigen (benutzt das consolen-programm „sed“):

sed -i -r 's/\(([^)]+)\) USING BTREE/USING BTREE (\1)/g' magento.sql

Magento: Create shipment from order

18. November 2010 at 15:35

You want to create a shipment from an order?
here is the solution in php (example with invoice-data) :

$order = Mage::getModel('sales/order')->loadByIncrementId($invoice->getOrder()->getIncrementId());
if($order->canShip())
{
 $_itemQty                 = $order->getItemsCollection()->count();
 $_shipment             = Mage::getModel('sales/service_order', $order);
 $_shipment             = new Mage_Sales_Model_Order_Shipment_Api();
 $_shipmentId         = $_shipment->create($order->getIncrementId());
}

Magento & SEO – h1 Tag auf der Startseite richtig setzen

5. November 2010 at 09:59

magento ecommerce logo

Im Standard Theme von Magento findet man folgendes:

<h1 class="logo"><strong>Magento Commerce</strong><a href="http://demo.magentocommerce.com/" title="Magento Commerce" class="logo" rel="nofollow"><img src="http://demo3.magentocommerce.com/skin/frontend/default/default/images/logo.gif" alt="Magento Commerce" /></a></h1>

Dadurch wird das ggf. fehlende h1-Tag mit dem Alt-Attribute des Shop-Logo-Bildes gesetzt (kann im Admin-Backend konfiguriert werden). Die Idee dahinter ist gut, so ist auf jeder Seite ein h1 vorhanden. Die Umsetzung allerdings fraglich. Durch die folgende CSS Formatierung auf dem Strong-Element wird das h1 für die Human-Visitors versteckt:

strong {
font-size:0;
height:0;
left:-999em;
line-height:0;
overflow:hidden;
position:absolute;
text-indent:-999em;
top:-999em;
width:0;
}

Google mag solch Tricks gar nicht, straft ggf. die Seite so gar ab.

Hier die bessere Lösung:

<h1><a href="http://demo.magentocommerce.com/" title="Magento Commerce"><img src="http://demo3.magentocommerce.com/skin/frontend/default/default/images/logo.gif" alt="Magento Commerce" /></a></h1>

In diesem Fall wird der Alt-Title des Bildes als h1 verwendet, ohne irgend welch Visibility-Tricks welche zur Abmahnung führen könnten.