stavímednes.cz
Realizace: 2013
Verze shopu: 1.5.2
Provedené úpravy:
- zalomení dodaného designu
- úpravy zdrojového kodu Prestashop podle zadání majitele
Hostováno: prestahost.cz
Zákazník: Okenní a stavební centrum
Co je na webu zajímavého
zbo?í, například li?ty lze nakupovat na metry včetně desetin, eshop správně vypočítává celkové součty. Tak?e pokud si zákazník koupí 2 ks li?ty 1.6 m dlouhé, eshop sečte délky a v ko?íku se objeví celková délka 3.2 m. Celkově je eshop slu?ně přizpůsoben na prodej zbo?í po kusech, metrech či balení...
Problém se příle?itostně objevuje po upgrade eshopu, případně přechodu na Prestashop z jiného systému. Obvyklé příznaky:
- dříve registrovaní zákazníci se nemohou přihlásit
- zbo?í přidané do ko?íku záhadně mizí
- často se děje jen na Google Chrome a/ nebo IE
Na toto téma jsou dohledatelná relevantní vlákna na prestashop foru, která vesměs ústí v doporučení "sma?te cookies" případně "přesměrujte doménu na jiný tvar.
Problém je způsobený chováním cookies - cookie nastavená pro doménu bez subdomény (tj. pro tvar mojedomena.cz) je rozpoznána i na subdoménách (tedy např. na www.mojedomena.cz) a zmate prohlí?eč. Domníval jsem se ?e toto mů?e vzniknout jen pokud byl obchod dříve provozován na doméně bez www a po upgradu pře?el na tvar s www, ale není to tak. Minimálně v prestashop 1.5.2 a pravděpodobně i v dal?ích je chyba která věc dost komplikuje:
Přesvědčil jsem se o tom na vlastní oči sledováním cookies v Chrome. Ruční odstranění cookie pro tvar bez www okam?itě zfunkčnilo jak registraci tak ko?ík.
Ře?ení
je potřeba o?etřit 2 odli?né problémy
a) zabránit nastavení chybné cookie. K tomu je nutné aby k přesměrování do?lo dříve ne? to udělá eshop. Ře?ením je dopsat 2 řádky do souboru .htaccess který najdete v rootu svého eshopu, hned za RewriteEngine on:
RewriteCond %{HTTP_HOST} ^mojedomena.cz
RewriteRule (.*) http://www.mojedomena.cz/$1 [R=301,L]
webový server pak po?adavky přesměruje je?tě dříve ne? se k nim dostane engine presty
b) postarat se o u?ivatele kteří ji? chybnou cookie mají. To je trochu komplikované tím ?e prestashop si cookie ?ifruje. Jméno cookie je na?těstí ?ifrováno poměrně jednodu?e a hlavně pro v?echny u?ivatele stejně. Zjistit se dá např. v Chrome - otevřte si eshop na doméně bez www (pochopitelně předtím ne? jste provedli úpravy v .htaccess, nevadí ale pokud Vás při tom přesměruje presta na tvar s www ). Pak v Chrome - ikonka v pravém rohu - Nastavení .... dole Zobrazit roz?ířená nastavení .... Ochrana soukromí .... Nastavení obsahu ... V?echny soubory cookie a data z webu
v okně které se otevře je v pravo nahoře vyhledávací pole do kterého zadejte prvních několik písmen ze jména domény (bez www). Měly by se zobrazit cookie jak pro doménu s www tak bez www, zajímá Vás cookie pro doménu bez www. Její jméno bude nějaký nepříli? hezký očividně nesmyslný řetězec - a právě ten je potřeba okopírovat. Pak u? stačí vytvořit soubor FrontController.php:
<?php
class FrontController extends FrontControllerCore
{
public function init()
{
global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency;
if(isset($_COOKIE['9963c4e1fb4770546fb795abf44b4b34'])) {
$time=mktime()-86400;
setcookie('9963c4e1fb4770546fb795abf44b4b34', '', $time, '/', 'mojedomena.cz', 0, true);
}
parent::init();
}
}
- vytvořte soubor v čistém textovém editoru jako je např. pspad
- místo mojedomena.cz napi?te jméno Va?í domény bez www
- místo "9963c4e1fb4770546fb795abf44b4b34" pou?ijte nalezené jméno cookie
- hotový soubor nakopírujte do adresáře /override/classes/controller pod jménem FrontController.php
- pravděpodobně bude potřeba smazat soubor /cache/class_index.php
- pokud se při přidání zbo?í do ko?íku objeví zpráva "text status parse error" nebo web vůbec nefunguje odstraňte z upraveného FrontController v?echny mezery za poslední závorkou a přesvěčte se ?e pou?íváte skutečně čistý textový editor, který si nepřidává ?ádné řídící znaky
Summary: Cookies, customer login and cart problems in Prestashop:
if the shop domain is www.mydomain.com, the problem is most likely caused by cookie set for the domain mydomain.com (not containing www)
- redirect to the www.mydomain.com already in .htaccess, this prevents prestashop from accidentally setting the wrong "no www" cookie
- find out the encrypted "no www" cookie name using Chrome browser
- use the name to delete the unvanted cookie in the overriden FrontController class (this help customers with the browser already "infected" by the wrong cookie
Procházet mezi produkty, přepínat taby a upravovat například ceny nebo attributy zbo?í jeden po druhém mů?e být docela zdlouhavé. Ře?ení je několik.
Quickupdate modul pro Prestashop
Instalace
Modul si při instalaci překopíruje část souborů do adresáře /admin, co? je případně potřeba zkontrolovat.
Spu?tění
Po instalaci se QuickUpdate objeví v menu pro rychlý přístup, které je umístěno v horním pruhu administrace vedle hledání. Kliknutím se dostanete do samostatné, podle mého názoru velmi dobře ře?ené obrazovky pro rychlou editaci. Jedná se o formu přehledné editovatelné mří?ky. Práce je velmi rychlá a pohodlná.
Pou?itelnost ve verzi 1.5
Modul lze instalovat a je i částečně funkční. Pro dal?í zprovoznění bylo potřeba provést několik zásahů do zdrojového kodu, ty nebyly slo?ité, ale poměrně dost času si vy?ádalo se v modulu vůbec zorientovat. Po těchto modifikacích modul umo?ňuje plnohodnotnou editaci kombinací (attributů) zbo?í včetně jejich cen, co? byl důvod pro který je pořízen. Je pravděpodobné ?e zprovoznění dal?ích funkcí modulu (např. nahrávání obrázků) by si vy?ádalo dodatečné zásahy.
Celkové hodnocení
plus
minus
Modul zbo?í respektive Srovnávače zbo?í - export (heureka.cz, zbozi.cz) pro 1.5 se dočkal výrazné předělávky zaměřené na 2 zásadní problémy
a) dostupnost zbo?í
b) párování s kategoriemi Heureka
Dostupnost zbo?í
Asi před půl rokem se v modulu objevila funkce parsování čísel z textové dostupnosti, tedy textu který se zadává v kartě produktu, na podkartě mno?ství: zobrazovaný text, pokud je skladem . Podobná funkce je nezbytná u? z toho důvodu ?e Heureka i Zbo?í jsou na údaje o dostupnosti velmi citlivé. Nicméně nastavení bylo poněkud nepru?né a ne ka?dý chce psát do textu číslovky. Proto se modul dočkal vylep?ení:
Heureka kategorie
Stará bolest řady u?ivatelů Prestashopu, přitom přesné spárování mů?e výrazně zvednou prodej. Na očividné ře?ení mě přivedl jeden klient. Pokud do nějakého jinak nevyu?itého pole v administraci zbo?í zadáte číslo kategorie, objeví se pro produkt ve feedu CATEGORYTEXT přesně podle fullname z Heureky.
Pochopitelně je na modulu je?tě hodně věcí které by si zaslou?ili vylep?it. Řadu z nich mám v plánu, nevím ale jak mi to časové mo?nosti dovolí. Nicméně pokud si stáhnete novou verzi modulu a zjistíte ?e nefunguje něco co očividně fungovat má, napi?te na info[zavináč]prestahost.cz, pokud to jen trochu půjde, opravím.
V Prestashop 1.4 existoval jednoduchý trik jak v administraci zpřístupnit popelnici na mazání objednávek. V nověj?í verzi 1.5 lze tého? výsledku dosáhnout hůře. Původně jsem se domníval ?e je to velmi jednoduché. Na prestashop foru je tomuto problému věnována řada postů které končí tvrzením "přidejte jeden řádek s delete".
Nicméně věci jsou slo?itěj?í, alespoň v Prestashop 1.5.6 . Nevím zda je to záměr, proto?e mazat objednávky mů?e být v rozporu s pravidly EU, v ka?dém případě takto přidaná akce "deleteorder" sma?e jen vlastní objednávku bez přidru?ených záznamů. Důsledek? V následných objednávkách se mohou náhodně objevovat extra produkty pocházející právě ze smazaných objednávek. Jinými slovy, pokud nechcete mít v objednávkách zbo?í které si zákazník neobjednal, postupujte takto:
<?php
class AdminOrdersController extends AdminOrdersControllerCore
{
public function __construct()
{ $this->addRowAction('delete');
parent::__construct();
}
}
<?php
class Order extends OrderCore {
public function delete() {
$result=parent::delete();
if($result) {
$this-> deleteAssociations();
}
return $result;
}
}
Summary: deleting orders in Prestashop 1.5.6
Deleting orders is not supported in Prestashop and merely adding the delete action may result in unwanted extra products in successive orders. To delete orders safely, you need to override both /override/controllers/admin/AdminOrdersController.php and /override/classes/orders/Order.php