Magento webshop

From Edgar BV Wiki
Jump to navigation Jump to search

Getting started

De magento webshop is de webshop die we willen implementeren voor het webcmt. Deze webshop is een vervanger van het oudere E-commerce. Deze laatste heeft geen active community meer. Magento des te meer.

Toch blijkt ook Magento een hoop haken en ogen te hebben, vooral wanneer je nieuw bent met het systeem. Magento maakt gebruik van een moderne framework opbouw. Dat is mooi, maar wel even wennen.

Wanneer je aanpassingen moet gaan doen aan layout of scripts, begin dan met het lezen van onderstaande tutorial. Deze tutorial is vrij zwaar (vond ik zelf) en moeilijk om doorheen te komen. Het is echter wel een gedegen basis voordat je aan het werk gaat en compleet de weg kwijt raakt.

http://www.magentocommerce.com/design_guide


Installatie

Magento gebruikt een htaccess bestand. Hier enkele tips:

- DirectoryIndex niet activeren, geeft fout.



Admin?

Om in de admin van een systeem te komen ga je naar: ...basisurl webshop.../index.php/admin

Daar kun je inloggen. Mocht je login niet weten, probeer dan de volgende:

login: user pass: pass

of

login: user pass: pass


Updates en backups

Er komen regelmatig updates uit voor Magento. Wanneer je gaat updaten zijn er een aantal zaken die je altijd voor ogen moet houden:

- Maak ALTIJD backups van zowel de hele shop, als de database - Voer NOOIT een backup uit op een live shop

Backup maken

Eerst maken we dus een backup van de map. Dit doen we als volgt:

  1. Maak een kopie van de gehele shop map
  2. Ga in de gekopieerde map en browse naar: /app/etc/
    Verwijder daar het bestand "local.xml"

Vervolgens maken we een backup van de database. Dit doen we als volgt:

  1. Maak een lege database aan (waarin we een kopie van de bestaande database gaan plaatsen)
  2. Ga in de werkende (oude) shop naar het admin gedeelte en ga naar System -> Tools -> Backups
  3. Klik op Create Backup knop. Er wordt nu automatisch een backup gegenereerd
  4. Download de gegenereerde backup en zet deze ergens op je harde schijf. Pak het bestand uit met bijv. 7-zip.
  5. Importeer nu het SQL bestand in de nieuw aangemaakte lege database (via bijv. PhpMyAdmin)

Indien dit allemaal goed gegaan is, ga dan in je browser naar de install map van de nieuwe shop:

Bijv:
http://wip.tripnet.int/some_shop_backup/index.php/install/

Nu kun je onder andere de naam van de nieuwe database opgeven. Wanneer dit gebeurt is, controleer dan of we een werkende shop hebben. Zo ja: dan hebben we als het goed is nu 2 identieke shops. Op 1 ervan kunnen we nu de update gaan uitvoeren.

<b>LET OP:</b> Tot nu toe is mij dit nog niet gelukt. Ik krijg een blanco pagina wanneer ik de shop 
front aanroep. Verder doet de backoffice raar. Dit laatste komt doordat paden in de database niet kloppen. 
Ga daarom de database in en wijzig de paden in table "core_config_data" (2 stuks).

Upgraden

<b>LET OP:</b> Om een update uit te voeren moeten ALLE magento mappen en bestanden CHMOD 777 hebben. 
Later kun je dit eventueel weer terug zetten naar bijv. 755.

De daadwerkelijke upgrade gaat als volgt: ga naar de backoffice en naar System -> Magento Connect -> Magento Connect Manager

Vul daar in de input box het volgende in: magento-core/Mage_All_Latest

Wanneer je vervolgens op "Install" klikt, dan verschijnt er een zwart venster met groene tekst waarin allerlei updates en dergelijke automatisch worden gedownload en geinstalleerd.

Wanneer dit gedaan is en klikt op "Refresh" krijg je mogelijk een 404-pagina of iets dergelijks. Dit komt doordat Magento de .htaccess in de root van de shop heeft teruggeplaatst. Deze .htaccess heb ik standaard weggehaald omdat ik hem niet werkend krijg. Doe dit dus opnieuw (of wijzig de naam).

Vervolgens kun je als het goed is het systeem weer gebruiken. Heel veel template aanpassingen (in bestanden) zullen echter weer ongedaan gemaakt zijn. Kopieer daarom uit je backup map de volgende mappen terug naar de shop:

/app/design/frontend/default/

en

/skin/frontend/default/

Nu zou de shop weer helemaal moeten werken zoals hij eerst deed + eventuele fixes en updates.

Links

Handige links om erbij te houden zijn de volgende:

http://www.magentocommerce.com/design_guide (voor uitleg)

http://www.magentocommerce.com/boards (voor informatie en hulp)

http://www.magentocommerce.com/bug-tracking (voor bugs)

http://www.magentocommerce.com/magento-connect (voor extenties op het systeem)

http://www.dutchento.org (Nederlandstalige ondersteuning)


Belangrijk: Basis regels voor het maken van aanpassingen

Lees eerst de designer's guide to Magento !!

Wat je in feite al moet hebben begrepen uit de guide wil ik hier nog even herhalen. Stel je wilt de footers van een pagina verwijderen (zoals de shop-switch-dropdown en de linkjes onderaan de pagina).

Caching

LET OP: Magento is gebouwd in een framework. Dit framework cached voortdurent zijn content en layouts en dergelijke. Dit zorgt ervoor dat PHP ontlast wordt (de PHP onderdelen worden 1 keer geparsed en de volgende keer haalt hij de kant-en-klare HTML-pagina uit de cache). Dit is mooi, maar is erg irritant wanneer je aan het developen/designen bent.

Een voorbeeld: ik was op zoek naar de plek waar een bepaald stukje code werd uitgevoerd en zette daar een rode border omheen in CSS. Na een page-refresh gebeurde er niets en dus ging ik er vanuit dat dat niet het juiste onderdeel was. Achteraf bleek dit echter door de caching te komen (hij liet mijn wijziging simpelweg niet zien.

De oplossing: ga ALTIJD als je gaat developen/designen naar Admin -> System -> Cache Management Selecteer daar "All cache" -> Disable (of vink handmatig alle vinkvakjes uit). Na opslaan is je cache uit. Zet dit achteraf wel weer even aan.

Template path hints

Eerst willen we weten waar deze content te vinden is. Ga daarom naar [i]admin->system->configuration->developer[/i] Selecteer links boven de "main website" of een andere website of shop. Nadat de pagina herladen is klik je op "Debug". Je ziet daar een dropdown met "Template Path Hints". Zet deze op "Yes" en klik op opslaan.

Wanneer je nu de website herlaad krijg je per blok te zien waar dit te vinden is. In het geval van de footer zie je dat dit zich gewoon in het hoofdblok bevind; bijv: "frontend/default/default/template/page/2columns-right.phtml" Dit bevindt zich in "/app/design/". Browse dus naar: "/app/design/frontend/default/default/template/page/2columns-right.phtml"

Een eigen template maken

Magento gebruikt een layered template systeem. Dit betekend dat wanneer je een eigen template maakt, deze niet alle onderdelen hoeft te bevatten. De onderdelen die missen vult magento aan vanuit de default template. Default template MAG JE DUS NIET VERWIJDEREN (of aanpassen zoals verderop ook gemeld).

Belangrijk! Let op: Het gedeelte in bovenstaand path voor het woord "template" geeft aan in welke template het bestand staat. M.a.w.: "frontend/default/default/template/page/2columns-right.phtml" betekend dus dat het bestand uit de "default" template geladen wordt. De default template is echter een onderdeel van de CORE van Magento. We willen NOOIT de core van Magento aanpassen!!!. Deze wordt namelijk overschreven bij een eventuele update en dan zijn we dus onze wijzigingen weer kwijt!

Wat doen we dan wel? We maken altijd een eigen template aan (in het geval van Tchai International heb ik een "tchai" template aangemaakt. Doe dat als volgt: Maak in de map "app/design/frontend/default/" een map "tchai" (of iets anders) aan. Die mapnaam is de naam van je template (onthoudt dat!). Vervolgens ga je naar "/skin/frontend/default/" en ook daar maken we een map "tchai" aan (of de andere naam die je hebt gekozen). Deze moeten altijd allebei bestaan.

We hebben nu een template "tchai" aangemaakt. Ga vervolgens naar de admin->System->Configuration->Design. Klik links bovenin vervolgens de juiste laag aan waarvoor we de nieuwe template gaan instellen (default, main website of een bepaalde store). Als de pagina herladen is geef je vervolgens in het veld "default" (het onderste veld) de naam van je template op. (Ik kan me overigens voorstellen dat in latere versies van Magento het veld "default" niet meer zo heet, maar bijv. "template". Dit moet je zelf even uitvinden... bij mijn versie heet het nog "default".)

Als je dit opgeslagen hebt dan kunnen we onze template gaan (uit)bouwen.

We hebben nu een lege nieuwe template. Je KAN er natuurlijk ook voor kiezen om een compleet eigen template op te bouwen door bijv. een bestaande template map te kopieren en deze helemaal te verbouwen. De methode die ik hier beschrijf is echter een stuk makkelijker.

We wilden namelijk nu dus het bestand "/template/page/2columns-right.phtml" uit de default template aanpassen. Maak daarom in de map "/app/design/frontend/default/jouw_template/" de mappen "/template/page/" aan. Kopieer daar naartoe nu het bestand "2columns-right.phtml". Vervolgens kun je dit bestand helemaal aanpassen.

Op deze manier passen we dus alles aan (css, php, whatever): eerst kopieren naar je eigen template. Daarna pas aanpassen.

Onderdelen aanpassingen

Goed we gaan verder met het verwijderen van de footer:

Open bovenstaand bestand. Comment vervolgens bijv. stukjes PHP-code uit om te kijken of je het deel hebt dat we zoeken. In het geval van de footer zoeken we het stukje: <?php echo $this->getChildHtml('footer') ?>

In principe zou je nu simpelweg dit stukje PHP code kunnen uitcommenten en het daarbij laten, of het hele stukje HTML incl. php-code kunnen verwijderen. Dat is een mogelijkheid. Je kunt er echter ook voor kiezen om de footer wel te bewaren voor het geval je later bijv. toch iets daar kwijt wilt (zoals Developed by XXX).

In dat geval gaan we verder: "getChildHtml('footer')" betekent namelijk dat een stukje XML-code aangeduid met 'as="footer"' wordt ingeladen. Waar kunnen we dit stukje XML code dan vinden? Als we opnieuw kijken naar de template hints in de pagina zien we het volgende:

frontend/default/default/template/[b]page[/b]/2columns-right.phtml

Het woordje "page" is wat we zoeken. Dit betekent namelijk dat de content komt uit het bestand

frontend/default/default/layout/page.xml

Open dit bestand en zoek naar het stukje 'as="footer"'. Binnen dit stukje XML code zie je een aantal andere blokken aangeduid staan, zoals de store-switch-dropdown. Comment de code uit of verwijder het en je footer is leeg.

Layout updates en static blocks

Note: Ik gebruikte zelf een template waarbij bovenstaande niet helemaal werkte. De store-switch en een aantal links verdwenen wel, maar er bleven ook nog een paar links in de footer staan.

Een deel van de overgebleven links kwamen namelijk uit een static block. Ga naar Admin -> CMS -> Static Blocks. Daar stond bij mij een item met identifier "footer_links". Disable die en er verdwijnen weer 2 links. Vervolgens bleef er echter nog een "report all bugs" link over. Waar die vandaan komt weet ik niet.

Uiteindelijk heb ik dus alsnog gewoon het stukje PHP code uitgecommend in 2columns-right.phtml die de hele footer aanroept.


TESTING

Master card Creditcard

Om een bestelling te testen kunnen we het gebruik maken van een nep Mastercard nummer. Naam / validate / security number en overige gegevens kan je naar wens invullen, maar werkend creditcardnummer is:

- 5490 1234 5678 9128


Moving Magento to an other server

Moving Magento to another server

http://www.magentocommerce.com/wiki/groups/227/moving_magento_to_another_server


Removing all orders from the database

Source: http://www.johnroa.net/2009/01/28/magento-how-i-lovehate-thee/


This should do it, it requires the database to use relations etc:

TRUNCATE `customer_entity`;
TRUNCATE `report_event`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_order`;
TRUNCATE `tag`;
TRUNCATE `wishlist`;
TRUNCATE `catalogsearch_query`;
TRUNCATE `sendfriend_log`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
TRUNCATE `log_quote`;


Else this is another method:

SET FOREIGN_KEY_CHECKS=0;TRUNCATE `catalogsearch_query`;  -- added
 
TRUNCATE `catalogsearch_result`;  -- added
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`; -- added
TRUNCATE `sales_flat_quote_shipping_rate`; -- added
TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_tax`;  -- added
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `wishlist_item`;  -- added
-- reset customers
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
-- Reset all ID counters
-- Some payment gateways need a unique transaction reference for every order,
-- reseting your order ID may result in future transaction errors!
-- (so only do this if you are sure it wont be a problem)
-- TRUNCATE `eav_entity_store`;
SET FOREIGN_KEY_CHECKS=1;


Removing all products from the database

TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;

TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;

insert  into `catalog_product_link_type`(`link_type_id`,`code`) values (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
insert  into `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) values (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
insert  into `cataloginventory_stock`(`stock_id`,`stock_name`) values (1,'Default'); 


Removing all categories from the database

TRUNCATE TABLE `catalog_category_entity`;
TRUNCATE TABLE `catalog_category_entity_datetime`;
TRUNCATE TABLE `catalog_category_entity_decimal`;
TRUNCATE TABLE `catalog_category_entity_int`;
TRUNCATE TABLE `catalog_category_entity_text`;
TRUNCATE TABLE `catalog_category_entity_varchar`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;

insert  into `catalog_category_entity`(`entity_id`,`entity_type_id`,`attribute_set_id`,`parent_id`,`created_at`,`updated_at`,`path`,`position`,`level`,`children_count`) values (1,3,0,0,'0000-00-00 00:00:00','2009-02-20 00:25:34','1',1,0,1),(2,3,3,0,'2009-02-20 00:25:34','2009-02-20 00:25:34','1/2',1,1,0);
insert  into `catalog_category_entity_int`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) values (1,3,32,0,2,1),(2,3,32,1,2,1);
insert  into `catalog_category_entity_varchar`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) values (1,3,31,0,1,'Root Catalog'),(2,3,33,0,1,'root-catalog'),(3,3,31,0,2,'Default Category'),(4,3,39,0,2,'PRODUCTS'),(5,3,33,0,2,'default-category'); 

Kleding maten

Wat doen we met kleding maten in Magento. We moeten rekening houden met de verschillende maten van kledingstukken, en de bijbehorende voorraad daarbij.


Op de volgende website staat uitgelegd hoe we producten kunnen maken waarbij bv. maten bijgehouden worden. Wat we doen is: simple products toevoegen die niet getoond worden in de lijsten, en dan een configurable product maken waar de verschillende maten / kleuren / types onder vallen.

http://webshop-conversion.com/2009/07/24/how-to-create-configurable-products-in-magento/