Magento: Change Attribute Type – Select to Multiselect

13. September 2013 at 17:51

Ihr möchtet den Attribute Type von Select auf Multiselect ändern?

so geht’s

$installer = $this;
$this->startSetup();
//$installer->updateAttribute('catalog_product', 'attributename', array('type' => 'varchar', 'input' => 'multiselect'));
$entityTypeId = $installer->getEntityTypeId('catalog_product', 'attributename');
$idAttributeOldSelect = $this->getAttribute($entityTypeId, 'attributename', 'attribute_id');
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, array(
    'frontend_input' => 'multiselect',
    'backend_type' => 'varchar'
));
$this->endSetup();

Magento Problem:catalog/product_collection wird mit falscher Store-ID-Flat-Table geladen – hier die Lösung

24. Juli 2013 at 14:00

Solltet ihr in Magento die Collection „catalog/product_collection“ in einer Schleife laden wollen und jeweils die store-id ändern, so erhaltet ihr eine falsche flat-table zurück (immer die des ersten geladenen stores.

Die Lösung: Vorher auf dem ResourceSingleton jeweils noch mal explizit mit setStoreId die ID des aktuellen stores setzen, hier der Quellcode dazu:

        Mage::getResourceSingleton("catalog/product_flat")->setStoreId($store->getId());
        $products = Mage::getResourceModel("catalog/product_collection")
            ->setStoreId($store->getId())
            ->addStoreFilter($store->getId());

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

In Magento die final erzeugte config.xml ausgeben / Get full merged config.xml in magento

28. Mai 2013 at 15:21

Die einzelnen Module enthalten jeweils diverse config.xml-Dateien. Diese werden final von Magento zu einer einzigen config-xml-datei zusammen gefügt. Diese könnt ihr euch mit folgendem PHP-Code ausgeben lassen:

Mage::log(Mage::app()->getConfig()->getNode()->asNiceXml(), Zend_Log::DEBUG, "config-xml.log");

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

Magento: Liste aller Events der aktuell geladenen Seite in eine Log-File ausgeben.

28. Mai 2013 at 14:34

magento ecommerce logo

Bei der Entwicklung bzw. der Erweiterung bestehender Methoden, ist es oft hilfreich eine Übersicht aller aktuell geladenen Events einer bestimmten Seite zu erhalten.

So erhaltet ihr eine Liste der Events der aktuell geladenen Seite

In der Funktion public static function dispatchEvent($name, array $data = array())“ in der Datei“/app/Mage.php“ fügt ihr folgenden Code ein:

file_put_contents('var/log/magento-events.log'
 , date('Y-m-d H:i:s', time()) . ' - '
 . (isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'CLI') . ' - '
 . (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_FILENAME']) . ' - '
 . $name . chr(10),
 FILE_APPEND);

Nach dem neuladen der Seite findet ihr eine entsprechende Auflistung in der Datei var/log/magento-events.log .

War der Tipp für euch hilfreich?
Dann gibt ihn doch ein +1 oder like bzw. teilt diesen Artikel bei Google+ oder Facebook!

Danke für euren Support!

Magento SEO: URL mit /index.php/ in der URI umleiten auf URL ohne

15. April 2013 at 15:32

Per Standard ist es in Magento möglich alle URLs jeweils mit /index.php/ in der URI, als auch ohne aufzurufen.
Hierdurch entsteht im schlimmstenfall ein „duplicate content“ Problem.

Um das Problem zu lösen, ist es sinnvoll die URL mit der /index.php/ auf die URL ohne diesen URI-Part zu leiten,
daher per mod_rewrite von z.b. /index.php/katalog auf /katalog

So geht’s:

RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

Zu empfehlen ist den Admin-Bereich auszugliedern, da Suchmaschinen auf diesen sowieso kein Zugriff haben (sollten)!

Admin Bereich als Ausnahme definierfen

RewriteCond %{REQUEST_URI} !^/index.php/admin/
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

 

Fandet ihr diesen Tipp nützlich?
Dann bewertet diesen doch bitte und teilt ihn bei Google+ oder Facebook, danke!

Robots.txt in Magento

5. März 2013 at 15:32

Die Robots.txt dient zur Steuerung der Webcrawler diverse Suchmaschinen, primär wird dort fest gelegt welche Seiten nicht gecrawlt werden sollen.

Magento hat viele Ordner und Dateien sowie Parameter/Filter, etc. welche nicht gescannt werden sollten, sei es aus Sicherheitsgründen als auch um das Duplicate Content Problen in den Griff zu bekommen:

## robots.txt for Magento Community and Enterprise

## GENERAL SETTINGS

## Enable robots.txt rules for all crawlers
User-agent: *

## Crawl-delay parameter: number of seconds to wait between successive requests to the same server.
## Set a custom crawl rate if you’re experiencing traffic problems with your server.
# Crawl-delay: 30

## Magento sitemap: uncomment and replace the URL to your Magento sitemap file
# Sitemap: http://www.example.com/sitemap/sitemap.xml

## DEVELOPMENT RELATED SETTINGS

## Do not crawl development files and folders: CVS, svn directories and dump files
Disallow: CVS
Disallow: .svn
Disallow: .idea
Disallow: .sql
Disallow: .tgz

## GENERAL MAGENTO SETTINGS

## Do not crawl Magento admin page
Disallow: /admin/

## Do not crawl common Magento technical folders
Disallow: /app/
Disallow: /downloader/
Disallow: /errors/
Disallow: /includes/
Disallow: /lib/
Disallow: /pkginfo/
Disallow: /shell/
Disallow: /var/

## Do not crawl common Magento files
Disallow: /api.php
Disallow: /cron.php
Disallow: /cron.sh
Disallow: /error_log
Disallow: /get.php
Disallow: /install.php
Disallow: /LICENSE.html
Disallow: /LICENSE.txt
Disallow: /LICENSE_AFL.txt
Disallow: /README.txt
Disallow: /RELEASE_NOTES.txt

## MAGENTO SEO IMPROVEMENTS

## Do not crawl sub category pages that are sorted or filtered.
Disallow: /*?dir*
Disallow: /*?dir=desc
Disallow: /*?dir=asc
Disallow: /*?limit=all
Disallow: /*?mode*

## Do not crawl 2-nd home page copy (example.com/index.php/). Uncomment it only if you activated Magento SEO URLs.
## Disallow: /index.php/

## Do not crawl links with session IDs
Disallow: /*?SID=

## Do not crawl checkout and user account pages
Disallow: /checkout/
Disallow: /onestepcheckout/
Disallow: /customer/
Disallow: /customer/account/
Disallow: /customer/account/login/

## Do not crawl seach pages and not-SEO optimized catalog links
Disallow: /catalogsearch/
Disallow: /catalog/product_compare/
Disallow: /catalog/category/view/
Disallow: /catalog/product/view/

## SERVER SETTINGS

## Do not crawl common server technical folders and files
Disallow: /cgi-bin/
Disallow: /cleanup.php
Disallow: /apc.php
Disallow: /memcache.php
Disallow: /phpinfo.php

## IMAGE CRAWLERS SETTINGS

## Extra: Uncomment if you do not wish Google and Bing to index your images
# User-agent: Googlebot-Image
# Disallow: /
# User-agent: msnbot-media
# Disallow: /

Verschiedene versionen der robots.txt pro domain/store per htaccess ausliefern – so geht’s

Mit hilfer der folgenden Einträge in der .htaccess-Datei könnt ihr anhand der Domain/Subdomain verschiedene robots.txt ausliefern:

 RewriteEngine on

RewriteCond %{HTTP_HOST} ^.*?domain2\.tld$ [NC]
RewriteRule ^robots\.txt$ robots.version1.txt

RewriteCond %{HTTP_HOST} ^.*?domain1\.tld$ [NC]
RewriteRule ^robots\.txt$ robots.version2.txt

Magento: Was man alles mit Kategorien machen kann … – Categories in magento

20. Februar 2013 at 13:31

Kategorie neu laden anhand vorhandener Kategorie-ID

$category = Mage::getModel('catalog/category')->load(12);

Unterkategorien der Kategorie erhalten

$category->getChildren();

Beliebige Werte der aktuellen kategorie erhaltet ihr mit z.b.

$category->getId(); // the cat id
$category->getName(); // cat name
$category->getLevel(); // cat level
$category->getParentCategories(); // get parent categories

Den Kategorien Pfad im Store zur aktuellen Kategorie anzeigen lassen geht mit

$category->getPathInStore();

Alle Hauptkategorien (unterhalb der 0-Level-Default-Kategorie) anzeigen lassen

    public function getParentTopCategory($category = null)
    {
        if(is_null($category)) {
            return $category;
        }
        if($category->getLevel() == 2){
            return $category;
        } else {
            $parentCategory = Mage::getModel('catalog/category')->load($category->getParentId());
            return $this->getParentTopCategory($parentCategory);
        }
    }

Magento: Funktion zur Erzeugung der „markup for multilingual content“-Link-Tags

22. Januar 2013 at 17:53

Die folgende Funktion erzeugt euch für die einzelnen Stores bei Mehrsprachigkeit dieser ein Array mit den Markup-Links für Multilingual content:

public function countryStoresAlternateLinks()
{
/*      e.g.
<link rel="alternate" hreflang="es" href="http://www.example.com/" />
<link rel="alternate" hreflang="es-ES" href="http://es-es.example.com/" />
<link rel="alternate" hreflang="es-MX" href="http://es-mx.example.com/" />
<link rel="alternate" hreflang="en" href="http://en.example.com/" />
*/
$stores = Mage::app()->getStores(false);
if (!$stores) {
return false;
}
$countryAlternateLinks = '';
foreach($stores as $store) {
$countryAlternateLinks[] = '<link rel="alternate" hreflang="' . substr(Mage::getStoreConfig('general/locale/code', $store->getId()), 0, 2) . (Mage::getStoreConfig('general/country/default', $store->getId()) != '' ?  "-" . Mage::getStoreConfig('general/country/default', $store->getId()) : '') .  '" href="' . $store->getBaseUrl() . '" />' . "\n";
}
return $countryAlternateLinks;
}

Die erzeugte Liste könnt ihr dann entsprechend im Template verarbeiten/ausgeben.

Idealerweise solltet ihr die Funktion in eine erweiterte Klasse der Mage_Page_Block_Html_Head packen.

Magento: Standard Weiterleitung mit 302 ändern zu einer 301 Weiterleitung (SEO)

17. Januar 2013 at 10:30

Magento leitet interne Links per 302-Status-Code weiter. Das ist in Bezug auf Suchmaschinenoptimierung nicht gerade optimal, besser wäre eine 301-Weiterleitung.

Um das zu ändern sollte beim Aufruf der Funktion „_redirect“ jeweils als zweiten Parameter der korrekte Status-code „301“ mit gegeben werden, da ansonsten der Default-Parameter „302“ verwendet wird.

Siehe: /app/code/core/Mage/Core/Controller/Response/Http.php :

/**
* Additionally check for session messages in several domains case
*
* @param string $url
* @param int $code
* @return Mage_Core_Controller_Response_Http
*/
public function setRedirect($url, $code = 302)
{
/**
* Use single transport object instance
*/
if (self::$_transportObject === null) {
self::$_transportObject = new Varien_Object;
}
self::$_transportObject->setUrl($url);
self::$_transportObject->setCode($code);
Mage::dispatchEvent('controller_response_redirect',
array('response' => $this, 'transport' => self::$_transportObject));
return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode());
}

Um das über ein Magento-Event zu lösen, geht wie folgt vor:

Erstellt ein neues Module und erweitert die config.xml mit folgendem xml-snippet, z.B. in der /app/code/local/Neuesmodul/Cms/etc/config.xml

<global>
<events>
<cms_controller_router_match_before>
<observers>
<Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
<type>singleton</type>
<class>neuesmodul_cms/observer</class>
<method>
cmsControllerRouterMatchBefore
</method>
</Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
</observers>
</cms_controller_router_match_before>
</events>
</global>

in /app/code/local/Neuesmodul/Cms/Model/Observer.php fügt ihr die folgende Funktion  ein:

/*
* set 301-Http-Response-Code for redirection
*/
public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
{
$condition = $observer->getEvent()->getCondition();
if ($condition->getRedirectUrl()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect($condition->getRedirectUrl(), 301)
->sendResponse()
->setDispatched(true);
}
}

Alternativ-Funktion

/*
 * set 301-Http-Response-Code for redirection
 */
 public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
 {
 $condition = $observer->getEvent()->getCondition();
if ($condition->getIdentifier()) {
 Mage::app()->getFrontController()->getResponse()
 ->setRedirect('/', 301)
 ->sendResponse()
 ->setDispatched(true);
die();
 }
 }

Die Magento SEO Checkliste – Diese Punkte sollten vor dem Go-Live geprüft werden

16. Januar 2013 at 15:23

Magento bietet eine Reihe an Möglichkeiten den Webshop für Suchmaschinen zu optimieren (kurZ: SEO). Die folgende Checkliste sollte vor der Go-Live Schaltung abgearbeitet werden:

SEO features Description
General
1. Store name Don’t forget to enter your store name. Store name is used in different parts of Magento
System -> Configuration -> General -> Store information -> Store name
2. Home page title and meta data Don’t forget to enter “Page title” and “Meta data” for your CMS pages, including Home page
CMS -> Pages -> Home
3. Logo image Alt description Alt description of the store image logo
System -> Configuration -> Design -> Header -> Logo Image Alt
4. SEO Friendly URLs (SEF URLs) SEO Friendly URLs is one of the most important features of every eCommerce store, don’t forget to enable and test it
System -> Configuration -> Web -> Search Engines Optimization -> Use Web Server Rewrites -> “Yes”
Base URL
5. Unsecure and secure base URLs Enter HTTP and HTTPS path to your store, e.g. http://www.example.com/store/ or https://www.example.com/store/
System -> Configuration -> Web -> Unsecure -> Base URL
System -> Configuration -> Web -> Secure -> Base URL
6. Auto-redirect to Base URL Use only one WWW or non-WWW URL for your store. I.e. redirect from http://example.com/store/ to http://www.example.com/store/
System -> Configuration -> Web -> URL options -> Auto-redirect to Base URL -> “301 redirect (Moved permanently)”
Products and categories
7. Products meta data and URL key Your products should have SEO friendly URL keys and correct meta data values
Catalog -> Manage Products -> [Product] -> General -> URL Key
Catalog -> Manage Products -> [Product] -> Meta data
8. Categories meta data and page title Enter URL Key, page title, Meta information for each category
Catalog -> Manage Categories -> [Category]
9. Canonical link for categories and products Enter URL Key, page title, Meta information for each category
System -> Catalog -> Catalog -> Search Engine Optimizations -> Use Canonical Link Meta Tag For Categories
System -> Catalog -> Catalog -> Search Engine Optimizations -> Use Canonical Link Meta Tag For Products
10. Structure of product URLs Preferred structure of product URLs
System -> Catalog -> Search Engine Optimizations -> Use Categories Path for Product URLs -> “Yes”
Sitemap
11. Google sitemap Google sitemap configuration
System -> Google Sitemap
12. Magento sitemap Magento sitemap configuration settings
System -> Catalog -> Sitemap -> Use Tree Like Category Sitemap -> “Yes”
System -> Catalog -> Sitemap -> Search Engine Optimizations -> Autogenerated Site Map -> Enable
Advanced
13. Remove SID from Magento URLs Be careful, this feature allows customers to stay logged in when switching between different multi-stores
System -> Configuration -> Web -> Session Validation Settings -> Use SID on Frontend -> No
14. Permanent redirect rules Permanent redirect rules for renamed products or categories
System -> Catalog -> Search Engine Optimizations -> Create Permanent Redirect for URLs if URL Key Changed -> “Yes”
Default values
15. Default SEO values Default values for title, Meta tags and robots directives
System -> Configuration -> Design -> HTML head -> Default Title
System -> Configuration -> Design -> HTML head -> Default Description
System -> Configuration -> Design -> HTML head -> Default Keywords
System -> Configuration -> Design -> HTML head -> Default Robots -> “INDEX, FOLLOW”
16. Default title separator Default page title separator on storefront
System -> Catalog -> Search Engine Optimizations -> Page Title Separator -> “-”
17. Default product URL suffix Default product URL suffix for all pages
System -> Catalog -> Search Engine Optimizations -> Product URL Suffix -> “.html”
System -> Catalog -> Search Engine Optimizations -> Category URL Suffix -> “.html”