Yii2-order
ΠΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠ½Π°Π»Π° Π·Π°ΠΊΠ°Π·Π° Π½Π° ΡΠ°ΠΉΡΠ΅. Π‘Π΅ΠΉΡΠ°Ρ Π² Π·Π°ΠΊΠ°Π· ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠ·ΠΈΠ½Ρ, ΡΠΎΠ²Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ dvizh/yii2-cart., (*1)
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»:, (*2)
- ΠΡΠΎΡΠΌΠΎΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Π°ΠΌΠΈ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠΌΠΈ Π·Π°ΠΊΠ°Π·Π° Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΠΏΠ»Π°ΡΡ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, (*3)
php composer require dvizh/yii2-order "@dev"
ΠΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² composer.json, (*4)
"dvizh/yii2-order": "@dev",
Π Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, (*5)
php composer update
ΠΠ°Π»Π΅Π΅, ΠΌΠΈΠ³ΡΠΈΡΡΠ΅ΠΌ Π±Π°Π·Ρ:, (*6)
php yii migrate --migrationPath=vendor/dvizh/yii2-order/src/migrations
ΠΠ°Π»Π΅Π΅, ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΊΠΎΡΠ·ΠΈΠ½ΠΎΠΉ. Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ dvizh/yii2-cart, (*7)
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π°ΡΠΏΠ΅ΠΊΡ:, (*8)
'putElements'
];
}
public function putElements($event)
{
$order = $event->model;
foreach(yii::$app->cart->elements as $element) {
$elementModel = new Element;
$elementModel->setOrderId($order->id);
$elementModel->setAssigment($order->is_assigment);
$elementModel->setModelName($element->getModelName());
$elementModel->setName($element->getName());
$elementModel->setItemId($element->getItemId());
$elementModel->setCount($element->getCount());
$elementModel->setBasePrice($element->getPrice(false));
$elementModel->setPrice($element->getPrice());
$elementModel->setOptions(json_encode($element->getOptions()));
$elementModel->setDescription('');
$elementModel->saveData();
}
$order->base_cost = 0;
$order->cost = 0;
foreach($order->elements as $element) {
$order->base_cost += ($element->base_price*$element->count);
$order->cost += ($element->price*$element->count);
}
$order->save();
yii::$app->cart->truncate();
}
}
```
Π§ΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π°ΠΊΠ°Π·Π° Ρ ΠΊΠΎΡΠ·ΠΈΠ½ΠΎΠΉ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π°ΡΠΏΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π°ΠΊΠ°Π·Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅:
```
'order' => [
'class' => 'dvizh\order\Module',
//...
'as order_filling' => '\common\aspects\OrderFilling',
],
```
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ
---------------------------------
ΠΡΠ»ΠΈ ΠΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π²Π½ΠΎΡΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΉ Π² ΠΊΠΎΠ΄, Π»ΡΡΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅ΡΠ΅ Ρ Github ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² Π½ΡΠΆΠ½ΡΡ ΠΏΠ°ΠΏΠΊΡ:
```
git clone https://github.com/dvizh/yii2-order.git
```
Π composer.json Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ ΠΏΡΡΡ Π΄ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ:
```
"autoload": {
"psr-4": {
"dvizh\\order\\": "common/modules/order"
}
}
```
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ update:
```
php composer update
```
ΠΠ΅Π»Π°Π΅ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ:
```
php yii migrate --migrationPath=common/modules/order/migrations
```
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³:
```
'bootstrap' => ['dvizh\order\Bootstrap'],
```
Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Ρ ΠΊΠΎΡΠ·ΠΈΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
---------------------------------
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ order
```php
'modules' => [
'order' => [
'class' => 'dvizh\order\Module',
'layoutPath' => 'frontend\views\layouts',
'successUrl' => '/page/thanks', //Π‘ΡΡΠ°Π½ΠΈΡΠ°, ΠΊΡΠ΄Π° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Π°
'adminNotificationEmail' => 'test@yandex.ru', //ΠΡΠ»ΠΎ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΊΠ°Π·ΠΎΠ²
],
//...
]
```
Π‘Π΅ΡΠ²ΠΈΡΡ
---------------------------------
ΠΠΎΠ΄ΡΠ»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡ Π² yii2 (Π² Service locator) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ order (ΡΠ΅ΡΠ²ΠΈΡ), ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· yii::$app->order ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ:
* get($id) - ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°ΠΊΠ°Π· ΠΏΠΎ ID
* getStatInMoth($month) - ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π·Π°ΠΊΠ°Π·ΠΎΠ² Π·Π° ΠΌΠ΅ΡΡΡ
* getStatByDate($date) - ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π·Π°ΠΊΠ°Π·ΠΎΠ² Π·Π° Π΄Π΅Π½Ρ
* getStatByDatePeriod($dateStart, $dateStop) - ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π·Π°ΠΊΠ°Π·ΠΎΠ² Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄
* getStatByModelAndDatePeriod($model, $dateStart, $dateStop) - ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄
ΠΠΈΠ΄ΠΆΠ΅ΡΡ
---------------------------------
ΠΠ° Π²ΡΠ²ΠΎΠ΄ ΡΠΎΡΠΌΡ Π·Π°ΠΊΠ°Π·Π° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ dvizh\order\widgets\OrderForm
```php
=OrderForm::widget();?>
ΠΠ½ΠΎΠΏΠΊΠ° "Π·Π°ΠΊΠ°Π· Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ" - dvizh\order\widgets\OneClick:, (*9)
<?=OneClick::widget(['model' => $model]);?>
Π’ΡΠΈΠ³Π³Π΅ΡΡ
Π Module:, (*10)
- create - ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Π°
- delete_order - ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Π°
- delete_element - ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π·Π°ΠΊΠ°Π·Π°
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΈΠ³:, (*11)
'order' => [
'class' => 'dvizh\order\Module',
'on create' => function($event) {
send_sms(...); //ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π‘ΠΠ‘ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
},
],
ΠΠ½Π»Π°ΠΉΠ½ ΠΎΠΏΠ»Π°ΡΠ°
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΠ»Π°ΡΡ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ?r=/order/payment-type/index, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ±, Π³Π΄Π΅ Π² ΠΏΠΎΠ»Π΅ "ΠΠΈΠ΄ΠΆΠ΅Ρ" ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΊΠ»Π°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΡΠΎΡΠΌΡ ΠΎΠΏΠ»Π°ΡΡ. ΠΠΈΠ΄ΠΆΠ΅ΡΡ ΠΎΠΏΠ»Π°ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ., (*12)
Π‘ΠΊΡΠΈΠ½ΡΠΎΡΡ
Π€ΠΎΡΠΌΠ° Π·Π°ΠΊΠ°Π·Π°
ΠΠ»Π°Π²Π½Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ
ΠΠΎΠΈΡΠΊ ΠΏΠΎ Π·Π°ΠΊΠ°Π·Π°ΠΌ
Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
, (*13)