
Prestashop v1.2.0.5 - demo pentru Toma
Pe scurt:
Un camarad într-ale Prestashop-ului m-a rugat să îi explic cum încarc imaginile cu forţa în baza de date şi m-am gândit că poate mai foloseşte şi altcuiva. Pe scurt e cam aşa:
- importul produselor din fiÅŸier .csv (la câmpul “image url” pui “Ignore this column”)
- upload-ul imaginilor cu numele corect în folderul “/images/p/”
- compunerea ÅŸi importul tabelului ps_image
- compunerea ÅŸi importul tabelului ps_image_lang
- Back Office > Preferences > Image > Regenerate thumbnails
Ce este Prestashop? (scurtă introducere)
Este un script PHP pentru comerÅ£ on-line, a cărui caracteristică principală (pentru mine!) este uÅŸurinÅ£a cu care poate fi modificat. Nu mă refer doar la tema grafică – deÅŸi aici m-am convertit eu -, ci ÅŸi la cod. Plus că permite crearea unui magazin electronic cu cod curat ÅŸi valid fără să schingiuiesc fiÅŸierele ca în osCommerce sau să studiez API-uri sau alte limbi chineze ca în Magento. Ca să o comparaÅ£ie, osCommerce este un dinozaur (chiar dacă unul agil), Magento este o balenă, iar Prestashop… să zicem un câine. ÃŽmi plac câinii, nu mă interesează dacă se ofuschează cineva. ÃŽmi plac ÅŸi programele care fac ce le zic (alt exemplu ar fi MODx, cine ÅŸtie cunoaÅŸte).
Are următoarele cerinţe (citez din explicaţiile lor):
- Linux, Unix sau Windows
- Web Server (Apache 1.3 sau mai nou, IIS 6 sau mai nou)
- PHP 5.0* sau mai nou
- MySQL 5** sau mai nou
* Unele versiuni de PHP 5 au probleme şi împiedică funcţionarea corectă a PrestaShop:
- PHP < 5.2 (fus orar cu dată invalidă)
- PHP 5.2.1 (autentificarea este imposibilă)
- PHP 5.2.6 (autentificarea este imposibilă pe serverele pe 64 de biţi)
- PHP 5.2.9 (administrarea şi încărcarea imaginilor nu funcţionează)
** PrestaShop funcţionează şi cu MySQL versiunea 4.1.14 până la 5.0, dar unele facilităţi nu funcţionează (de ex., duplicarea produselor) sau au comportamente stranii
Nimic extraordinar. Merge foarte bine şi pe un server partajat (shared hosting, cum ar veni). Magento strâmbă din nas fără server dedicat. Nu zic că nu merge, dar se mişcă cu un dispreţ evident faţă de firmele mici. Ce îl mai deosebeşte de Magento sunt cerinţele de cunoştinţe ale utilizatorului (mă refer aici la cel care vrea să instaleze un magazin electronic, nu la cel care îl foloseşte). Şi anume, nu prea mari.
Se miÅŸcă rapid, are cod valid ÅŸi poate fi modificat uÅŸor – ce mai vrei?
Lasă vorbăria, care-i treaba cu pozele alea?

Facilitatea de import produse din fişier .csv în Prestashop
Prestashop are o facilitate de import al produselor dintr-un fişier .csv (comma separated values). În teorie, faci un tabel cu datele fişierelor îl încarci pe server şi îl imporţi din Back Office (interfaţa de administrare). Practic însă pot să apară probleme legate mai ales, din câte am văzut, de permisiunile de care este nevoie pentru manipularea fişierelor pe server. Şi pe serverele partajate asta-i o problemă mare de versiunea de PHP de pe server (în cazul meu, 5.2.9).
Concret, tabelul cu datele produselor (fişierul .csv) are o rubrică pentru calea imaginii principale pentru fiecare produs. Teoretic, este suficient să pui tabelul şi imaginile pe server, iar Prestashop le ia şi le transformă într-un catalog de toată frumuseţea. Nu spun că nu se poate, eu însă, până să rezolv chestiunea, am găsit o variantă mai potrivită cu un om leneş ca mine.
Atenţie! E treaba voastră cum folosiţi ce citiţi aici (şi în orice altă parte, că veni vorba), nu accept nicio responsabilitate pentru diversele nenorociri care credeţi că vă lovesc din cauza articolului meu. Sunteţi oameni în toată firea, fiţi responsabili! Faceţi backup!
Definiţia problemei:
Importul datelor produselor merge foarte bine, primeÅŸti un mesaj de genu’ “Gata, ÅŸefu’, să trăiÅ£i, am terminat!” ÅŸi intri în front-end sau în catalogul din Back Office, după caz, ca să te bucuri de opera ta. Stupoare! Pozele nu-s! Åži asta se combină cu facilitatea din Prestashop care înlocuieÅŸte cu o imagine generică imaginile lipsă. Arghhh!
Rezolvare? Nu. Da’ funcÅ£ionează!
Am încercat ÅŸi eu să lămuresc serverul: “Haidi, bre, neÅŸte poze acolea!” Serverul, nu ÅŸi nu. AÅŸa că dacă nu poÅ£i lămuri infractorul, baÅ£i victima (traiul în România te face creativ).
Victima în acest caz este Prestashop, baza de date mai exact.
Tabelele ps_image şi ps_image_lang conţin legăturile dintre produse şi imagini, respectiv imagini şi legenda lor (sau titlul sau explicaţia). Prefixul ps_ este dat implicit de Prestashop, dacă aţi modificat această configurare la instalare ţineţi cont.
Am fost foarte uimit să aflu că nu există un tabel în care să se salveze calea imaginii corespunzătoare unui produs, cum e de exemplu în osCommerce sau Magento. Asocierea între produs ÅŸi imaginea lui se face prin numele produsului – indiferent ce nume ar avea fiÅŸierul ce conÅ£ine imaginea, Prestashop îl redenumeÅŸte după modelul “IDprodus-IDimagine.jpg“. Sistemul simplifică codul ÅŸi impune un anumit grad de organizare. Vestea proastă este că pentru a găsi o anumită imagine trebuie să ai la îndemână un tabel cu numele ÅŸi ID-urile imaginilor. Mie îmi convine.
Toate legăturile între imagini sunt în cele două tabele, astfel:
ps_image
ÃŽn ps_image sunt 4 câmpuri (sau coloane), dintre care doar primele două contează, id_image ÅŸi id_product, pentru că fac joncÅ£iunea între produse ÅŸi imagini. Ca să simplific problema, am decis ca produsul să aibă acelaÅŸi ID cu imaginea sa. Astfel, imaginea produsului cu ID-ul 1 va fi fiÅŸierul “1-1.jpg”, a produsului cu ID-ul 34 va fi fiÅŸierul “34-34.jpg”, ÅŸ.a.m.d. Cred că ai prins ideea. Cand sunt mai multe imagini pentru un singur produs se complică treaba, cel mai simplu e să termini cu imaginile principale ÅŸi să continui după aceea cu cele secundare (dacă ultimul produs are ID-ul 68 ÅŸi imaginea principală “68-68.jpg”, prima imagine secundară va avea ID-ul 69 – de ex. “2-69.jpg” dacă aparÅ£ine de produsul cu ID-ul 2).
Celelalte două tabele, position şi cover, reprezintă poziţia în lista cu toate imaginile unui produs, respectiv dacă imaginea va fi folosită ca imagine implicită a produsului. Aşadar, le umplu cu 1 de sus până jos.
Practic vorbind, se poate lucra în Excel sau ceva echivalent. Dacă aţi importat produsele cu ID-uri cu tot, atunci ştiţi care sunt ID-urile şi puteţi pleca de la tabelul vostru. Dacă nu, puteţi lua ID-urile exportând tabelul ps_product_lang.
Şi acum la munca manuală! Ce, credeai c-ai scăpat?
Plecând de la ID-urile produselor, se denumesc imaginile. Manual, da! Eu am dat doar prima parte a numelor (1, 2,…,34,…,65,…) ÅŸi am folosit un program capabil de “batch processing” ca XnView sau Total Commander ca să repete prima parte a numelui după o liniuţă (1-1, 2-2,…,34-34,…,65-65,…). Neapărat să aibă extensia jpg! Nu că ar fi practic alt format din moment ce sunt poze ale produselor.
Cand ai terminat, iei la purecat fiÅŸierul cu un editor mai capabil (UltraEdit sau Notepad++), să nu aibă resturi de la Excel ÅŸi să aibă un delimitator de câmpuri cât mai ciudat. Aici nu este important, nu imporÅ£i decat cifre, dar la celălalt tabel ai legendele imaginilor ÅŸi e posibil să conÅ£ină ÅŸi virgule ÅŸi punct-ÅŸi-virgulă ÅŸi mai ÅŸtiu eu ce…
Åži gata! Intri în phpMyAdmin, în baza ta de date, în tabelul ps_image ÅŸi dai clic pe Import. Alegi fiÅŸierul de importat, dacă ai cap de tabel pui “1″ la “Number of records (queries) to skip from start“, alegi format “CSV” ÅŸi delimitatorul pe care îl foloseÅŸti. Åži dai clic pe “Go“.
Şi atât cu tabelul ăsta.
ps_image_lang (altă muncă manuală)
Acest tabel conţine doar 3 câmpuri: ID-ul imaginii, ID-ul limbii şi explicaţia imaginii. ID-urile limbilor sunt în tabelul ps_lang (pun pariu că nu te aşteptai la asta!). Dacă la joncţiunea produselor cu imaginile puteam să mă gândesc la oareşce automatizări, aici nu este nicio posibilitate. Cineva trebuie să introducă manual explicaţiile pozelor. Stai puţin! Sunt în tabelul primit de la client, nu-i aşa ? Nu mai trebuie decăt atribuite ID-urile şi gata! Iar phpMyAdmin, iar Import şi gata.
Sau nu?
Mai trebuie încărcate pozele cu numele corect în locaÅ£ia corectă. Am văzut care este numele corect, locaÅ£ia corectă este directorul “\images\p\”din directorul unde ai instalat Prestashop.
Acum avem tot ce ne trebuie în locul corect. Dar! Mai este un pas. Mic. Trebuie ca în Back Office > Preferences > Image să dai clic pe “Regenerate thumbnails”. Prestashop o să rumege puÅ£in ÅŸi o să fabrice toate formatele de care are nevoie din pozele tale ÅŸi VOALA! E voila, ÅŸtiu.
Rugăminte de final către prestaşopişti
Vă rog să lăsaţi în comentarii sugestiile sau nelămuririle voastre, e destul de greu să te pui în locul celui care are nevoie de informaţiile pe care tu le ştii deja. Chiar şi cu geniul meu considerabil.
Doamnelor şi domnilor, sănătate şi virtute!


3 comentarii la “Imagini în Prestashop prin forţă brută”
class="comment even thread-even depth-1"24352435-
class="comment odd alt thread-odd thread-alt depth-1"24632463
-
class="comment even thread-even depth-1"25032503
-