E-Commerce and the Minishop2 Ecosystem

How small tool became the start of growth a big marketplace

Ivan Klimchuk, Alroniks Experts

E-Commerce and the Minishop2 Ecosystem

How small tool became the start of growth a big marketplace

Ivan Klimchuk, Alroniks Experts

bit.do/modxpo

Ivan Klimchuk

Required elements of shop

Of course, it's only small part, that can have e-shop,
but the most essentials

Minishop. First generation

Released on 28th of Febrary, 2012
as alternative existing VisionCart and Shopkeeper

Mini Shop 2

Mini Shop 2

MODular and eXtendable

Can be extended: Cart, Delivery, Order, Payment
*handler.php

Special MS2 plugins: adding custom fields. MS2 upgrading keeps their in safety

All power of MODX: snippets, plugins, chunks, lexicons and etc.

Approximatly 50 extras in modtore.pro for MiniShop2

Cart handler

			class CustomCartHandler extends msCartHandler 
	implemets msCartInterface {
				public function add($id, $count = 1, $options = array()) {}
				public function remove($key) {}
				public function change($key, $count) {}
				public function clean() {}
				public function status($data = array()) {}
				public function get() {}
				public function set($cart = array()) {}
			}	
		
bit.do/msch

Order handler

			class CustomOrderHandler extends msOrderHandler 
	implements msOrderInterface {
				public function add($key, $value) {}
				public function validate($key, $value) {}
				public function remove($key) {}
				public function get() {}
				public function set(array $order) {}
				public function submit() {}
				public function clean() {}
				public function getCost() {}
			}
		
bit.do/msoh

Delivery handler

			class CustomDeliveryHandler extends msDeliveryHandler 
	implements msDeliveryInterface {
				public function getCost(msOrderInterface $order, 
		msDelivery $delivery, $cost = 0) {}
				public function error($message = '', $data = array(), 
		$placeholders = array()) {}
				public function success($message = '', $data = array(), 
		$placeholders = array()) {}
			}
		
bit.do/msdh

Payment handler

			class CustomPaymentHandler extends msPaymentHandler 
	implements msPaymentInterface {
				public function send(msOrder $order) {}
				public function receive(msOrder $order) {}
				public function getCost(msOrderInterface $order, 
		msPayment $payment, $cost = 0) {}
				public function error($message = '', $data = array(), 
		$placeholders = array());
				public function success($message = '', $data = array(), 
		$placeholders = array());
			}
		
bit.do/msph

Special MS2 plugins

				ALTER TABLE `modx_ms2_products` 
ADD `comment` VARCHAR(255) NULL 
DEFAULT NULL;
				ALTER TABLE `modx_ms2_products` 
ADD INDEX (`comment`);	
			

Special MS2 plugins

			/core/components/miniShop2/plugins/
			/assets/components/miniShop2/plugins/
		

Comment field plugin

			/core/components/miniShop2/plugins/comment/index.php
			/core/components/miniShop2/plugins/comment/model/msproductdata.map.inc.php
			/assets/components/miniShop2/plugins/comment/msproductdata.js
		

comment/index.php

			// /core/components/miniShop2/plugins/comment/index.php
			return array(
				'xpdo_meta_map' => array(
				'msProductData' => require_once dirname(__FILE__)
					.'/model/msproductdata.map.inc.php'
				),
				'manager' => array(
					'msProductData' => MODX_ASSETS_URL
						. 'components/minishop2/plugins/comment/msproductdata.js'
				)
			);
		
			// /core/components/minishop2/plugins/comment/model/msproductdata.map.inc.php		
			return [
				'fields' => ['color' => NULL],
				'fieldMeta' => [
					'comment' => [
						'dbtype' => 'varchar', 'precision' => '255', 'phptype' => 'string',
						'null' => true, 'default' => NULL
					]
				],
				'indexes' => [
					'comment' => [
						'alias' => 'comment', 'primary' => false, 'unique' => false, 'type' => 'BTREE',
						'columns' => ['comment' => ['length' => '', 'collation' => 'A', 'null' => false])
					]
				]
			);
		
			// /assets/components/minishop2/plugins/comment/msproductdata.js
			miniShop2.plugin.comment = {
				getFields: function(config) {
					return {
						comment: { xtype: 'textfield', fieldLabel: 'Comment' }
					}
				},
				getColumns: function() {
					return {
						comment: { width:50, sortable: false, editor: {
							xtype:'textfield', name: 'comment'}
						}
					}
				}
			};
		

MODX Power

Current status of MiniShop

Future of MiniShop. Good news

Vasiliy promised anounce version 3 in MODX Meetup Minsk
on 19th December.

Ecosystem

Store vs Marketplace

  • One developer or team
  • No way to add extra for sale
  • Support from team
    (best quality)
  • Quality of extras
  • Many independent developers
  • Easy to add own extra
  • Support from developer, no guarantee
  • Fee or percent to marketplace owner

Existing stores

I hope in future each store will growth to real marketplace.
It's have to impact, but give awesome results.

History of modstore.pro

How it works?

  1. Developer send Extra to Store
  2. Store check and validate developer and Extra
  3. Store publish Extra and provide payment tools
  4. After developer provide support to customers throught Store

For paid extras average commision is 30%.
Store guarantee support only for paid extras.

Numbers and dynamic

Now: Revenue grew 10 times, mSearch2 still in top, 25 authors

Is it easy?

¯\_(ツ)_/¯

How it create?

How it support?

Conclusions

Contacts

Thank you! Questions?

Sources on Github