Magento: Wie finde ich heraus ob ich auf der Startseite bin? – getIsHomePage

15. Januar 2013 at 15:12

Ihr möchtet an beliebiger Stelle in Magento im Quellcode prüfen ob ihr auf der Startseite seit oder nicht?

Die Lösung

$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();

in der header.phtml :

<?php
if($this->getIsHomePage()) {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

an anderer Stelle:

<?php
$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();
if($is_homepage)
{
echo "You are on Homepage!";
} else {
echo "You are NOT on Homepage!";
}
?>
oder
<?php
$routeName = Mage::app()->getRequest()->getRouteName();
$identifier = Mage::getSingleton('cms/page')->getIdentifier();
if($routeName == 'cms' && $identifier == 'home') {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

Magento: Fehler beim Anlegen der sitemap.xml – die Lösung zum Problem

11. Januar 2013 at 15:07

Das Problem

Beim anlegen einer sitemap.xml im Magento-Admin-Backend erhaltet ihr, ab dem Moment wo ihr von dem Namen „sitemap.xml“ abweicht ggf. eine Fehlermeldung wie z.B. die folgende „Der Pfad „/var/sitemaps/sitemap-de.xml“ ist nicht verfügbar und kann nicht verwendet werden.“ und das obwohl, der Pfad /var/sitemaps/ existiert und auch vom Webserver beschreibbar ist.

Ursache? Ggf. Magento-Bug …

Die Lösung

Legt pro sitemap ein Unterordner an, z.B. „/var/sitemaps/de/“, dort packt ihr jeweils die „sitemap.xml“ rein (muss immer so heißen) und schon funktionierts.

Magento: Admin_User Passwort per SQL in der Datenbank ändern

10. Januar 2013 at 11:19

Mit dem folgenden SQL-Update-Script ist es möglich das Passwort eines Admin_Users direkt in der Datenbank zu ändern.

Dabei ist zu beachten, dass der String „qX“ nicht geändert werden kann, den String „password“ mit dem neuen Passwort ersetzen.

UPDATE admin_user SET password=CONCAT(MD5('qXpassword'), ':qX') WHERE username='admin';

 

 

Magento: Einzelne EAV-Attribute speichern

25. Mai 2012 at 17:22

Möchtet ihr bei einem Produkt, Bestellung, oder ähnlich in Magento ein Attribute speichern, so geht das in der Regel wie folgt (Bsp. an einem Produkt):

// Produkt laden
$product = Mage::getModel("catalog/product")->load(123);
// Attribut ändern
$product->setTitle("Asdf");
// Produkt speichern
$product->save();

Allerdings funktioniert das Speichern nicht an jeder Stelle, hinzu kommt das bei dem obigen Beispiel jeweils das gesamte Produkt inkl. alle Werte gespeichert wird. Da das EAV-Model ein komplexes Konstrukt ist, kann der Speichervorgang unnötig viele Ressourcen verschwenden.

Deshalb ist das Speichern einzelner Attribute direkt über das Resource-Model die bessere Wahl.
Hier am Beispiel des Produktes:

// Produkt laden
$product = Mage::getModel("catalog/product")->load(123);
// Attribut ändern
$product->setTitle("Asdf");
// geändertes Attribute über das Resource-Model des Produktes speichern
$product->getResource()->saveAttribute($product, "title");

Sollte euch der Artikel geholfen haben, so teilt diesen doch bitte bei Google+ und/oder Facebook!

Magento: Neue Collection anlegen / create new collection

11. April 2012 at 12:20

Um eine neue Collection in Magento anzulegen erstellt ihr eine entsprechende Datei in eurem Modul unter /Model/Mysql4/CollectionName/Collection.php welche die Klasse Mage_Core_Model_Mysql4_Collection_Abstract erweitert, z.b.:

class Namespace_OwnModule_Model_Mysql4_CollectionName_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
protected function _construct()
{
// your own code
}
}

Der Aufruf erfolgt dann über:

$collection = Mage::getModel('namespace_ownModule/')->getCollection();

Magento Code Snippet: Prüfen ob aktuelle Seite eine CMS, Category oder Produkt Seite ist

10. April 2012 at 15:02

Gelegentlich ist es notwendig zu prüfen von welchem Typ die aktuelle Seite ist.
Interessant dabei ist z.B. ob die aktuelle Seite eine Produkt-, Kategorie oder CMS-Seite ist.
Unter Anderem mit dem folgenden PHP-Code-Snippet könnt ihr dies prüfen:

if( Mage::registry('current_product') ) {
echo 'Product Page';
} else if( Mage::registry('current_category') ) {
echo 'Category Page';
} else if(Mage::registry('cms_page')) {
echo 'CMS Page';
}

SEO optimierte 404-Fehler-Seiten in Magento – 404 error page in magento

21. März 2012 at 17:47

Bei der Migration / Relaunch eines bestehenden Webshops zu Magento oder bei Änderungen der Link-Struktur, Kategorien, CMS, etc. innerhalb Magentos, kann es beim Aufruf alter ungültiger Links zu einer 404-Fehlerseite kommen. Das ist weder für die Besucher, noch aus SEO-Gesichtspunkten optimal. Jeglicher Link-Juice würde so abhanden kommen, mögliche Käufer verschreckt, die Conversion sinkt unnötig.

Standardgemäß wird in Magento die unter Admin-Backend unter „System > Konfiguration > Web > Standardseiten > CMS keine Route Seite“  definierte Seite aufgerufen, allerdings wird dann bei einem Aufruf einer ungültigen Seite/URL der Header Statuscode 404 ausgeliefert. Hierdurch geht der Link-Juice auf diese Seite verloren was sich negativ auf das Google-Rankings auswirkt.

Eleganter ist es meiner Meinung nach, alle nicht mehr vorhandenen Seiten direkt per 301-Redirect, entweder auf die ermittelte (Unter-)Kategorie-Übersichtsseite, notfalls auf die Startseite weiter zu leiten.

Aus diesem Grund ist es notwendig den Magento eigenen NoRoute-Controller durch ein eigenes Modul zu überschreiben.

Die Magento noRouteAction befindet sich in der Klasse /app/code/core/Mage/Cms/controllers/IndexController.php .
Diese Klasse erweitern wir durch ein eigenes Module unter app/code/local/Fly2marsmedia/Redirect

Im Ordner „Redirect“ wird das Verzeichnis „etc“ und „controllers“ angelegt. Im Ordner „etc“ legt ihr die Datei config.xml an mit dem folgenden Inhalt:

<?xml version="1.0"?>
<config>
<modules>
<Fly2marsmedia_Cms>
<version>0.0.1</version>
</Fly2marsmedia_Cms>
</modules>
<frontend>
<routers>
<fly2marsmedia_cms>
<use>standard</use>
<args>
<module>Fly2marsmedia_Cms</module>
<frontName>redirect</frontName>
</args>
</fly2marsmedia_cms>
<cms>
<args>
<modules>
<Fly2marsmedia_Cms before="Mage_Cms">Fly2marsmedia_Cms</Fly2marsmedia_Cms>
</modules>
</args>
</cms>
</routers>
</frontend>
</config>

Anschließend legt ihr im Ordner /controllers die Datei IndexController.php mit folgendem Inhalt ab:

class Fly2marsmedia_Cms_IndexController extends Mage_Cms_IndexController
{
public function noRouteAction($coreRoute = null)
{
  $path = '/';
  $targetUrl = Mage::getUrl($path);
  if($targetUrl != '') {
  Mage::app()->getFrontController()
  ->getResponse()
  ->setRedirect($targetUrl, 301)
  ->sendResponse();
  exit();
}
return $this;
}
}

Final muss das Module noch aktiviert werden. Dazu im Ordner /app/etc/modules eine Datei Namens Fly2marsmedia_Redirect.xml mit folgendem Inhalt ablegen:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Fly2marsmedia_Template>
<active>true</active>
<codePool>local</codePool>
</Fly2marsmedia_Template>
</modules>
</config>

Magento Coding Tipps: Filter kombinieren mit addAttributeToFilter-Funktion

6. März 2012 at 16:34

Beim Aufruf der Collection in Magento sollen 2 Attribute kombiniert werden?

In diesem Beispiel zeige ich euch wie ihr das ein Filter auf OR „is null“ and „eq“ => array() kombinieren könnt.

Im Detail erfolgt eine OR-Verknüpfung der folgenden 2 Abfragen:
$collection->addAttributeToFilter(‚attributename‘, array(‚is‘ => null));
$collection->addAttributeToFilter(‚attributename‘, array(110,111));

So dass sich die folgende ergibt:

$collection->addAttributeToFilter(
 array(
   array(
     'attribute' => 'name_of_attribute_1',
     'null' => 'this_value_doesnt_matter'
     ),
   array(
     'attribute' => 'name_of_attribute_2',
     'in' => array(110, 111)
   )
 )
);

Magento: WYSIWYG-Editor im Backend hinzufügen

14. November 2011 at 17:36

Bei neuen Attributen welche im Admin-Backend konfigurierbar sind, ist es bei Text-Feldern des Öfteren gewünscht ein WYSIWYG-Editor zu aktivieren.
Das geht wie folgt:

// Zu erst die Funktion <em>prepareLayout</em>der Elternklasse überschreiben
/**
 * Loads the wysiwyg editor on demand, if enabled.
 *
 * @return Mage_Adminhtml_Block_Widget_Form
 */
 protected function _prepareLayout() {
 parent::_prepareLayout();
 if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) {
 $this->getLayout()->getBlock('head')->setCanLoadTinyMce(true);
 }
 }
// danach die addField Methode des fieldset erweitern mit
 /*       'wysiwyg'   => true,
 'config'    => Mage::getSingleton('cms/wysiwyg_config')->getConfig()
*/
// Das Ergebnis sollte dann wie folgt aussehen:
$fieldset->addField('feld_name_text, 'editor', array(
 'name' => 'feld_name_text',
 'label' => Mage::helper('cms')->__('Name des Feldes'),
 'title' => Mage::helper('cms')->__('Name des Feldes'),
 'wysiwyg'   => true,
 'config'    => Mage::getSingleton('cms/wysiwyg_config')->getConfig()
 ));

Usability Optimierung: Die Produktsuche

4. November 2011 at 11:32

Im Conversion Doktor Blog wurde eine Google Analytics Auswertung einer Shopsuche durch geführt, und Hinweise zur Usability-Optimierung gegeben (z.B. wurde fest gestellt das sehr viele nach „Produktsuche“ suchen d.h. ist es sinnvoll dies als „default text“ im Eingabefeld zu setzen.