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!';
}
?>

Eigene Shortcode in WordPress definieren

7. Dezember 2012 at 09:38

Ihr kennt das sicher, ihr wollt an beliebiger Stelle in WordPress irgend etwas einfügen und am liebsten aus einer Vorlage.
Das geht über Shortcode-Definitionen wie folgt:

Editiert die functions.php

In der functions.php fügt ihr eure eigene Funktion hinzu und definiert anschließend den Shortcut:

function myShortcutFunction()
{
echo '<p>ich bin ein text</p>';
}
add_shortcode('myshortcut', 'myShortcutFunction');

Jetzt könnt ihr den Shortcute im Artikel wie folgt aufrufen:

[myshortcut]

Das war’s! 😉

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';
}

php mail bzw. sendmail temporär umleiten zu dev/null – email versand unterbinden von php / sendmail

26. März 2012 at 17:59

Ihr möchtet den Versand von E-Mails durch php bzw. sendmail unterbinden?

Dafür gibt es verschiedene Möglichkeiten, z.B. könnt ihr ein alias einrichten, einfach in der Datei

/etc/aliases

ein bestimmten user eintragen sowie das Ziel, also:

bestimmteruser:         /dev/null

Alternativ in php den sendmail_path zu /dev/null umbiegen und auch den Port „umbiegen“.
Tragt hierzu am Anfang eures Scriptes (z.B. index.php) folgende Zeilen ein:

<?php
ini_set("sendmail_path", "/dev/null");
ini_set("smtp_port","26");
?>

Rich Snippet erfolgreich implementieren am Beispiel der Bewertungen

26. März 2012 at 17:22

An dem folgenden Beispiel wird die Implementation der Sterne-Bewertung in Rich Snippet gezeigt.
Mit Hilfe dieser werden die Bewertungen in Form von Sternen in den Google SERPS angezeigt, wie im folgenden Bild gezeigt:

rich snipped beispiel in den google serps

Die Funktionen sind frei erfunden, anhand des Namen ist zu erkennen welcher Wert an dieser Stelle dynamisch generiert werden sollte bzw. dem Kommentar dahinter als Bsp.! 😉

<!-- begin rating rich snippet -->
<span style="visibility:hidden;" xmlns:v="http://rdf.data-vocabulary.org/#" typeof="v:Review-aggregate">
<span rel="v:rating">
<span property="v:value"><?php echo $this->getDerProzentualeBewertungsWert(); //z.B. 90%  ?></span>
</span>
<span property="v:best">5.00</span>
<span property="v:votes"><?php echo $this->getAnzahlDerBewertungen(); //z.B. 9  ?></span>
</span>
<!-- end rating rich snippet -->

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: Mail versenden

8. September 2011 at 16:35

send email in magento (php-code) :

$template_var_array = array(
'var_1' => 'value 1',
'var_2' => 'value 2'
);
$sender = array('name' => 'name', 'email' => 'email@adresse.com');
$translate = Mage::getSingleton('core/translate');
$translate->setTranslateInline(false);
$emailTemplate = Mage::getModel('core/email_template');
$emailTemplate->setDesignConfig(array('area' => 'backend'))
->sendTransactional(
Mage::getStoreConfig('core/email_template'),
Mage::getStoreConfig('general'), // alternate $sender
Mage::getStoreConfig('general'), // absender
null,
$template_var_array;
}
}