Jaki hosting dla sklepu internetowego wybrać (PrestaShop / WooCommerce)?

Na wstępie podsumowanie. Poruszyliśmy ten temat na grupach Polska PrestaShop i po głębszej analizie zaproponowanych rozwiązań zdecydowaliśmy się zarekomendować Państwu rozwiązanie od dostawcy hostingu MyDevil.net. Nasz wybór postaramy się uzasadnić w niniejszym wpisie.

MyDevil.net
MyDevil.net (pakiety przeniesione z 2ap.pl)
Administracja i Zlecenia indywidualne
MyDevil.net VPN
Small.pl

Jakie rozwiązanie hostingowe wybrać dla sklepu internetowego?

Ważnym czynnikiem jest niewątpliwie szybkość odpowiedzi serwera oraz ilość miejsca na dysku i jego rodzaj (SSD vs HDD) jak również limity plików i transferu w pakiecie hostingowym. To właśnie na te elementy najczęściej zwracamy uwagę. Są jednak również inne istotne aspekty na które warto zerknąć przed podjęciem decyzji. Przy wyborze hostingu dla sklepu internetowego należy spojrzeć również na możliwości konfiguracji ustawień php.ini.

Inne isotone czynniki to oferta generowanych przez serwer automatycznych darmowych certyfikatów SSL (zaleca się zakupienie SSL od dostawcy zewnętrznego – zwiększa wiarygodność strony) oraz stałe IP, dzięki czemu nasze wiadomości wysyłane ze sklepu nie będzie trafiać do folderu spamu.

Dodatkowo należy zwrócić uwagę na wspierane technologie. Miłym zaskoczeniem w usługach MyDevil.net. jest to, że wspierają node.js. Co jest rzadkością wśród innych dostawców usług hostingowych (Standardowo GIT, SSH i wiele więcej).

* Jeśli chcesz dowiedzieć się więcej na temat technologii jakie wpiera hosting MyDevil.net kliknij w link i rozwiń listę wszystkich dostępnych usług.

Dlaczego wybór hostingu pod sklep internetowy jest bardzo istotny i jak ta decyzja może mieć potem wpływ na funkcjonowanie twojego sklepu?

Dla przykładu nie wymieniając nazwy jednego z dostawców usług hostingowych z którego korzystaliśmy przez długi czas i byliśmy zadowoleni do momentu, kiedy to nasi klienci nie wymagali uruchamiania skryptów do importu produktów z hurtowni na sklep internetowy. Mówimy tu o liczbie koło 10 tysięcy produktów. Okazuje się, że nasz ówczesny dostawca nie pozwalał na zmianę parametru określającego czas wykonywania się zadania do jego zerwania. W efekcie plik, który potrzebował około 60s na wykonanie nie mógł się wykonać i był przerywany. Mowa o kontach hostingowych współdzielonych, które w większości przypadków wystarczyły do utrzymania sklepu ale nie potrafiły poradzić sobie z importem dużych zestawień produktów.

Dla klientów korzystających z droższych rozwiązań VPS problem nie występował. Tam zakres ustawiania parametrów php.ini jest nieograniczony. Jedyne ograniczenia to moc procesora, RAM przypisany do danego pakietu VPS. Pakiety VPS choć często wydajniejsze to są również droższe i wymagają specjalisty do ich administracji. Utrzymanie takiego rozwiązania staje się więc sporo droższe.

Jeśli mamy nielimitowane środki i zależy nam na wydajności to mamy również do wyboru rozwiązania dedykowane. Tu jednak koszty zaczynają znacząco rosnąć i na początek warto rozpocząć od czegoś tańszego. Skalowanie biznesu może odbywać się w czasie. Na strat wydaj tylko tyle i musisz by sklep był fikcjonalny i widoczny.

Według nas pakiet ofertowany przez MyDevil.net gwarantuje złoty środek zarówno w cenie jak i funkcjonalności między rozwiązaniami współdzielonymi a niezależnością konfiguracji w usługach VPS. Pakiety MD1-5 pozwalają na dość dowolną konfigurację ustawień środowiskowych silnika PHP pozwalając na swobodny import produktów do sklepu bez zmartwień o przerwanie pracy skryptu przed wykonaniem przez niego zadania. Pakiety hostingowe MyDevil.net są również szybkie i wyposażone w dyski SSD co zwiększa szybkość obsługi żądania a więc krótszy czas ładowania się strony potencjalnemu klientowi.

Szybkość ładowania strony ma ogromny wpływ na konwersję w sklepie oraz na pozycjonowanie sklepu w wyszukiwarce Google.

Dobry i tani hosting dla sklepu internetowego

To naszym zdaniem pakiet usług MyDevil.net spełnia większość wymagań każdego sklepu internetowego.
MyDevil.net (pakiety przeniesione z 2ap.pl)
Administracja i Zlecenia indywidualne
MyDevil.net VPN
Small.pl


PrestaShop zmiana kategorii produktów MySQL

nr 1 backup

Przykładowy skrypt testowy. Jeśli w zapytaniu nie pominiemy START TRANSACTION i ROLLBACK; będziemy mogli zobaczyć co zrobi nasze zapytanie a wszystkie zmiany zostaną przywrócone do stanu z przed zapytania. Zanim dokonasz zmiany w bazie upewnij się, że zapytanie zrobiło dokładnie to czego chciałeś.

SELECT * FROM `ps_product`

Jakie tabele nas interesują? Tabela ps_product

SELECT c.id_category, cl.name
FROM `ps_category` c
LEFT JOIN `ps_category_lang` cl
ON c.id_category = cl.id_category WHERE cl.id_lang = 1;

START TRANSACTION;
UPDATE `ps_product` SET `id_category_default` = '6' ; #zmienia kategorię wszystkich produktów
UPDATE `ps_product` SET `id_category_default` = '6' WHERE `ps_product`.`id_category_default` = 2; #zmienia kategorię produktów o danej kategorii.
UPDATE `ps_product` SET `id_category_default` = '6' WHERE `ps_product`.`id_product` = 1858; #zmienia kategorię konkretnego produktu

SELECT * FROM ps_product;
ROLLBACK;

Jeśli interesuje cię bardziej zaawansowane zapytania, które są uodpornione na obecność jednego produktu w wielu kategoriach przy i ch przenoszeniu oraz usuwanie produktu z przenoszonej kategorii gdy już istnieje w bazie można znaleźć na tej stronie:
https://devwl.pl/prestashop-how-to-reassign-products-from-one-category-to-another/

PrestaShop 1.7 database schema

Niestety nie ma jeszcze przygotowanej dokumentacji dla PrestaShop 1.7. Możemy jednak podejrzeć budowę bazy analizując plik dostępny na repozytorium GitHub presty:
https://github.com/PrestaShop/PrestaShop/blob/1.7.7.x/install-dev/data/db_structure.sql

Narzędzia:
https://dev.mysql.com/downloads/workbench/

Przydatne źródła:
https://devdocs.prestashop.com/1.7/development/database/structure/

Możemy jednak posiłkować się strukturą opisaną w basie 1.6. Większość tabel oraz relacji pozostaje nienaruszona.

Forum:
https://www.prestashop.com/forums/topic/372412-list-of-all-table-referencing-by-foreign-key-ps_productid_product/

Hurtownia + PrestaShop + BaseLinker +[ Allegro, Inpost, Integracja Księgowa ]

Czyli jak zintegrować sklep z hurtowniami, systemem BaseLinker oraz Allegro.

Integracja z hurtowaniami odbywa się za pośrednictwem modułów integrujących. Na rynku mamy w tym zakresie kilka rozwiązań. Osobiście omówię jedynie kilka z nich.

anymag.pl – To obecnie nowa aplikacja i choć ich oferta jest obiecująca to nie zapewnia jeszcze kompletnej integracji produktów i kategorii. Być może w chili kiedy czytasz ten artykuł kilka miesięcy lub lat później tego problemu już nie ma. Warto zatem zadzwonić do obsługi i dopytać o listę możliwości ich rozwiązania.

presta-mod.pl – Oferuje integrację pod daną hurtownię. Wysłaliśmy do nich zapytanie i oczekujemy na odpowiedź. Ich moduł wydaje się wyglądać troszkę lepiej do tego prezentowanego przez x13 z którego mieliśmy już przyjemność korzystać integrując jedną z hurtowni.
Link do modułu: https://presta-mod.pl/pl/moduly-prestashop/114-prestashop-import-produktow-xml-xml-new.html.

prestadev.pl – Prezentuje podobne rozwiązanie jak presta-mod.pl. W naszym przypadku pisząc wiadomość e-mail otrzymaliśmy odpowiedź kilka sekund później więc można założyć, że firma jest bardzo aktywna. Rozwiązanie wygląda podobnie do tego prezentowanego przez x13 oraz presta-mod.pl.
Link do modułu: https://prestadev.pl/pl/60-import-xml-hurtowania-prestashop.html#pd_aap_send_custommer_form

https://prestadev.pl/

x13.pl – Ich moduły integracyjne są na rynku od dawna i wielu użytkowników ceni sobie ich rozwiązania. Nie ma jednak rozwiązań bez wad. W przypadku usługi od x13 kupujemy sztywną integrację pod określony format pliku. Jeśli kluczowa struktura pliku zmieni się integracja będzie wymagała wprowadzenia zmian. Jesteśmy więc narażeni na przerwę techniczną i choć takie przypadki nie są najczęstsze to jednak zdążają się i trzeba mieć je na uwadze. W naszym przypadku jedna z integracji była wyceniona na kilka tyś zł netto choć na swojej stronie sprzedają moduł za około 500 zł netto. Kolejna hurtownia miała zwyczajnie nie zostać zintegrowana. Być może firma 13 miała swoje powody, to z perspektywy konsumenta nie mają one wielkiego znaczenia. Nie da się znaczy, że się nie da.

prestashow.pl – Kolejny polski moduł pozwalający nam na przeprowadzenie integracji samodzielnie. Po zainstalowaniu wtyczki pliki XML muszą zostać zmapowane we własnym zakresie. Takie rozwiązanie daje nam więcej możliwości integracyjnych i choć droższe na początku to z perspektywy czasu przy integracji kilku hurtowni pozwala zaoszczędzić pare zł.

prestashopmanager.com – Na uwagę może zasłużyć również. Jest to nieco bardziej rozbudowany produkt i jego funkcjonalność nie kończy się na integracji hurtowni XML z naszym sklepem PrestaShop. Częściowo prestashopmanager spełnia funkcje integracyjne z marketplace na podobieństwo Baselinkera, jednakże jest to rozwiązanie zagraniczne i o ile może doskonale spełnić się na rynku zagranicznym tak już nie możemy liczyć na integracje do najpopularniejszych na polskim rynku rozwiązań jak np. Allegro czy Olx.

Module; https://www.prestashopmanager.com/order/

Integracja PrestaShop z BaseLinker

Base linker to produkt oferujący wiele integracji pod jednym systemem w module subskrypcyjnym. Bardzo popularny na polskim rynku. Pozwala on na wiele rodzajów integracji kurierskich, księgowych jak również zarządzanie sprzedażą z poziomu panelu Baselinkera. To naprawdę fajne narzędzie i potrzebuje wiele fajnego
http://pomoc.baselinker.com/pomoc/integracja-sklepu-przez-plik/

BaseLinker jest systemem do usprawniania i zarządzania procesem sprzedaży w Internecie oraz integracji z zewnętrznymi marketplace takimi jak Allegro, Ebay, OLX czy Amazon. Nie jest to jednak rozwiązanie idealne. Importując produkty do allegro na dzień dzisiejszy BaseLinker nie daje nam możliwości ustawiania osobnej marży dla poszczególnej kategorii. Jak wiemy Allegro opiera swój sposób naliczania prowizji na różnych stawkach prowizji podzielonej względem różnych kategorii. Aby więc osiągnąć ceny idealne musielibyśmy ustalać ceny indywidualnie dla każdego produktu co jest niemożliwe przy dużej ilości asortymentu lub modyfikować nasze ceny w sklepie (który jest magazynem głównym przy imporcie produktów z hurtowni jeśli nasze rozwiązanie importujące na to pozwala) w celu ustawienia preferowanej marży dla produktów wystawionych na allegro. Zgłosiliśmy ten problem do Baselinkera i otrzymaliśmy odpowiedź, że ta funkcjonalność jest obecnie testowana i niebawem powinna zostać wdrożona. Na dzień dzisiejszy jednak ta funkcjonalność jest niedostępna i może sprawić sporo kłopotów przy ustalaniu cen produktów.

Jedyne rozwiązanie jaki widzimy to posiadać dwa zewnętrzne magazyny i ustalać na nich ceny niezależnie. Czyli np. katalog produktów na PrestaShop oraz oddzielny magazyn / sklep PrestaShop do handlu detalicznego.

Z poziomu Baselinkera można również przeprowadzać integracje bezpośrednio do magazynu Baselinkera pomijając sklep. Nie jest to jednak rozwiązanie idealne. Posiadając własny sklep możemy oferować klientom lepsze ceny niż te wystawiane na allegro.

Czy są jakieś alternatywy dla BaseLinkera? Na rynku istnieją jeszcze takie rozwiązania jak https://sellasist.pl/, https://www.erpbox.pl/. Być może w przyszłości napiszemy o nich wpis porównawczy.

Po integracji Baselinkera z Allegro Baselinker uzyska dostęp do następujących funkcji:

Zarządzanie ofertami
Odczyt danych o ofertach. Tworzenie, edycja, łączenie i zamykanie ofert.

Ustawienia sprzedaży
Odczyt ustawień sprzedaży. Zarządzanie ustawieniami sprzedaży.

Promowanie ofert
Zarządzanie kampaniami Allegro Ads. Zgłaszanie ofert do oznaczeń i programów specjalnych.

Zamówienia i obsługa posprzedażowa
Odczyt informacji o zamówieniach. Zarządzanie zamówieniami. Obsługa ocen i komentarzy. Obsługa sporów transakcyjnych.

Finanse i płatności
Odczyt salda i opłat na koncie. Odczyt historii płatności. Obsługa zwrotów wpłat.

Dane osobowe
Odczyt danych osobowych z konta. Edycja danych osobowych na koncie.

Licytacje i zakupy
Składanie ofert kupna w licytacjach.

Twój pierwszy sklep w PrestaShop

Masz już swój pierwszy sklep w PrestaShop? Dowiedz się o nim więcej. Naucz się jego obsługi. PrestaShop Udostępnia wiele materiałów, które pomogą ci poznać jego możliwości oraz funkcjonalność.

Zacznij tutaj:
http://doc.prestashop.com/display/PS17/Getting+Started

Jeśli masz jakieś trudności, możliwe, że nie jesteś pierwszy. Sprawdź forum PrestaShop i zobacz czy nie rozwiązano już wcześniej twojego problemu.
https://www.prestashop.com/forums/

PrestaShop posiada również odpłatne kursy i szkolenia oraz wydarzenia, w których możesz wziąć udział. Szkolenia są podzielona dwie kategorie dla: Sprzedawców oraz Developerów.
https://www.prestashop.com/en/training

PrestaShop posiada również oficjalny kanał YouTube na którym można znaleźć więcej informacji o funkcjonalności tego rozwiązania:
https://www.youtube.com/channel/UCqDSbqSbkboMBARlYrhNa7g

PrestaShop Module Development – Where to start?

Developing a PrestaShop plugin or theme is not an easy task. There fore you need to find the right resources to start learning development of a custom module.

Where to find video tutorials: https://beautifulweb.pl/prestashop-module-development-where-to-start/

PrestaShop Module Development Tutorial

Developing a custom module may bring a lot of cool features to your PrestaShop site. Lest start here:
https://prestapros.com/blog/jak-napisac-modul-prestashop
The code in above article present a bare minimum for a plugin to work in PrestaShop environment.
There are module templet generators that can help us to set up proper folder hierarchy. Lets have a look at module generator:

PrestaShop module skeleton generator

https://validator.prestashop.com/generator

Above online generator allow us to create a quick template for our plugin including database setup, hook declaration and many more.

PrestaShop Module development documentation:

To be able to understand the code given by the generator we need to work closely with a documentation https://devdocs.prestashop.com/1.7/modules/

It is also possible to learn more about PrestaShop from online tutorials. Unfortunately there are not many resources available online. Here is few tutorials that we where able to find for PrestaShop 1.7.:

PrestaShop Smarty Global Variables and Twig conversion

Smarty Doc. | Twig Doc. | PrestaShop Theme Development Doc 1. && Doc 2| PrestaShop Module Development Doc.

PrestaShop uses .twig template, but many themes from the themes repository such as themeforest uses php smarty engine to power their view pages. (.tpl). There are some global SMARTY variables available by default in PrestaShop. Here is a list of them:

General info about your online store

{$shop.name} Store name
{$shop.email} Store Email
{$shop.logo} Store logo
{$shop.favicon} Store icon (map, title of the browser window, etc.)
{$shop.address.address1} Store address 1
{$shop.address.address2} Store address 2
{$shop.address.postcode} Store Zip Code
{$shop.address.city} Store City
{$shop.address.state} Store State (Province)
{$shop.address.country} Store Country
{$shop.phone} Store Telephone
{$shop.fax} Store Fax

Language

{$language.name} Name of the language in use (example: English) 
{$language.iso_code} ISO code of the language in use (it for Italian, fr for French, etc.)
{$language.language_code} Code of the language in use (it for Italian, en-us for American English, etc.)
{$language.is_rtl} (1 when language is written from right to left; 0 if from left to right)
{$language.id} ID value of the language in use

Currency

{$currency.name} Name of the currency in use (Euro, American Dollar, etc.)
{$currency.iso_code} Currency ISO code of the currency in use (Eur, USD, etc.)
{$currency.sign} Symbol of the currency in use (€, $, etc.)
{$currency.iso_code_num} ISO code number of the currency in use (978 for Euro, 840 for American Dollar, etc.)

Pages and elements of the e-commerce site

{$urls.base_url} Store web address (example: https://www.themebooster.com)
{$urls.current_url} Current web address (url), the page we are viewing
{$urls.shop_domain_url} Store domain
{$urls.img_ps_url} Image root directory url
{$urls.img_cat_url} Url of the categories images directory
{$urls.img_lang_url} Url of the languages images directory
{$urls.img_prod_url} Url of the products images directory
{$urls.img_manu_url} Url of manufacturers images directory
{$urls.img_sup_url} Url of providers images directory
{$urls.img_ship_url} Url of carriers images directory
{$urls.img_store_url} Url of physical store images directory
{$urls.img_url} Url of theme images directory
{$urls.css_url} Url of css files directory used by the theme
{$urls.js_url} Url of javascript files directory used by the theme
{$urls.pic_url} Url of file uploaded directory
{$page.page_name} Page Name (file template)
{$page.meta.title} Page Title (SEO)
{$page.meta.description} Tag description content (SEO)
{$page.meta.keywords} Tag keywords content (SEO)
{$page.meta.robots} Rule for search engines: blocks or not the page indexing (SEO)
{$page.canonical} Indicates the canonical (main) URL to avoid duplication of contents (SEO)
{$urls.pages.address} Url of the "My Address" section (registered user)
{$urls.pages.addresses} Url of the "My addresses" section (registered user)
{$urls.pages.authentication} Url of the authentication page
{$urls.pages.cart} Url of cart page (order summary)
{$urls.pages.category} Url of the category
{$urls.pages.cms} Url of the page (type CMS)
{$urls.pages.contact} Url of the contact page
{$urls.pages.discount} Url of the discount voucher page
{$urls.pages.guest_tracking} Tracking url for unregistered clients
{$urls.pages.history} Url of the "Order History" page (registered user)
{$urls.pages.identity} Url of the "Personal data" page (registered user)
{$urls.pages.index} Home page url
{$urls.pages.my_account} Url of "My Account" page (registered user)
{$urls.pages.order_confirmation} Url of the "Order Confirmation" page
{$urls.pages.order_follow} Url in the "Order Tracking" (registered user)
{$urls.pages.order} Url of the "Order" page
{$urls.pages.order_return} Url of the "Order Return" page
{$urls.pages.order_slip} Url of the "Order Slip" page
{$urls.pages.pagenotfound} Url of the "404 - Page not found"
{$urls.pages.password} Url of "Recover Password" page
{$urls.pages.pdf_invoice} Url of Pdf invoice
{$urls.pages.pdf_order_return} Url of Pdf order return
{$urls.pages.pdf_order_slip} Url of Pdf order slip
{$urls.pages.prices_drop} Url of "Our Offers" page
{$urls.pages.product} Url of the "Product" page
{$urls.pages.search} Url of the "Search" page
{$urls.pages.sitemap} Url of thr "Site Map" page
{$urls.pages.stores} Url of the "Shops/Our stores" page
{$urls.pages.supplier} Url of the "Suppliers" page
{$urls.pages.register} Url of the "Register" page
{$urls.pages.order_login} Url of the "Login" page
{$urls.theme_assets} Url of the "assets" directory of the theme
{$urls.actions.logout} Url to disconnect from the site (registered user)

Cart

{$cart.totals.total.amount}The total amount of the cart without currency (ex: 45,00)
{$cart.totals.total.value} The total amount of the cart with currency (ex: 45,00 €)
{$cart.totals.total_including_tax.amount} The total amount of the cart, including taxes, without currency (ex: 45,00)
{$cart.totals.total_including_tax.value} The total amount of the cart, including taxes, with currency (ex: 45,00 €)
{$cart.totals.total_excluding_tax.amount} The total amount of the cart, excluding taxes, without currency (esempio: 35,70)
{$cart.totals.total_excluding_tax.value} The total amount of the cart, excluding taxes, with currency (esempio: 35,70 €)
{$cart.products_count} Number of products in the cart
{$cart.subtotals.products.amount} The amount of products in the cart without currency
{$cart.subtotals.products.value} The amount of products in the cart withcurrency
{$cart.subtotals.shipping.amount} The amount of shipping in the cart without currency
{$cart.subtotals.shipping.value} The amount of shipping in the cart with currency

Customers

{$customer.lastname} Customer Last Name
{$customer.firstname} Customer First Name
{$customer.email} Customer Email (provided during the registration)
{$customer.birthday} Customer Birthday
{$customer.newsletter} Subscribed to the newsletter (1 if subscribed, 0 if unsubscribed)
{$customer.newsletter_date_add} Newsletter subscription date
{$customer.ip_registration_newsletter} IP of Customers at the newsletter registration
{$customer.optin} Subscribed to offers from partners (1 if subscribed, 0 if unsubscribed)
{$customer.date_add} Customer registration
{$customer.date_upd} Last updated (customer registration)
{$customer.id} Customer ID
{$customer.id_default_group} ID group to which the client is associated
{$customer.is_logged} Check if the client is "logged in" (1 yes, 0 no)
{$customer.gender.name[$customer.gender.id]} Client Gender (example: Ms, Mr, etc.)
{$customer.addresses[AddressID].city} Client City of address with an ID (AddressID, example 8, where 8 is the ID of the customer's address), because a client could have multiple addresses)
{$customer.addresses[AddressID].alias} Address alias
{$customer.addresses[AddressID].firstname} Address Holder first name
{$customer.addresses[AddressID].lastname} Address Holder last name
{$customer.addresses[AddressID].company} Address Holder company
{$customer.addresses[AddressID].address1} Address Holder address 1
{$customer.addresses[AddressID].address2} Address Holder address 2
{$customer.addresses[AddressID].postcode} Address Holder ZIP code
{$customer.addresses[AddressID].id_state} Address Holder ID state
{$customer.addresses[AddressID].state} Address Holder state name
{$customer.addresses[AddressID].state_iso} Address Holder state ISO code
{$customer.addresses[AddressID].id_country} Address Holder ID country
{$customer.addresses[AddressID].country} Address Holder country name
{$customer.addresses[AddressID].country_iso} Address Holder ISO country
{$customer.addresses[AddressID].phone} Address Holder telephone
{$customer.addresses[AddressID].phone_mobile} Address Holder mobile phone
{$customer.addresses[AddressID].dni} Address Holder DNI
{$customer.addresses[AddressID].vat_number} Address Holder VAT number
{$customer.addresses[AddressID].formatted} Address Holder formatted address

Prestashop 1.7: examples of conditions

Now, with the smarty variables used by Prestashop, you can display an element based on a condition or not.

Show an item if the page you are viewing is the home page

{if $page.page_name == 'index'}
  content to show
{/if}

Show an item if the page you are viewing is a content page (CMS)

{if $page.page_name == 'cms'}
  content to show
{/if}

Show an item if the page you are viewing is the cart page

{if $page.page_name == 'cart'}
  content to show
{/if}

Show an item if the user is logged in (login)

{if $customer.is_logged}
  content to show
{/if}

Show a translatable welcome message and the name if the user has logged in

{if $customer.is_logged && $customer.firstname} 
  {l s='Hi' d='Shop.Theme.Global'} {$customer.firstname}
{/if}

Show a translatable message depending on whether the user is registered or not to the Newsletter

{if $customer.newsletter == 0}
  {l s='Sign up to our newsletter!' d='Shop.Theme.Customeraccount'}
{else}
  {l s='You are already subscribed to our newsletter' d='Shop.Theme.Customeraccount'}
{/if}

Src: https://www.themebooster.com/prestashop-tutorials/prestashop-1-7-smarty-global-variables/

Convert Smarty to Twig

If you need to convert above variable to twig, there is PrestaShop documentation explaining the this process:
https://devdocs.prestashop.com/1.7/development/architecture/migration-guide/templating-with-twig/

Custom Pretty URL in module PrestaShop

Wycena sklepu internetowego

Ile kosztuje sklep internetowy?

Ceny sklepu internetowego są dość rozbieżne. W internecine znajdą Państwo oferty od 1600 do 8000 zł, kilku dziesięciu a nawet kilku set tysięcy złotych. Jakie są różnice i co można kupić w tych różnych przedziałach cenowych?

Proszę mieć świadomość, że cena zazwyczaj idzie w parze z zakresem usługi oraz rodzajem, wyglądem i funkcjonalnością rozwiązania. Bardzo prosty sklep można postawić za stosunkowo niewielkie pieniądze, ale jak coś ma wyglądać być funkcjonalne i jeszcze oczekuje Pani jakiejś pomocy oraz wprowadzenia produktów na sklep czy integracji z hurtowniami zewnętrznymi to trzeba zapłacić więcej. W zamian ma Pani spokojną głowę jak i nie musi marnować czasu na czynności, które można zautomatyzować. Zapłaci dwa razy bo pierwszy sklep nie spełnia oczekiwań to żadna oszczędność.

Jaki sklep internetowy?

Na początku trzeba skonsultować własne wymagania i potrzeby a następnie złożyć zapytanie o wycenę, już konkretniej ze szczegółami. Inaczej wpadną Państwo w pułapkę tanio i byle jak, czyli straci pani pieniądze na rozwiązanie, które nie spełnia Państwa oczekiwań.

Nie deklarując pewnych funkcjonalności na początku nie mogą Państwo również oczekiwać, że takie rozwiązania zostaną dostarczone w trakcie realizacji. Czasami może okazać się, że dana funkcjonalność nie jest dostępna we wdrażanym systemie a jej indywidualna implementacja może znacznie przewyższyć cenę budowy samego sklepu.

Jaka platforma e-commerce

Na rynku mamy dostępne wiele rozwiązań z różnymi modelami płatności. Płatność za wynajem sklepu lub koszt wdrożenia sklepu na jednej z popularnych platform e-commerce. Ewentualnie budowa własnego sklepu (ta opcja jest już bardzo droga i przeznaczona głównie dla dużych firm mających duży budżet inwestycyjny)

Wynajem sklepu:
– https://www.shopify.com (cena w tabeli poniżej)
– https://sky-shop.pl

Basic ShopifyAll the basics for starting a new businessShopifyEverything you need for a growing businessAdvanced ShopifyAdvanced features for scaling your business
USD $29 per month/moUSD $79 per month/moUSD $299 per month/mo
Shopify Plany / koszt na miesiąc na dzień 8/03/2021


Basic Dynamicznie rozwijający się e-sklep

99 zł miesiąc / netto
Business Pakiet idealny dla Allegrowiczów i Dropshippingu

187 zł miesiąc / netto
Advance Większe możliwości dla rosnącego sklepu internetowego

299 zł miesiąc / netto
Shopify Plany / koszt na miesiąc na dzień 8/03/2021

* Łatwo policzyć, że roczny koszt to minimum 1500 zł zł netto za najuboższą opcję / płatność roczna. Czyli bardzo bliski koszt wdrożenia sklepu w systemie WooCommerce w najuboższej wersji (patrz lista poniżej) / płatność jednorazowa.

Własny sklep:
Wdrożenie jednego z systemów:
– WooCommerce (2000 – XX XXX zł w zależności od wymagań klienta)
– PrestaShop (3500 – XX XXX zł w zależności od wymagań klienta)
– Magento (8000 – XXX XXX zł w zależności od wymagań klienta)
* Należy pamiętać, że przy cenie startowej otrzymujemy jedynie działający system bez dodatkowej funkcjonalności czy też wyszukanego szablonu graficznego.

Budowa własnego rozwiązania w oparciu o specyficzne technologie i frameworki (tylko dla dużych firm):
LAMP lub MEAN
React, Angular, Symfony
MySQL, Mongo, Firebase
Cena od 60 000 zł do X XXX XXX w zależności od wymagań klienta)

Z reguły implementacje sklepu na znanej platformie jest początkowo droższa ale tańsza na przestrzeni czasu. Nie należy jednak nastawiać się na jazdę próbną na jednym rozwiązaniu i przejście na drugie bo często takie transfery są trudne lub nawet niemożliwe albo zwyczajnie kosztowne pochłaniają nie tylko środki ale i czas.

Dobrze wiec obrać dobrą strategię na samym początku.

Divi Ecommerce useful setup

Before you buy any additional extension make sure it is not included in the theme itself.
If de demo data is enough. You might not need any more plugins. Every customer will have different needs so there also might be a case you might need one of those plugins:

Divi Ecommerce Themes

  • https://avanti.markhendriksen.com/home-page-shop/
  • https://demo.diviextended.com/divi-cart/
  • https://www.elegantthemes.com/marketplace/divi-ecommerce/
  • https://diviecommercepro.aspengrovestudio.com/
  • http://berry.mzcreativestudio.com/

Mega Menus (paid)

Groovy Mega Menu – Responsive Mega Menu Plugin for WordPress
Divi Life – Divi Mega Pro

For custom product price calculation (paid)

Uni CPO 4 allow any product calculation on the product page.

Custom URL for TPO – adds custom URLs for each product.

Read more on CPO plugin here:

Ship rate by distance (paid)

Requires Google API to work.

Shipping Rate by Distance

Product Filter (free)

For product page filter working with Divi builder (free):

Variation image galery

variation for WooCommerce (free / paid):
– free up to three images per variation
Additional Variation Images Gallery for WooCommerce

Variation Image Gallery PRO
https://getwooplugins.com/plugins/woocommerce-variation-gallery/

Swatches

Variation Swatches for WooCommerce (free / paid): Paid – PRO url
This plugin allows you to enhance color-swatches for your products.

Variation Duplicator (free)
https://getwooplugins.com/plugins/variation-duplicator-for-woocommerce/

Booking plugin

Amelia Plugin

Payment Getaway

PayU Payment Gateway (plugin free) – customer register fee = 200 zł
Dotpay Pyment Gateway (free plugin) 10 zł
przelewy24.pl Payment Gateway (free plugin) 1,5 zł
Tpay Payment Gateway (free plugin)

Other useful resources/tutorials:

Divi Ecommerce Web Design Tutorial

Elegant Themes Blog – Build custom product page design

Elegant Themes Blog -: Product variation in Divi

Calculate price without a plugin (no plugin):

If you dont want to add more plugin to your webssite you can incorporate custom product fields manually.
Here are some usefull articles to get yu going:

https://www.cloudways.com/blog/add-custom-product-fields-woocommerce/

https://stackoverflow.com/questions/52043316/cart-item-price-calculation-based-on-different-basic-prices-in-woocommerce

https://wisdmlabs.com/blog/guide-to-finding-appropriate-hooks-in-a-wordpress-theme-or-plugin/

https://stackoverflow.com/questions/29866272/adjust-price-if-addons-are-set

Exploring the native WP filters / class search:

https://developer.wordpress.org/reference/

WooCommerce documentation:

General: https://docs.woocommerce.com/document/introduction-to-hooks-actions-and-filters/
API: https://woocommerce.github.io/code-reference/index.html
Code / Hooks: https://woocommerce.github.io/code-reference/hooks/hooks.html

WooCommerce Pricing Calculator made easy.

https://webdesign.tutsplus.com/articles/13-cost-quote-estimate-calculators-for-wordpress-woocommerce-for-2021–cms-36201

https://codecanyon.net/category/wordpress?sort=sales&term=estimate&view=grid&_ga=2.18623039.78699823.1613508610-152296257.1613508610

There is a a lot of options when it comes to WooCommerce cost calculation. That’s why it might be difficult to choice the right plugin to fulfill your user needs. So before you make a buy it might require from you to get to know the problem first before you attempt to solve it with one of those plugins.

Here is a short list of popular plugin that are well rated:

Booking plugin for Woocommerce – which one to pick?

We suggest to use the Booked – Appointment Booking for WordPress which is relatively affordable and it does have a lot of options to configure. It does look modern and it has a popup option. There are many plugins available on the market.

Also bear in mind that you might want a plugin that integrates with woocommerce checkout. This is because you can integrate your local payment method which will most likely not be supported by plugin itself. Polish PayU is a good example of that. It does have woocommerce integration but none of the plugin supports it directly.

Amelia is also a good choice. It is more expensive but it does offer lifetime developer plans (around 3000 zł) so you can save up if you make more then one install in long run. It also have woocommerce integration so you can very east to use external payment getaways like PayU. This is really a great option worth considering.


https://wpamelia.com/woocommerce-integration/

Sometimes those more expensive are not worth a single dolar like Booking plugin from WooCommerce. If you want to get to know other options watch this video: