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)
   )
 )
);

PhpStorm 3.0 in Version 3 erschienen: Keep Your Code in Its Best Shape!

29. November 2011 at 14:56

oh phpStorm ist so eben in Version 3.0 erschienen, daher gleich mal installiert.

Hier die Änderungen im Überblick:

Hello from JetBrains!

Great news of the day:  PhpStorm 3.0 — a major upgrade of our PHP IDE — is out!

It brings many new features and improvements, reflecting several hundred of your votes in our issue tracker:

  • Smart Duplicated Code Detector to help you quickly find similar blocks of code through your entire code base and securely get rid of them without losing the intended functionality.
  • A new integrated UML tool allows you to quickly get a bird’s-eye view of your project structure, or even a semantic view of the changes in the recent VCS commits made by your colleagues.
  • To ensure that your code works fast and doesn’t cause any performance bottlenecks, the IDE now includes a profiler.

The key new functionality in PhpStorm 3.0 includes:

  • Smart Duplicated Code Detector
  • PHP UML diagrams
  • Profiling results browser for Xdebug and Zend Debugger engines
  • PhpUnit test runner is now fully compatible with PhpUnit 3.6
  • CoffeeScript support
  • Significant improvements to FTP/SFTP Sync
  • TFS support and revision graph for GIT
  • Streamlined UI across all operating systems

Read more about what’s new and download PhpStorm 3.0.

Also coming soon: WebStorm 3.0 – a lightweight, smart IDE for JavaScript, HTML and CSS! Expect CoffeeScript, Node.JS and JSLint.

Develop with pleasure!
JetBrains Team

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()
 ));

Magento: delete an system attribute

13. September 2011 at 18:56

To delete a system attribute in Magento, you must first have to make it user defined.

– Go to phpmyadmin
– Go to your magento installation database
– Go to eav_attribute table
– Browse table with attribute_code ‘YOUR_ATTRIBUTE_CODE’ OR browse the table with the attribute_id of your    attribute (‘your attribute’ means the attribute which you want to remove as system attribute)
– Edit the table row of your attribute
– Find the field „is_user_defined“ and set the value to 1
– save the attribute

 

Now your attribute no longer remains System Attribute
Now you can delete it from Attribute manager

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

Magento: Parent Role id ‚G4‘ does not exist (or other ids)

2. September 2011 at 11:35

Magento reads the rows from the database table admin_role in the wrong“ order. That is it reads the user entry before the parent group (the role) is loaded. This happends because the user rows has a tree_level = 1, when they should have tree_level = 2 or more.

Solution:

To fix a broken admin-interface, run the following query in the magento database:
UPDATE admin_role SET tree_level = 2 WHERE role_type = “U”;

To prevent the error from happening again:
Open up the file app/code/core/Mage/Admin/Model/Mysql4/User.php

On line 162 (or close to that line) you find a row that says:
‘tree_level’ => $row[’tree_level’] + 1,

change this line to:
‘tree_level’ => $row[’tree_level’] + 2,

PHP: In PHP den Referer Forwarded Client / IP anzeigen, auch hinter einem Load-Balancer

23. August 2011 at 12:20

geht über die Server-Variable „HTTP_X_FORWARDED_FOR“ wie folgt:

echo $_SERVER["HTTP_X_FORWARDED_FOR"];

Magento: Page Cache anpassen

23. August 2011 at 11:22

Das Caching könnt ihr in Magento wie folgt beeinflussen:

protected function _construct()
{
$this->addData(array(
'cache_lifetime'    => 900,
'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG),
'cache_key'            => $this->getCacheKey()
));
}
public function getCacheKey()
{
return $this->getRequest()->getRequestUri().$this->getCacheCurrencyCode();
}
//retreive current currency code
public function getCacheCurrencyCode()
{
return Mage::app()->getStore()->getCurrentCurrencyCode();
}

De-Aktivieren könnt ihr das Caching wie folgt:

protected function _construct()
{
$this->addData(array(
'cache_lifetime'    => null,
'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG)
));
}