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.

Magento: Neues Kategorie Attribute hinzufügen / Adding category attributes

28. September 2010 at 16:13

Add a mysql setup file inside the directory of your module YourNamespace/YourModule/sql/yourmodule_setup/ and write the following code in your module’s mysql setup file:

$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$setup->addAttribute('catalog_category', 'my_attribute', array(
 'group'         => 'General',
 'input'         => 'text',
 'type'          => 'varchar',
 'label'         => 'My Attribute',
 'backend'       => '',
'frontend'      => '',
 'visible'       => 1,
 'required'      => 0,
 'user_defined' => 1,
 'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
 'visible_on_front' => 1,
'unique'       => 0,
));
// add attribute to group
$installer->addAttributeToGroup('catalog_category', 'Default', 'my_module', 'my_attribute');
$installer->endSetup();

Now you found the code my_attribute and the label My Attribute. You can find it under Admin Panel / Catalog / Manage Categories / General Information .

With the array param ’sort_order‘ you can define the order in the backend-list.

Magento: expand „sort by“ list – „sortieren nach“ Liste erweitern

28. September 2010 at 11:20

you want to expand the default sort by list, without add new attributes? The solution:

extends the class Mage_Catalog_Model_Config and overwrite the function getAttributeUsedForSortByArray() with your own custom option array, f.e. :

class YourNamespace_Catalog_Model_Config extends Mage_Catalog_Model_Config
{
 /**
 * Retrieve Attributes Used for Sort by as array
 * key = code, value = name
 *
 * @return array
 */
 public function getAttributeUsedForSortByArray()
 {
 $custom_options = array(
 'custom_selection' => Mage::helper('catalog')->__('Custom Selection'),
 'newest_first'        => Mage::helper('catalog')->__('Newest first'),
 'bestselling'        => Mage::helper('catalog')->__('Bestselling first'),
 'promotions_first'    => Mage::helper('catalog')->__('Promotions first'),
 'price_htl'            => Mage::helper('catalog')->__('High to low'),
 'Price_lth'            => Mage::helper('catalog')->__('Low to high')
 );
 return $custom_options;
 /*
 * no further sortable attributes needed.
 *
 $options = parent::getAttributeUsedForSortByArray();
 return $custom_options + $options;
 */
 }
}

Magento – Währungssymbol ändern / formatieren

27. September 2010 at 18:46

Das Währungssymbol soll im Magento Shop geändert oder neu formatiert werden?

Einerseits geht das über System / Manage Currency Rates, dort kann z.B. gewählt werden ob ein Leerzeichen vor dem Währungs-Symbol angezeigt werden soll.

Alternativ über Veränderungen in der Template Datei:

kopiert die Datei

app/design/frontend/default/default/template/catalog/product/price.phtml

zum überschreiben in den eigenen Theme-Ordner (falls noch nicht vorhanden – don’t overwrite core files !)

Die einfache Quick & Dirty Methode (und für Performance nicht ideale) den String neu zu formatieren ist der folgende Code, alternativ überschreibt die Funktion toCurrency der Klasse lib/Zend/Currency.php bzw. Funktion formatTxt in /app/code/core/Mage (don’t overwrite core files!)!

<?php
$_new_price = str_replace('€', '€*', $_coreHelper->currency($_price,true,true));
 echo $_new_price;
?>

37 Point Magento Pre-Launch Checklist – Magento Rollout Checklist

24. September 2010 at 15:53

Tom Robertshaw hat eine 37 Point Magento Pre-Launch Checklist veröffentlicht welche ich Euch hier nicht vorenthalten wollte.

Magento – Check if user is logged in – Prüfen ob ein user eingeloggt

22. September 2010 at 11:55

You want to check if a user is logged in with Magento? This is the solution:

<?php
if ($this->helper('customer')->isLoggedIn()) {
 echo("Authenticated user");
}
else {
echo("Anonymous user");
}
?>

Magento – Get the total price of items which currently in the cart – Gesamtpreis des Warenkorbes

22. September 2010 at 11:49

You need in Magento the total price of the items which currently in the shopping cart? This is the solution:

<?php echo $this->helper('checkout')->formatPrice(Mage::getSingleton('checkout/cart')->getQuote()->getGrandTotal()); ?>

Magento: reindex & cronjob

14. September 2010 at 12:17

Den Indexierungsprozess per Cron bzw. aus der Bash oder Windows-Shell zu starten geht wie folgt (Auszug indexer.php doku):

Usage:  php -f  indexer.php -- [options]
--status <indexer>            Show Indexer(s) Status
--mode <indexer>              Show Indexer(s) Index Mode
--mode-realtime <indexer>     Set index mode type "Update on Save"
--mode-manual <indexer>       Set index mode type "Manual Update"
--reindex <indexer>           Reindex Data
info                          Show allowed indexers
reindexall                    Reindex Data by all indexers
help                          This help
<indexer>     Comma separated indexer codes or value "all" for all indexers

Mögliche Optionen sind (Ausgabe von „Info“):

catalog_product_attribute     Product Attributes
catalog_product_price         Product Prices
catalog_url                   Catalog URL Rewrites
catalog_product_flat          Product Flat Data
catalog_category_flat         Category Flat Data
catalog_category_product      Category Products
catalogsearch_fulltext        Catalog Search Index
tag_summary                   Tag Aggregation Data
cataloginventory_stock        Stock Status

Demnach ist ein Reindex einzelner Komponenten möglich über:

php /path/to/magento/shell/indexer.php --reindex catalog_product_flat

Tipp: Der  Script prüft ob Abhängigkeiten vorhanden sind, welche über die config.xml’s der einzelnen Module definiert werden. Diese sind in der Regel auch definiert, so kommt es ggf. zu einem ungewollten reindexall …

Quick & dirty (besser wäre die entsprechenden config.xml’s anzupassen) kann das umgangen werden durch auskommentieren der folgenden Zeilen in der function reindexEverything in der app/code/core/Mage/Index/Model/Process.php :

public function reindexEverything()
{
if ($this->getData('runed_reindexall')) {
return $this;
}
/*
if ($this->getDepends()) {
$indexer = Mage::getSingleton('index/indexer');
foreach ($this->getDepends() as $code) {
$process = $indexer->getProcessByCode($code);
if ($process) {
$process->reindexEverything();
}
}
}
*/
$this->setData('runed_reindexall', true);
return $this->reindexAll();
}
Usage:  php -f indexer.php — [options]

–status <indexer>            Show Indexer(s) Status
–mode <indexer>              Show Indexer(s) Index Mode
–mode-realtime <indexer>     Set index mode type „Update on Save“
–mode-manual <indexer>       Set index mode type „Manual Update“
–reindex <indexer>           Reindex Data
info                          Show allowed indexers
reindexall                    Reindex Data by all indexers
help                          This help

<indexer>     Comma separated indexer codes or value „all“ for all indexers

Magento: Im WYSIWYG Datei Browser weitere Datei Typen erlauben z.B. ‚pdf‘ – Allow new file types, e.g. ‚.pdf‘ in magento file browser

13. September 2010 at 11:26

magento ecommerce logo

Möchtet ihr im Magento’s WYSIWYG Datei Browser weitere Datei Typen als Upload erlauben (z.B. PDF) so könnt ihr dies einfach durch editieren der entsprechende config.xml erlauben:

/App/code/Core/Mage/Cms/etc/config.xml

Fügt in der config.xml in diesem Fall ein <pdf>1</pdf> hinzu.

<extensions>
 <allowed>
 <jpg>1</jpg>
 <jpeg>1</jpeg>
 <png>1</png>
 <gif>1</gif>
 <pdf>1</pdf>
 </allowed>
 <image_allowed>
 <jpg>1</jpg>
 <jpeg>1</jpeg>
 <png>1</png>
 <gif>1</gif>
 </image_allowed>
 <media_allowed>
 <flv>1</flv>
 <swf>1</swf>
 <avi>1</avi>
 <mov>1</mov>
 <rm>1</rm>
 <wmv>1</wmv>
 </media_allowed>
 </extensions>

Achtet darauf keine core-files zu überschreiben, da diese ggf. beim nächsten Magento-Update überschrieben werden.