Git Product home page Git Product logo

oc-shopaholic-plugin's Introduction

Shopaholic

Build Status Coverage Status Maintainability Crowdin Financial contributors License: GPL v3

E-Commerce plugin by LOVATA for October CMS.

Shopaholic Banner

Overview

Shopaholic is a scalable and highly flexible e-commerce ecosystem for October CMS. The core plugin is provided free of charge and includes the following set of features:

  • Products and trade offers management.
  • Product image gallery management.
  • Products grouping by categories and brands.
  • Multi-currency, taxes and price types management.
  • Data import (product, offers, categories, brands) from a CSV file.
  • Basic products filtering (by category, brand etc.) and sorting (by price, new additions etc.)

With the help of Shopaholic’s standard functions, combining them together it’s also possible to solve many other non-trivial tasks, such as displaying blocks of random products, displaying the cheapest and most expensive products, etc.

In order to cater to the growing scalability demands of a project, the ecosystem provides extra plugins to extend the basic functionality. With these plugins sellers can:

Besides you can provide a better UX for the customer with the ability to:

Please note, the architecture of the plugins allows extending the existing methods, fields and other data without interfering with original source code!

The development of Shopaholic’s ecosystem is guided by the similar philosophies of October CMS and Unix like operating systems, where the main focus is to create simple microarchitecture solutions that communicate with each other through smart APIs.

One one hand, this approach allows keeping performance, security, and functionality of the code to a high standard. On the other hand, it provides a clean and smooth back-end UI/UX that isn't over-bloated with the features.

Live demo

Visit our demo website. Sign in to backend using the following credentials:

  • user: manager
  • password: manager

You can run the demo site locally. To do so, you need to clone the oc-shopaholic-demo-theme repository and follow the steps from the Installation guide in the Readme file. As a result, you will receive a copy of the demo site with a full database. Having a ready-made demo site example, you can easily learn how to operate the plugins.

Installation

Regardless of the installation type you choose, you must install Toolbox plugin, which is a required dependency for Shopaholic.

Artisan

Using the Laravel’s CLI is the fastest way to get started. Just run the following commands in a project’s root directory:

php artisan plugin:install lovata.toolbox
php artisan plugin:install lovata.shopaholic

Composer

If you prefer Composer run following commands in a project’s root directory:

composer require lovata/oc-toolbox-plugin
composer require lovata/oc-shopaholic-plugin
php artisan october:up

It's not recommended way because of possible collisions with the updating of the plugins.

Once the plugins are installed take a look at the official documentation for the possible next steps.

Documentation

The complete official documentation of the ecosystem can be found here.

Performance

As an environment for a testing measurements was used simple Digital Ocean droplet with this configuration:

  • Dual Core CPU
  • 4 Gb RAM
  • Ubuntu 18.04
  • PHP 7.2.0
  • Apache 2.4
  • MySQL 5.7
Products number Catalog page load time Product list filtering time
210 100-150 ms 80-100 ms
21 000 900-1100 ms 500-600 ms

If you would like to know how our plugins perform with large catalogs of products, you can visit our Large Catalog Demo website that has 21 000 products, 68 000 offers and 210 000 variations of property values.

Quality standards

We ensure the high quality of our plugins and provide you with full support. All of our plugins have extensive documentation. The quality of our plugins goes through rigorous testing, we have launched automated testing for all of our plugins. Our code conforms with the best writing and structuring practices. All this guarantees the stable work of our plugins after they are updated with new functionality and ensures their smooth integration.

Get involved

If you're interested in the improvement of this project you can help in the following ways:

  • bug reporting and new feature requesting by creating issues on plugin GitHub page;
  • contribution to a project following these instructions;
  • localization to your language using Crowdin service.

Let us know if you have any other questions, ideas or suggestions! Just drop a line at [email protected].

License

© 2019, LOVATA Group, LLC under GNU GPL v3.

Developed by Andrey Kharanenka.

oc-shopaholic-plugin's People

Contributors

adsumushero avatar alvaro-canepa avatar daftspunk avatar dinwid avatar flusherdock1 avatar gergo85 avatar gitlog avatar headshot3452 avatar igor-tv avatar itverdokhleb avatar jumbophp avatar kharanenka avatar kosmonowt avatar lautsevich avatar m49n avatar mjauvin avatar philmarc avatar pikanji avatar radist avatar roulendz avatar samnela avatar vosco88 avatar wobqqq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oc-shopaholic-plugin's Issues

Omnipay Error

    return;
    }

    //Get payment gateway list
    $arPaymentGatewayList = [];

    $arGatewayList = Omnipay::getFactory()->find();
    if (!empty($arGatewayList)) {
        foreach ($arGatewayList as $sGatewayName) {
            $arPaymentGatewayList[$sGatewayName] = $sGatewayName;
        }
    }

nested `CategoryList` does not renders nested list properly.

This is my backend Trades Page

This is my rendered view:

This is my Category List (backend):

I don't know what I'm doing wrong here, I also have removed the portion of the code which checks if there are any products in the respective categories 👍

New install

Update failed

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'popularity' in 'field list' (SQL: update lovata_shopaholic_products set preview_text = Preview text. Product: Knee Length Lace Insert Denim Shorts - Light Blue Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua., description =

Description text. Product: Knee Length Lace Insert Denim Shorts - Light Blue

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

, popularity = 361, updated_at = 2018-02-12 22:41:59 where id = 1)" on line 664 of /var/www

When select paid delivery method, change total cost

Hello! I try to configure shopaholic plugin, and i also testing your demo theme. I noticed that if i create a delivery method with extra cost ,and then try to select the paid delivery method on frontend ,the total cost remains the same. Is there a easy way to change the total cost when client select paid delivery method?

[Shopaholic] Study october behaviors + update related with properties

  1. Изучить работу связей http://octobercms.com/docs/services/behaviors
  2. Попробовать внедрить связь с плагином PropertiesShopaholic:
  • в конструкторе модели Product убрать метод constructExtend для PropertiesShopaholic, а логику метода попробовать реализовать через http://octobercms.com/docs/services/behaviors#constructor-extension
  • убрать методы getPropertyAttribute, setPropertyAttribute из модели Product. Попробовать реализовать методы через расширение Dynamically creating methods.
  1. Если все будет хорошо работать закоммитить правки через pull request

Products not showing in frontend.

After populating products list and categories list in the backend, I cannot get to see anything in the frontend though I inserted code from the component in the page. Is there a bug or something I didn't see? Thank you for your answer.

Accessories plugin

Hello, I wanted to ask for product accessories plugin.

Is there any chance to get unofficial release of it now, without waiting?

Questions

Hi,
thanks for this amazing oc plugin.
I have several questions when looking at the wiki pages.

  • I dont get the difference of usage between ProductData and ProductPage for example.
    They both create a ProductItem.
  • Is the ProductItem or ProductData (Product model) cached somehow ?
  • do you have a basic OC theme that comes with this plugin?
  • why did you decide to not implement the UI html inside the components ?
  • why did you decide to somehow develop different layer above the model? for example, the model Product has a ProductItem to manage it. Why this architecture? What are the advantages? For my understanding :)

Thanks in advance

How to read obProperty.settings

Hello, I'm trying to put in Twig Product template, property settings information to distinct between mediafinder mode image vs file. But array gives me null. I'm doing something wrong, or $jsonable is missing in Model?

{# Get product item #}
{% set obProduct = ProductPage.get() %}
<div data-id="{{ obProduct.id }}">
    <h1>{{ obProduct.name }}</h1>
    {# Get list of proeprties for product #}
    {% set obPropertyList = obProduct.property %}
    {% if obPropertyList.isNotEmpty == true %}
        <ul>       
            {% for obProperty in obPropertyList if obProperty.hasValue() %}
                <li>
                
                 {% for setting in obProperty.settings  %}

{# HERE >>  #}   {{ setting.mediafinder }}
        
                 {% endfor %}
                
                {{ obProperty.type }}  {{ obProperty.name }}: {{ obProperty.property_value.getValueString() }}</li 
            {% endfor %}
        </ul>
    {% endif %}
</div>

1 product with multiple colors

Hello Good folk,

At the moment I am researching which plugin I want to use for a customer that needs simple product buying options. I am wondering if it is possible to create one product that has several different colors (or sizes).

Example:
Samsung Galaxy S9

  • Gold
  • Black
  • Rose

With Kind Regards,

Digital/Downloadable Products Plugin

Hi, we were looking at using Shopaholic, but it seems that there is currently no way to offer digital downloadable products similar to: WooCommerce Downloadable Products or the JKShop plugin for OctoberCMS.

The basic features we're looking for would be:

  • A way to securely upload a file to the server for each product so that only users that have purchased the product may download it. WooCommerce offers a few ways to handle the downloads (see above link) so that links cannot simply be shared.
  • A page for users to (re)download items that they have previously purchased.
  • An maximum download limit option would be nice to prevent abuse/sharing of accounts -- with the option for an admin to reset the limit.
  • A simple log showing when files were downloaded and by which user and IP address.
  • While being able to associate multiple files with a product would be useful, a single file (.pdf, .zip, etc.) is enough for all our current needs.
  • We need to track sales tax on digital items, but I haven't seen a way to do this currently with Shopaholic. Is this planned as a general-purpose plugin?

Thanks!

Dates translation

Hello, Shopaholic display dates only in English.

October support translated dates with Argon (Carbon extension).
octobercms/october#1968

Translate plugin, can switch dates language by switching active lang. It was just fixed (not published yet) to bring back this function to work again.
rainlab/translate-plugin#338
Solved here: rainlab/translate-plugin#338 (comment)

Please add this function to Shopaholic, date property from Properties plugin and other Shopaholic plugins. Maybe adding it to main plugin will resolve issue in all of them or maybe not.

Thank you!

Suggestion about storing offer price

By the OfferItem description I see that price stored as float value.

It may cause some issues in payments or calculations.
Because (it just one possible case):

$a = 0.17;
$b = 1 - 0.83; //0.17
return ($a === $b ); // false

Robert C. Martin (approximate quote): "Use floating-point numbers to represent money amounts is almost a crime"

I think better practice to store it as integer in minimal unit of currency (cents for USD or kopeck for RUB-BYN — it does not matter). And convert it to floats right before displaying at frontend (depending on the 'decimals' setting).
What do you think?

ProductCollection doesn't read parent category

If we make

$obList = ProductCollection::make()->category(2);

Only get products with direct category relation. Can't get child categories products.
Example: have this categories:

ID1: 
  name: "Category Root"
  childs:
    ID2:
      name: "Child Category #1"
    ID3:
      name: "Child Category #3"
      childs:
        ID4:
          name: "Child Category #1 of Category #3"

How can I get nested products of category ID3?
ProductCollection must return products of ID3 and ID4 categories.

Thanks

How can implement product search

Hi, first, great plugin !!!

I'm writing an ecommerce theme, and need to add search feature. Is there something already implemented for that?

Thanks

Preparation for publication "Search for Shopaholic" plugin

  1. Ability to search products by name, code, preview_text, description, search_synonym, search_content fields.
  2. Ability to search categories by name, preview_text, description, search_synonym, search_content fields.
  3. Ability to search brands by name, preview_text, description, search_synonym, search_content fields.
  4. Ability to search tags by name, preview_text, description, search_synonym, search_content fields.
  5. Add fields search_synonym, search_content to Product, Category, Brand, Tag models.
  6. Add search($sSearch) method to ProductCollection, CategoryCollection, BrandCollection, TagCollection classes.
  7. Add search settings to Settings model of Shopaholic plugin.

How to make Child Categories?

Example:

  • Weapons Main Category
    • Rifles Child
    • Knives Child
    • Shotguns Child

I see that the example code you provided for CategoryList it's supported:

How could I achieve that?

[Shopaholic] Check link tables

Необходимо проверить таблицы связи многие ко многим и добавить primary key в местах, где это необходимо. Проверить надо все плагины.

add to cart

possible to have add to cart function ? (not replacing an item, but add more quantity )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.