LAMELLEN, INSEKTENSCHUTZ, ROLLOS, DOPPELROLLOS, MARKISEN, JALOUSIEN – 5% Rabatt Code

Sonnenschutz vom Experten mit einem super Preis-Leistungsverhältnis. Persönlich bin ich von den Produkten von Sonnenschutz-Riese überzeugt und möchte daher einen 5% Gutschein zur Verfügung stellen.

Produkte:
Lamellen, Insektenschutz, Rollos, Doppelrollos, Markisen, Jalousien und Plissees

Gutschein:

1
Rabattcode (im Warenkorb eingeben): riesigsparen

Shop:
www.sonnenschutz-riese.de

Plissee Gutschein über 10% bei Plissee-Riese.de

Ich habe mich länger mit dem Thema Sonnenschutz befasst und habe nahezu alle Fenster mit passenden Plissees ausgestattet. Dabei bin ich bei Plissee-Riese auf einen Dienstleister mit hervorragenden Preis-Leistungsverhältnis gestoßen. Ich kann diesen Anbieter nur empfehlen möchte folgend einen 10% Gutschein zur Verfügung stellen:

1
Rabattcode (im Warenkorb eingeben): RIESIGE10%

Shop: www.plissees-riese.de

Magento Grid show only one page (use group or groupByAttribute)

Verwendet man bei einem Grid group, so wird oft nur eine Seite bzw. ein Eintrag angezeigt. Um alle Einträge angezeigt zu bekommen sowie die Seiten, muss folgende Datei angepasst werden:

lib/Varien/Data/Collection/Db.php

Funktion wie folgt abändern:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public function getSize()
    {
        if (is_null($this->_totalRecords)) {
            $sql = $this->getSelectCountSql();
 
            $result = $this->getConnection()->fetchAll($sql, $this->_bindParams);;
 
            foreach ($result as $row) {
                $this->_totalRecords += reset($row);
            }
 
        }
        return intval($this->_totalRecords);
    }

Magento kein Login im Frontend möglich (2 frontend session cookies)

Wenn das einloggen im Frontend nicht möglich ist und dabei keine Fehlermeldung erscheint, kann das den Grund haben, das es zwei frontend sessions gibt, da die Domain nicht auf „www.“ läuft.

Szenario:
– Kunde geht auf Shop (der ohne www. in der Base-Url konfiguriert ist)
– Loggt sich ein
– schließt den Browser ohne Abmeldung
– öffnet den Browser neu
– versucht sich neu anzumelden und das besagte Problem besteht

Problem:
Magento erstellt zwei Frontend Cookies für „.example.de“ und „example.de“

Lösung:

Konfiguration umstellen:
Admin -> System -> Konfiguration -> Web -> Tab: Sitzungscookie Verwaltung

Dort die „Cookie Lebensdauer“ definieren, dann läuft erst mal die Session nur eine gewisse Zeit und das ist auch eine Sicherheitsfrage.
Unter „Cookie Domain“ die Domain definieren

Ist das Problem dadurch noch nicht gelöst, empfiehlt sich die Basis-URL auf „www.example.de“ umzustellen und in der „Cookie Domain“ „www.example.de“ anzugeben.

Aus SEO-Gründen sollten aber alle „ohne www“ Aufrufe auf „mit www“ umgeleitet werden:

1
2
3
4
5
6
RewriteEngine on
 
# non www to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

.htaccess – Weiterleitung nach Domainumstellung von „ohne www“ auf „mit www“

Mit folgenden Code in der .htaccess werden nach der Umstellung einer Domain von „example.de“ auf „www.example.de“ alle Unterseiten per 301 weitergleitet, so gehen die Platzierungen in den Suchmaschinen nicht verloren und zugleich ist dieser Code für http und https gänig.

1
2
3
4
5
6
RewriteEngine on
 
# non www to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Magento Template Filter in E-Mails, Beschreibung oder CMS-Blöcken

Wir können in E-Mails, CMS-Seiten, CMS-Blöcken und anderen Beschreibungen einfach Magentotypische Platzhalter einbauen. Der Syntax dafür ist super einfach: {{platzhalter argumente…}}.

Dazu folgend ein paar Beispiele:

1
2
3
4
{{store direct_url="marken/jeld-wen.html"}}
{{media_url="wysiwyg/brands/Concept.jpg"}}
{{var customer.email}}
...

Durch folgenden Befehlt werden diese Filter aufgelöst und korrekt dargestellt:

1
echo Mage::helper('cms')->getPageTemplateProcessor()->filter( $_product->getDescription() );

Magento individuelle Versandkosten / Speditionskosten bei Überlänge (Option)

Folgend möchte ich zeigen, wie Sie bei Produkten mit individuellen Produkt-Optionen die Versandkosten dynamisch anpassen. Je nachdem, welche Versandkostenart Sie wählen, muss die entsprechende „Carrier“ PHP angepasst werden. Im Beispiel zeige ich das anhand der Tabelrates.

Schritt 1: Datei kopieren

/app/code/core/Mage/Shipping/Model/Carrier/Tablerate.php
nach
/app/code/local/Mage/Shipping/Model/Carrier/Tablerate.php

Schritt 2: Function erweitern

Achtung, das ist nur ein Beispiel, in meinem Fall enthält das erste Optionsfeld die größe, welche in Abhängigkeit zu den Versandkosten steht. Hinzugefügt wurden nur die Teile, bei denen „Hinzugefügt“ steht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
        if (!$this->getConfigFlag('active')) {
            return false;
        }
 
        // exclude Virtual products price from Package value if pre-configured
        if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {
                if ($item->getParentItem()) {
                    continue;
                }
                if ($item->getHasChildren() && $item->isShipSeparately()) {
                    foreach ($item->getChildren() as $child) {
                        if ($child->getProduct()->isVirtual()) {
                            $request->setPackageValue($request->getPackageValue() - $child->getBaseRowTotal());
                        }
                    }
                } elseif ($item->getProduct()->isVirtual()) {
                    $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal());
                }
            }
        }
 
        ######################################### HINZUGEFÜGT #####################################
        // spezial products for free 
        $setShippingFree = false;
        foreach ($request->getAllItems() as $item) {
            $p = Mage::getModel('catalog/product')->load(  $item->getProduct()->getId()  );
            if ($p->getIsShippingFree()) $setShippingFree = true;
            else {
                $setShippingFree = false;
                break;
            }
        }
 
        ######################################### HINZUGEFÜGT #####################################        
        // spezial price by oversize
        $price = 0;
        if ($request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {
                if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
                    continue;
                }
 
                $value = $item->getOptionByCode('info_buyRequest')->getValue();
                $params = unserialize($value);
                if (isset($params['options'])) {
                    if (!empty($params['options'])) {
                        $counter = 0;
                        foreach($params['options'] as $optionId => $value) {
                            if (!is_numeric($value)) continue;
                            if ($counter>0) continue;
                            $option = $item->getProduct()->getOptionById($optionId);
                            $title = $option->getTitle();
                            if (strpos($title,'cm')!==false) {
                                if ($value>=400 && $price<35) $price = 35;
                                elseif ($value>=320 && $price<25) $price = 25;
                                elseif ($value>=200 && $price<15) $price = 15;
                            } elseif (strpos($title,'mm')!==false) {
                                if ($value>=4000 && $price<35) $price = 35;
                                elseif ($value>=3200 && $price<25) $price = 25;
                                elseif ($value>=2000 && $price<15) $price = 15;
                            }
                            $counter++;
                        }
                    }
                }
            }
        }
 
        if ($price>0) {
            $result = Mage::getModel('shipping/rate_result');
            $method = Mage::getModel('shipping/rate_result_method');
 
            $method->setCarrier('tablerate');
            $method->setCarrierTitle($this->getConfigData('title'));
 
            $method->setMethod('bestway');
            $method->setMethodTitle('Speditionsaufschlag');
 
            $method->setPrice($price);
            $method->setCost($price);
 
            $result->append($method);
            return $result;
        }
 
        // Free shipping by qty
        $freeQty = 0;
        if ($request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {
                if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
                    continue;
                }
 
                if ($item->getHasChildren() && $item->isShipSeparately()) {
                    foreach ($item->getChildren() as $child) {
                        if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
                            $freeQty += $item->getQty() * ($child->getQty() - (is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0));
                        }
                    }
                } elseif ($item->getFreeShipping()) {
                    $freeQty += ($item->getQty() - (is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0));
                }
            }
        }
 
        if (!$request->getConditionName()) {
            $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name);
        }
 
         // Package weight and qty free shipping
        $oldWeight = $request->getPackageWeight();
        $oldQty = $request->getPackageQty();
 
        $request->setPackageWeight($request->getFreeMethodWeight());
        $request->setPackageQty($oldQty - $freeQty);
 
        $result = Mage::getModel('shipping/rate_result');
        $rate = $this->getRate($request);
 
        $request->setPackageWeight($oldWeight);
        $request->setPackageQty($oldQty);
 
        if (!empty($rate) && $rate['price'] >= 0) {
            $method = Mage::getModel('shipping/rate_result_method');
 
            $method->setCarrier('tablerate');
            $method->setCarrierTitle($this->getConfigData('title'));
 
            $method->setMethod('bestway');
            $method->setMethodTitle($this->getConfigData('name'));
 
            if ($request->getFreeShipping() === true || ($request->getPackageQty() == $freeQty) || $setShippingFree) {
                $shippingPrice = 0;
            } else {
                $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']);
            }
 
            $method->setPrice($shippingPrice);
            $method->setCost($rate['cost']);
 
            $result->append($method);
        }
 
        return $result;
    }

Magento installation extension (connect error: unsupported resource type)

Kommt der Fehler „connect error: unsupported resource type“ im Downloader bei der Installation einer Extension kann folgende Datei verändert werden:

downloader/lib/Mage/Archive/Tar.php

1
const FORMAT_PARSE_HEADER = 'a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor/a155prefix/a12closer';

ändern in:

1
const FORMAT_PARSE_HEADER = 'Z100name/Z8mode/Z8uid/Z8gid/Z12size/Z12mtime/Z8checksum/Z1type/Z100symlink/Z6magic/Z2version/Z32uname/Z32gname/Z8devmajor/Z8devminor/Z155prefix/Z12closer';

Magento Extension für Data Upgrades über ein Update Script (z.B. bei Verwendung von git)

Im folgenden Beispiel schreiben wir eine kurze Extension, über die z.B. Kategorien angelegt werden oder CMS-Blöcke erstellt und geändert werden können usw. Dies verwendet man oft bei der Verwendung von git oder zur Bereitstellung von Daten für eigene Extensions.

Schritt 1 – Ordner Anlegen
app/code/local/M28visions/Cmsupdate/
app/code/local/M28visions/Cmsupdate/etc/
app/code/local/M28visions/Cmsupdate/data/
app/code/local/M28visions/Cmsupdate/data/cmsupdate_setup/

Schritt 2 – Dateien Anlegen
app/code/local/M28visions/Cmsupdate/etc/config.xml — enthält immer die Konfiguration einer Extension
app/code/local/M28visions/Cmsupdate/data/cmsupdate_setup/data-upgrade-1.0.0.0-1.0.0.1.php — enthält die update daten

app/etc/modules/M28visions_Cmsupdate.xml — am Ende erstellen, zum Aktivieren der Extension

Schritt 3 – Inhate

config.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <M28visions_Cmsupdate>
            <version>1.0.0.1</version>
        </M28visions_Cmsupdate>
    </modules>
    <global>
        <resources>
            <cmsupdate_setup>
                <setup>
                    <module>M28visions_Cmsupdate</module>
                </setup>
            </cmsupdate_setup>
        </resources>
    </global>
</config>

data-upgrade-1.0.0.0-1.0.0.1.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
/**
 * M28visions DeineTuer data upgrade script
 */
 
$this->startSetup();
 
/* UPDATE CMS BLOCK */
 
$content = '<h3 class="item" style="width:60px;">&nbsp;</h3>
<h3 class="item"><a href="/xxx.html?n1=new10#limit=20&mode=grid&order=price&dir=asc&p=1&cat[]=36&price[min]=63&price[max]=1096&dt_deliverytime[]=607"><img src="{{media url="wysiwyg/content/header_item2.png"}}" alt="" /></a></h3>
<h3 class="item"><a class="variousBox" data-fancybox-type="ajax" href="/opencmsblog?blog_identifier=option_service"><img src="{{media url="wysiwyg/content/header_item3.png"}}" alt="" /></a></h3>
<h3 class="item icon"><a href="https://www.xxx.de/shop/certificate.php?shop_id=4234" target="_blank"><img src="/media/wysiwyg/images/trusted_shop.png" alt="" /></a></h3>';
 
$block = Mage::getModel('cms/block')->load('header_spezials');
$block->setContent($content);
$block->save();
 
$this->endSetup();

M28visions_Cmsupdate.xml:

1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<config>
    <modules>
        <M28visions_Cmsupdate>
            <active>true</active>
            <codePool>local</codePool>
        </M28visions_Cmsupdate>
    </modules>
</config>

Magento neue Kategorie mit CMS Block hinzufügen (add category programmatically)

Im folgenden Beispiel möchte ich zeigen, wie man per Script einen Block und eine Kategorie erstellt. Dies macht man z.B. in einem Data-Script bei der Installation einer selbst geschriebenen Extension.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/* ########## CREATE BLOCK ############## */
 
$store = Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
 
// Category (Brands)
$content = 
'<table class="brand-table">'
  .'<tr>'
    .'<td><a href="{{store direct_url="marken/jeld-wen.html"}}"><img src="{{media_url="wysiwyg/brands/Jeld_Wen.jpg"}}" alt="Jeld Wen" /></a></td>'
    .'<td><a href="{{store direct_url="marken/laba.html"}}"><img src="{{media_url="wysiwyg/brands/Laba.jpg"}}" alt="Laba" /></a></td>'
    .'<td><a href="{{store direct_url="marken/karcher-design.html"}}"><img src="{{media_url="wysiwyg/brands/Karcher_Design.jpg"}}" alt="Karcher Design" /></a></td>'
  .'</tr>'
  .'<tr>'
    .'<td><a href="{{store direct_url="marken/kelan.html"}}"><img src="{{media_url="wysiwyg/brands/Kelan.jpg"}}" alt="Kelan" /></a></td>'
    .'<td><a href="{{store direct_url="marken/deine-tuer.html"}}"><img src="{{media_url="wysiwyg/brands/Deine_Tuer.jpg"}}" alt="Deine Tür" /></a></td>'
    .'<td><a href="{{store direct_url="marken/concept.html"}}"><img src="{{media_url="wysiwyg/brands/Concept.jpg"}}" alt="Concept" /></a></td>'
  .'</tr>'
  .'<tr>'
    .'<td><a href="{{store direct_url="marken/lenz-design.html"}}"><img src="{{media_url="wysiwyg/brands/LenzDesign.jpg"}}" alt="Lenz Design" /></a></td>'
    .'<td><a href="{{store direct_url="marken/piktura.html"}}"><img src="{{media_url="wysiwyg/brands/Piktura.jpg"}}" alt="Piktura" /></a></td>'
    .'<td>&nbsp;</td>'
  .'</tr>'
.'</table>';
 
$block = Mage::getModel('cms/block');
$block->setTitle('Marken');
$block->setIdentifier('brands');
$block->setStores(0);
$block->setIsActive(1);
$block->setContent($content);
$block->save();
$blockId = $block->getId();
 
 
/* ########## CREATE FIRST CATEGORY ############## */
 
$parentCategory = Mage::getModel('catalog/category')->load(2); // set your parent cat-id
$category = new Mage_Catalog_Model_Category();
$category->setName('Marken');
$category->setUrlKey('marken');
$category->setIsActive(1);
$category->setDisplayMode('PAGE');
$category->setLandingPage($blockId);
$category->setPageLayout('one_column');
$category->setCustomLayoutUpdate(
'<reference name="root">
    <action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
 
<catalog_category_default translate="label">
    <remove name="left"/>
</catalog_category_default>');
$category->setIsAnchor(0); //for active achor
$category->setStoreId($store);
$category->setPosition(1);
$category->setPath($parentCategory->getPath());
$category->save();
$parentId = $category->getId();
 
 
/* ########## CREATE BLOCK FOR SEC. CATEGORY ############## */
 
// Category (Brand: Jeld Wen)
$content = 
'<div class="teaser brands">
    <div><h3><b>Marken</b> | Jeld Wen </h3></div>
    <img src="{{media_url="wysiwyg/brands/Banner_Logo_Jeld_Wen.jpg"}}" alt="Jeld Wen" />
</div>';
 
$block = Mage::getModel('cms/block');
$block->setTitle('Marken - Jeld Wen');
$block->setIdentifier('brands_jeld_wen');
$block->setStores(0);
$block->setIsActive(1);
$block->setContent($content);
$block->save();
$blockId = $block->getId();
 
 
/* ########## CREATE SEC. CATEGORY ############## */
 
$parentCategory = Mage::getModel('catalog/category')->load($parentId);
$category = new Mage_Catalog_Model_Category();
$category->setName('Jeld Wen');
$category->setUrlKey('jeld-wen');
$category->setIsActive(1);
$category->setPosition(1);
$category->setDisplayMode('PRODUCTS_AND_PAGE');
$category->setLandingPage($blockId);
$category->setIsAnchor(1); //for active achor
$category->setStoreId($store);
$category->setPath($parentCategory->getPath());
$category->save();

Posts of Current Category



Facebook: