Archiv für die Kategorie 'Magento'

Magento: Get resized catalog thumbnail image

My solution for generating a resized thumbnail image is to overwrite the  model class of catalog. Here my xml file:

<?xml version="1.0"?>
<config>
  <global>
    <models>
      <catalog>
        <rewrite>
           <category>YOURMODULE_SUBMODULE_Model_Catalog_Category</category>
        </rewrite>
      </catalog>
    </models>
  </global>
</config>

The class (/app/code/local/YOURMODULE/SUBMODULE/Model/Catalog/Category.php):

class YOURMODULE_SUBMODULE_Model_Catalog_Category extends Mage_Catalog_Model_Category
{
  public function getResizedThumbnail($width = 130, $height = 130) {

    if (! $this->getThumbnail()) return false;

    $imageUrl = Mage::getBaseDir ( 'media' ) .DS .  "catalog" . DS . "category" . DS . $this->getThumbnail();
    if (! is_file ( $imageUrl )) return false;

    $imageResized = Mage::getBaseDir ( 'media' ) .DS . "catalog" . DS . "category" . DS . "cache" . DS . "cat_resized" . DS . $this->getThumbnail();

    if (! file_exists ( $imageResized ) && file_exists ( $imageUrl ) || file_exists($imageUrl) && filemtime($imageUrl) > filemtime($imageResized)) :

      $imageObj = new Varien_Image($imageUrl);
      $imageObj->constrainOnly ( true );
      $imageObj->keepAspectRatio ( true );
      $imageObj->keepFrame( false );
      $imageObj->quality( $quality );
      $imageObj->resize( $width, $height );
      $imageObj->save( $imageResized );
    endif;

    if(file_exists($imageResized)){
      return Mage::getBaseUrl( 'media' ) . "catalog" . DS . "category" . DS . "cache" . DS . "cat_resized" . DS . $this->getThumbnail();
    }else{
      return $this->getThumbnail();
    }
  }
}

Now you can call the the method $category->getResizedThumbnail() in your view.phtml

Magento: Add block to content area of home page

Go over the main menu to CMS -> Pages and open the home page. Then go to the tab “Design” and edit the code. The following example adds a block at the end of the content area.

<reference name="content">
  <block type="core/template" name="cms_name_of_the_block" template="page/widget/2columns.phtml">
  </block>
</reference>

Magento: Resize image

The original path is: path/to/magento/media/blog/<imagename>
The path of the resized image is: path/to/magento/media/blog/resized/<imagename>

public function resizeImg($fileName, $width, $height = null)
{

	$folderURL = Mage::getBaseDir(Mage_Core_Model_Store::URL_TYPE_MEDIA). DS .'blog'. DS;
	$basePath = $folderURL . $fileName;
	$newPath = $folderURL. 'resized' . DS . $fileName;
	$resizedURL = Mage::getBaseUrl('media') . 'blog' . DS . $fileName;;

	//if width empty then return original size image's URL
	if ($width != '') {
		//if image has already resized then just return URL
		if (file_exists($basePath) && is_file($basePath) && !file_exists($newPath)) {
			$imageObj = new Varien_Image($basePath);
			$imageObj->constrainOnly(TRUE);
			$imageObj->keepAspectRatio(FALSE);
			$imageObj->keepFrame(FALSE);
			$imageObj->resize($width, $height);
			$imageObj->save($newPath);
		}
		$resizedURL = Mage::getBaseUrl('media') . 'blog' . DS . "resized" . DS . $fileName;
	}
	return $resizedURL;
}

Magento: Spezielle JavaScript- oder CSS-Datei in einem bestimmten Store View laden

In seiner layout update xml Datei kann man folgende Tags verwenden. mm steht hierbei für den Store View Code:

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        ....
    </default>
    <STORE_mm>
      <reference name="head">
	<action method="addJs"><script>pfad/zur/datei-mm.js</script></action>
      </reference>
    </STORE_mm>
</layout>

Magento: Breadcrumb auf Home-Seite abschalten

magento_breadcrumbsDie Breadcrumb kann man auf einer bestimmten Seite, beispielsweise auf der Home-Seite, bequem mit folgendem Code im Seitenlayout abschalten:

<remove name="breadcrumbs" />

Crontab für Magento unter Linux einrichten

Um die cron.php unter dem User wwwrun auszuführen, muss man den Befehl in die Crontab des Users eintragen:

crontab -e -u wwwrun

und dann den Aufruf eintragen:

*/5 * * * * /usr/bin/php -f /pfad/zur/cron.php

Automatische Google Sitemap-Einrichtung:

Unter System -> Konfiguration -> Katalog -> Google Sitemap

Apache: Den Zugriff auf einen Teil einer URL schützen

Mit LocationMatch kann man einen Teil einer URL schützen. Das ist beispielsweise praktisch, wenn man eine Store View eines Magento Shops vor der Öffentlichkeit schützen will, bis diese fertiggestellt ist.

<LocationMatch "/en/">
  AuthType Basic
  AuthName "Protected"
  AuthUserFile /pfad/zur/passwortdatei
  Require valid-user
</LocationMatch>

Google Shopping für Magento [Präsentation]

Eine kleine Präsentation über das Google Shopping Plugin für Magento ist hier zu finden.

Magento: 1 Cent Bug

Bei der Anzeige von Beträgen kann es bei gewissen Kombinationen von Preis und Steuersatz zu einer fehlerhaften Preisanzeige kommen. Beispielsweise wird bei einem Bruttobetrag von 162 Euro und 21prozentiger Mehrwertsteuer ein Betrag von 161,99 Euro ausgegeben.
Behoben wird dies in Version 1.6 wenn man in der Datei app/code/core/Mage/Tax/Helper/Data.php in Zeile 497 anstelle von

$price = $this->_calculatePrice($price, $includingPercent, false);
$price = $this->_calculatePrice($price, $percent, true);

das folgende einträgt:

$price = $this->_calculatePrice($price, $includingPercent, true);
$price = $this->_calculatePrice($price, $percent, false);

Aber Achtung! Dieser Fix hält nur bis zum nächsten Update des Cores. Für eine dauerhafte Lösung kann man mittels Überladung mit einer eigenen Extension des Problem etwas länger lösen. Aber auch hier muss auf Kompatibilität immer geachtet werden. Eine perfekte Lösung gibt es daher leider nicht.

Magento: Gewicht-Attribut ändern

Beim Update des Gewicht-Attributes erscheint folgende Fehlermeldung:

The attribute code 'weight' is reserved by system. Please try another attribute code

Um das Attribut zu ändern, muss man in der Datenbank folgende Schritte durchführen:

  1. In der Tabelle eav_attribute nach dem Attribut weight in der Spalte attribute_code suchen
  2. ID merken
  3. In der Tabelle catalog_eav_attribut unter der ID die entsprechenden Änderungen durchführen