Archiv für Kategorie Magento
Magento B2B Lösung
Da einer der Shops die ich betreibe ein reiner Business to Business ist ergab sich für mich das Problem das nur nicht registrierte Kunden ausser die Login Maske sehen sollten.
Ich hab mir als erstes die Extension von Sitewards installiert aber diese ging mir nicht weit genug…
Mein Wunsch war eben das der Besucher gleich zum Login geleitet wird und keine Preise oder Kategorie-Menü sieht. Die Kunden bekommen in diesem Fall die Zugangsdaten über die Admin angelegt und zugeschickt.
Folgende Änderungen hab ich dafür vorgenommen:
index.php
/**
* Magento
*
* NOTICE OF LICENSE
*
....
*/
umask(0);
Mage::run('default');
if (!Mage::getSingleton('customer/session')->isLoggedIn() && strpos($_SERVER['REQUEST_URI'],'admin') == 0 && strpos($_SERVER['REQUEST_URI'],'customer/account/login/') == 0)
{
if($_SERVER['https'] == 'on')
$https = 'https://';
else
$https = 'http://';
header('Location: '.$https.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'/customer/account/login/');
}
Und in meinem Template Verzeichnis die Datei:
catalog/navigation/top.phtml
<div class="header-nav-container">
<div class="header-nav">
<?php
if (Mage::getSingleton('customer/session')->isLoggedIn()){
?>
<h4 class="no-display"><?php echo $this->__('Category Navigation:') ?></h4>
<ul id="nav">
<?php foreach ($this->getStoreCategories() as $_category): ?>
<?php echo $this->drawItem($_category) ?>
<?php endforeach ?>
</ul>
<?php
}
?>
</div>
<?php echo $this->getChildHtml('topLeftLinks') ?>
</div>
/*...*/
Danach habe ich noch einen CMS Block angelegt (Seitenbezeichner “bitteeinloggen”) und diesen per XML über das Login Formular gesetzt.
layout/customer.xml
Layout for customer login page
-->
<customer_account_login>
<!-- Mage_Customer -->
<remove name="right"/>
<remove name="left"/>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block type="cms/block" name="contacts">
<action method="setBlockId"><block_id>bitteeinloggen</block_id></action>
</block>
<block type="customer/form_login" name="customer_form_login" template="customer/form/login.phtml"/>
</reference>
</customer_account_login>
Magento und die liebe Geschwindigkeit

Altes Problem mit Magento ist leider die Geschwindigkeit…….. dachte ich aufjedenfall bis gestern
Cache in der Admin aktivieren ist ja logisch dazu noch die üblichen Anpassungen durchführen:
1. Mysql:
key_buffer = 512M max_allowed_packet = 64M table_cache = 512 sort_buffer_size = 4m read_buffer_size = 4m read_rnd_buffer_size = 2m myisam_sort_buffer_size = 64m tmp_table_size = 128m query_cache_size = 96m query_cache_type = 1 thread_cache_size = 8 max_connections = 400 wait_timeout = 300
2. APC oder XCache
APC – http://pecl.php.net/package/APC
Xcache – http://xcache.lighttpd.net/
Ich hab beide getestet und keinen deutlichen unterschied gemerkt. APC gefällt mir aber doch besser.
3. Cache in tmpfs auslagern:
mount -t tmpfs -o size=256M,mode=0744 tmpfs /var/...../magento/var/cache
4. Fooman Speedster Magento Connect Extension
Das hat wirklich viel gebracht.. hätte es nicht gedacht
*klick*
5. Gzip Datenübertragung
Ich hab es per PHP in der index.php gelöst:
<?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();
...
Geht aber auch per .htaccess… *klick*
Zum Testen:
Zum testen gibt es auch X Tools ich hab Firefox mit Firebug Extension mit dem Google Speed Plugin verwendet.
Ich hoffe es hilft jemand
Neuer Daunendecken Shop
Nun heute ging endlich der neue Daunendecken/Eiderdaunen Shop der Firma Betten-Stumpf online. Fast 2 Monate haben wir an dem Shop gearbeitet. Ein paar kleine Fehler sind zwar immernoch vorhanden aber da jetzt die Weihnachtsgeschäfte losgehen wollten wir nicht noch länger warten!
Was neu dazu gekommen ist sind die neuen Bezahlmöglichkeiten:
- GiroPay
- Lastschrift
- Nachnahme
- Kreditkarte – Hier warten wir leider noch auf die passende Freischaltungen
- Vorkasse ( 3% Skonto!!)
- Paypal
So sollte doch nun jeder eine Bezahlmöglichkeit finden.
Weiter habe ich eine Eiderdaunen Informationsseite erstellt. Welche einen kurzen Einblick über das Thema bietet.
So werden noch ein paar weitere Seiten wie luxus-daunendecke.de (Welches die Vorteile einer guten Daunendecke erklärt) und Bunte-Daunendecken.de (Alte aber wunderschöne Art der Daunendecke)
daylight innovations
Juhu endlich wieder ein Projekt Online!! Jetzt kann ich mit der SEO-Arbeit anfangen und dann hoffen wir mal das es viel Umsatz gibt. Über Fragen oder Anregungen zur Seite würd ich mich freuen!
Tageslichtröhren – Kostenloses Tageslicht Nutzung!!
Zur Technik: Als Basis diente hier Magento mit dem Default Theme. Angepasst wurde natürlich ein bischen das Theme und Skin. Das tolle ist aber: Endkunden wie Unterpartner können über die Seite bedient werden. Über die Kundengruppe unterscheidet Mangeto welche Preise und Texte angezeigt werden sollen. Für die Unterpartner gibt es noch eine Fachhändler Lounge in der sie Unterlagen, Zeichnungen, Bilder und Einbauanleitungen zum Download finden.
Jetzt wird sich der Magento Profi wie macht er das aber im frontend. Tjaaa mit 2 StoreViews logischerweise. Aber wie macht der gute Steven das je nach Kundengruppe ein anderer Storeview angezeigt wird? Ganz einfach ich hab mir in der index.php einen kleinen “StoreSwitch” eingebaut.
{
$is_store_id = Mage::app()->getStore()->getId();
$kunden_gruppe = Mage::getSingleton('customer/session')->getCustomerGroupId();
if($kunden_gruppe > 0)
{
switch ($kunden_gruppe)
{
// endkunde
case 1:
$store_id = 1;
$store_name = 'default';
break;
// fachhändler
case 3:
$store_id = 4;
$store_name = 'unterpartner_deutsch';
break;
}
}else{
$store_id = 1;
$store_name = 'default';
}
if($is_store_id != $store_id)
{
if(isset($_SERVER['HTTPS']))
$protokoll = 'https://';
else
$protokoll = 'http://';
header('Location: '.$protokoll.$_SERVER['HTTP_HOST'].'/?___store='.$store_name);
}
}
So wechselt er den Storeview und prüft das auch auf jeder Seite. Bis jetzt hab ich damit noch keine Probleme. Mal schauen wen es aktivier genutzt wird.
Magento
Je mehr ich mich mit Magento beschäftige desto mehr werde ich Fan davon. Der Daylight Shop ist fast fertig und wird in den nächsten 1-2 Wochen online gehen einer der Autohändler Seiten habe ich angefangen. Hier war das Problem das wir aus einem Alten Shop-System die Daten (ca. 1000 Artikel in 50 Kategorien, ca. 4000 Kunden) übernehmen mußte. Dies ging leider nicht wirklich über Export/Import da kein vernüfiges Format gefunden werden konnte.
Jetzt stand ich vor dem Problem wie übernehme ich die Daten aus dem alten Shop in den neuen. Magento bietet für solche Zwecke unteranderem eine tolle API.
Beispiel für Artikel:
$sessionId = $proxy->login('USER', 'PW');
$attributeSets = $proxy->call($sessionId, 'product_attribute_set.list');
$set = current($attributeSets);
foreach ($export_array as $key=>$elem)
{
$de = $elem[1];
$en = $elem[2];
$newProductData = array(
'name' => $de['name'],
// websites - Array of website ids to which you want to assign a new product
'websites' => array(1), // array(1,2,3,...)
'short_description' => $de['desc'],
'description' => $de['desc'],
'price' => $de['preis'],
'code' => $de['code'],
'weight' => 1.000,
'tax_class_id' => 1,
'status' => 1
);
// Create new product
$proxy->call($sessionId, 'product.create', array('simple', $set['set_id'], $de['number'], $newProductData));
/**
* Englischen Namen und Desc anlegen
*/
$proxy->call($sessionId, 'product.update', array($de['number'], array('name'=>$en['name'],'description' => $en['desc'],'short_description' => $en['desc']), 'english'));
/**
* Bild
*/
if(strlen($de['pic']) > 0)
{
$newImage = array(
'file' => array(
'content' => base64_encode(file_get_contents($de['pic'])),
'mime' => 'image/jpeg'
),
'label' => '',
'position' => 1,
'types' => array('small_image','image','thumbnail'),
'exclude' => 0
);
$imageFilename = $proxy->call($sessionId, 'product_media.create', array($de['number'], $newImage));
}
/**
* Empfehlung
*/
$proxy->call($sessionId, 'product_link.assign', array('related',$de['number'],$de['empfehlung'], array('position'=>0, 'qty'=>1)));
/**
* Mit Kategorie verknüpfen
* Diese wird im anderen Beispiel erst angelegt und die neue id gespeichert.
*/
$proxy->call($sessionId, 'category.assignProduct', array($de['magento_id'],$de['number']));
}
und das gleiche noch für Kategorieren
$sessionId = $proxy->login('USER', 'PW');
foreach ($menue as $key=>$elem)
{
$newCategoryId = $proxy->call(
$sessionId,
'category.create',
array(
67, // root kategorie
array('name'=>$elem[1]['name'],'is_active'=>1,'available_sort_by' => 'name','default_sort_by' => 'name')
)
);
$newData = array('name'=> $elem[2]['name'],'is_active'=>1);
$proxy->call($sessionId, 'category.update', array($newCategoryId, $newData, 'english'));
foreach ($elem['menue'] as $key2=>$elem2)
{
$newCategoryId2 = $proxy->call(
$sessionId,
'category.create',
array(
$newCategoryId,
array('name'=>$elem2[1],'is_active'=>1,'available_sort_by' => 'name','default_sort_by' => 'name')
)
);
$newData2 = array('name'=> $elem2[2],'is_active'=>1);
$proxy->call($sessionId, 'category.update', array($newCategoryId2, $newData2, 'english'));
$sql="UPDATE itemgrinfo SET magento_ID = ".$newCategoryId2." WHERE itemgrID = ".$elem2['itemgrID'];
mysql_query($sql,$conn_source);
}
}
Ich bin aufjedenfall total begeistert wie Easy das ging und das ich mir viel viel viel arbeit dadurch erspart habe

