Commit ba008812ee129cf65c94c940a7e1b4813d6dd9be

Authored by Administrator
1 parent 290fae5b

31.03.16 finish 1

common/behaviors/RuSlug.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\behaviors;
  4 +
  5 +use yii;
  6 +use yii\base\Behavior;
  7 +use yii\db\ActiveRecord;
  8 +use dosamigos\transliterator\TransliteratorHelper;
  9 +class RuSlug extends Behavior
  10 +{
  11 + public $in_attribute = 'name';
  12 + public $out_attribute = 'slug';
  13 + public $translit = true;
  14 +
  15 + public function events()
  16 + {
  17 + return [
  18 + ActiveRecord::EVENT_BEFORE_VALIDATE => 'getSlug'
  19 + ];
  20 + }
  21 +
  22 + public function getSlug( $event )
  23 + {
  24 + if ( empty( $this->owner->{$this->out_attribute} ) ) {
  25 + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->in_attribute} );
  26 + } else {
  27 + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->out_attribute} );
  28 + }
  29 + }
  30 +
  31 + private function generateSlug( $slug )
  32 + {
  33 + $slug = $this->translit( $slug );
  34 + if ( $this->checkUniqueSlug( $slug ) ) {
  35 + return $slug;
  36 + } else {
  37 + for ( $suffix = 2; !$this->checkUniqueSlug( $new_slug = $slug . '-' . $suffix ); $suffix++ ) {}
  38 + return $new_slug;
  39 + }
  40 + }
  41 +
  42 + private function slugify( $slug )
  43 + {
  44 + if ( $this->translit ) {
  45 + return yii\helpers\Inflector::slug( TransliteratorHelper::process( $slug ), '-', true );
  46 + } else {
  47 + return $this->slug( $slug, '-', true );
  48 + }
  49 + }
  50 +
  51 + private function slug( $string, $replacement = '-', $lowercase = true )
  52 + {
  53 + $string = preg_replace( '/[^\p{L}\p{Nd}]+/u', $replacement, $string );
  54 + $string = trim( $string, $replacement );
  55 + return $lowercase ? strtolower( $string ) : $string;
  56 + }
  57 +
  58 + private function checkUniqueSlug( $slug )
  59 + {
  60 + $pk = $this->owner->primaryKey();
  61 + $pk = $pk[0];
  62 +
  63 + $condition = $this->out_attribute . ' = :out_attribute';
  64 + $params = [ ':out_attribute' => $slug ];
  65 + if ( !$this->owner->isNewRecord ) {
  66 + $condition .= ' and ' . $pk . ' != :pk';
  67 + $params[':pk'] = $this->owner->{$pk};
  68 + }
  69 +
  70 + return !$this->owner->find()
  71 + ->where( $condition, $params )
  72 + ->one();
  73 + }
  74 +
  75 + static function translit ($string, $setting = 'all')
  76 + {
  77 + $letter = array (
  78 +
  79 + 'а' => 'a', 'б' => 'b', 'в' => 'v',
  80 + 'г' => 'g', 'д' => 'd', 'е' => 'e',
  81 + 'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
  82 + 'и' => 'i', 'й' => 'y', 'к' => 'k',
  83 + 'л' => 'l', 'м' => 'm', 'н' => 'n',
  84 + 'о' => 'o', 'п' => 'p', 'р' => 'r',
  85 + 'с' => 's', 'т' => 't', 'у' => 'u',
  86 + 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
  87 + 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
  88 + 'ь' => "", 'ы' => 'y', 'ъ' => "",
  89 + 'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
  90 + 'ї' => 'yi', 'є' => 'ye', 'і' => 'ee',
  91 +
  92 + 'А' => 'A', 'Б' => 'B', 'В' => 'V',
  93 + 'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
  94 + 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z',
  95 + 'И' => 'I', 'Й' => 'Y', 'К' => 'K',
  96 + 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
  97 + 'О' => 'O', 'П' => 'P', 'Р' => 'R',
  98 + 'С' => 'S', 'Т' => 'T', 'У' => 'U',
  99 + 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
  100 + 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch',
  101 + 'Ь' => "", 'Ы' => 'Y', 'Ъ' => "",
  102 + 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
  103 + 'Ї' => 'Yi', 'Є' => 'Ye', 'І' => 'Ee'
  104 + );
  105 +
  106 + $symbol = array (
  107 + ' ' => '-', "'" => '', '"' => '',
  108 + '!' => '', "@" => '', '#' => '',
  109 + '$' => '', "%" => '', '^' => '',
  110 + ';' => '', "*" => '', '(' => '',
  111 + ')' => '', "+" => '', '~' => '',
  112 + '.' => '', ',' => '-', '?' => '',
  113 + '…' => '', '№' => 'N', '°' => '',
  114 + '`' => '', '|' => '', '&' => '-and-',
  115 + '<' => '', '>' => ''
  116 + );
  117 +
  118 + if ($setting == 'all')
  119 + {
  120 + $converter = $letter + $symbol;
  121 + }
  122 + else if ($setting == 'letter')
  123 + {
  124 + $converter = $letter;
  125 + }
  126 + else if ($setting == 'symbol')
  127 + {
  128 + $converter = $symbol;
  129 + }
  130 +
  131 + $url = strtr ($string, $converter);
  132 +
  133 + $url = str_replace ("---", '-', $url);
  134 + $url = str_replace ("--", '-', $url);
  135 +
  136 + return $url;
  137 + }
  138 +
  139 +}
0 \ No newline at end of file 140 \ No newline at end of file
common/models/TemplateLocation.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace app\models;
  4 +
  5 +class TemplateLocation extends \yii\db\ActiveRecord
  6 +{
  7 + public static function tableName()
  8 + {
  9 + return 'template_location';
  10 + }
  11 +
  12 + public function findFreeLocationForBanner ($template_location_id = false)
  13 + {
  14 + return TemplateLocation::find()
  15 + ->where('
  16 + template_location_id NOT IN
  17 + (
  18 + SELECT template_location_id
  19 + FROM banner
  20 + '.($template_location_id ? 'WHERE template_location_id != '.$template_location_id : '').'
  21 + )
  22 + AND is_banner = 1
  23 + ')
  24 + ->all();
  25 + }
  26 +
  27 + public function findFreeLocationForSlider ()
  28 + {
  29 + return TemplateLocation::find()
  30 + ->where('
  31 + template_location_id NOT IN
  32 + (
  33 + SELECT template_location_id
  34 + FROM slider
  35 + )
  36 + AND is_slider = 1
  37 + ')
  38 + ->all();
  39 + }
  40 +}
0 \ No newline at end of file 41 \ No newline at end of file
common/modules/product/models/Category.php
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 2
3 namespace common\modules\product\models; 3 namespace common\modules\product\models;
4 4
5 -use common\behaviors\Slug; 5 +use common\behaviors\RuSlug;
6 use common\components\artboxtree\ArtboxTreeBehavior; 6 use common\components\artboxtree\ArtboxTreeBehavior;
7 use common\modules\relation\relationBehavior; 7 use common\modules\relation\relationBehavior;
8 use common\modules\rubrication\behaviors\ArtboxSynonymBehavior; 8 use common\modules\rubrication\behaviors\ArtboxSynonymBehavior;
@@ -41,7 +41,7 @@ class Category extends \yii\db\ActiveRecord @@ -41,7 +41,7 @@ class Category extends \yii\db\ActiveRecord
41 'keyNamePath' => 'path', 41 'keyNamePath' => 'path',
42 ], 42 ],
43 'slug' => [ 43 'slug' => [
44 - 'class' => Slug::className(), 44 + 'class' => RuSlug::className(),
45 'in_attribute' => 'name', 45 'in_attribute' => 'name',
46 'out_attribute' => 'alias', 46 'out_attribute' => 'alias',
47 'translit' => true 47 'translit' => true
common/translation/ru/app.php
@@ -31,4 +31,5 @@ return [ @@ -31,4 +31,5 @@ return [
31 'personal_data' => 'Личные данные', 31 'personal_data' => 'Личные данные',
32 'my_orders' => 'Мои заказы', 32 'my_orders' => 'Мои заказы',
33 'bookmarks' => 'Закладки', 33 'bookmarks' => 'Закладки',
  34 + 'basket' => 'Корзина',
34 ]; 35 ];
35 \ No newline at end of file 36 \ No newline at end of file
common/widgets/BasketHead.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: vitaliy
  5 + * Date: 31.03.16
  6 + * Time: 12:20
  7 + */
  8 +
  9 +namespace common\widgets;
  10 +use common\modules\product\models\ProductVariant;
  11 +use yii\base\Widget;
  12 +
  13 +
  14 +class BasketHead extends Widget
  15 +{
  16 +
  17 + public function init(){
  18 +
  19 + parent::init();
  20 +
  21 + }
  22 +
  23 +
  24 + public function run()
  25 + {
  26 + $sessionData = \Yii::$app->session->get('order');
  27 + unset($sessionData['order_id']);
  28 + $count = count($sessionData);
  29 + $price = 0;
  30 + if(is_array($sessionData) && !empty($sessionData)){
  31 +
  32 + $variant = ProductVariant::find()->where(['product_variant_id'=>array_keys($sessionData)])->indexBy('product_variant_id')->all();
  33 +
  34 +
  35 + foreach ($sessionData as $k => $item) {
  36 + $sessionData[$k]['item'] = $variant[$k];
  37 + $price += $variant[$k]->price * $sessionData[$k]['num'];
  38 + }
  39 +
  40 +
  41 + return $this->render('basket_head',[
  42 + 'items'=>$sessionData,
  43 + 'count' => $count,
  44 + 'price' => $price
  45 + ]);
  46 +
  47 + }
  48 +
  49 + }
  50 +}
0 \ No newline at end of file 51 \ No newline at end of file
common/widgets/BasketModal.php
@@ -31,7 +31,7 @@ class BasketModal extends Widget @@ -31,7 +31,7 @@ class BasketModal extends Widget
31 } 31 }
32 32
33 33
34 - return $this->render('busket_modal',[ 34 + return $this->render('basket_modal',[
35 'items'=>$sessionData, 35 'items'=>$sessionData,
36 'count' => $count, 36 'count' => $count,
37 'price' => $price 37 'price' => $price
common/widgets/views/basket_head.php 0 → 100644
  1 +<?php
  2 +use yii\bootstrap\Html;
  3 +?>
  4 +<div class="basket_head">
  5 + <img src="/images/ico_basket.png" class="bh_cell img">
  6 + <div class="bh_cell text">
  7 + <div class="basket_head_title"><?= Yii::t('app','basket');?> <?= $count? Html::tag('span',$count,['class'=>'head_basket_count']) :'' ?></div>
  8 + </div>
  9 + <i class="head-down bh_cell"></i>
  10 +</div>
common/widgets/views/busket_modal.php renamed to common/widgets/views/basket_modal.php
console/migrations/m160331_122305_template_location.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +class m160331_122305_template_location extends Migration
  6 +{
  7 + public function up()
  8 + {
  9 + $this->createTable('{{%template_location}}', [
  10 + 'template_location_id' => $this->primaryKey(),
  11 + 'template_location_name' => $this->string(255)->notNull(),
  12 + 'template_location_title' => $this->string(255),
  13 + 'width' => $this->integer(4)->notNull(),
  14 + 'height' => $this->integer(4)->notNull(),
  15 + 'sort' => $this->integer(6)->notNull(),
  16 + 'is_slider' => $this->smallInteger(1),
  17 + 'is_banner' => $this->smallInteger(1),
  18 + ]);
  19 + }
  20 +
  21 + public function down()
  22 + {
  23 + $this->dropTable('{{%template_location}}');
  24 + }
  25 +
  26 +
  27 +}
console/migrations/m160331_132149_slider.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +class m160331_132149_slider extends Migration
  6 +{
  7 + public function up()
  8 + {
  9 + $this->createTable('{{%slider}}', [
  10 + 'slider_id' => $this->primaryKey(),
  11 + 'template_location_id' => $this->integer(4)->notNull(),
  12 + 'speed' => $this->integer(4),
  13 + 'duration' => $this->integer(4),
  14 + 'title' => $this->string(200),
  15 + 'status' => $this->smallInteger(1),
  16 + ]);
  17 + $this->addForeignKey('template_location_slider_fk', 'template_location', 'template_location_id', 'slider', 'template_location_id', 'CASCADE', 'CASCADE');
  18 + }
  19 +
  20 + public function down()
  21 + {
  22 + //$this->dropForeignKey('template_location_slider_fk', '{{%template_location}}');
  23 + $this->dropTable('{{%slider}}');
  24 + }
  25 +
  26 +
  27 +}
frontend/views/layouts/main.php
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 /* @var $content string */ 4 /* @var $content string */
5 5
6 6
  7 +use common\widgets\BasketHead;
7 use common\widgets\BasketModal; 8 use common\widgets\BasketModal;
8 use frontend\assets\AppAsset; 9 use frontend\assets\AppAsset;
9 use yii\helpers\Html; 10 use yii\helpers\Html;
@@ -68,14 +69,7 @@ AppAsset::register($this); @@ -68,14 +69,7 @@ AppAsset::register($this);
68 <div class="phone_desc">Звоните с 9.00 до 18.00 по будням</div> 69 <div class="phone_desc">Звоните с 9.00 до 18.00 по будням</div>
69 </div> 70 </div>
70 </div> 71 </div>
71 -  
72 - <div class="basket_head">  
73 - <img src="/images/ico_basket.png" class="bh_cell img">  
74 - <div class="bh_cell text">  
75 - <div class="basket_head_title">Корзина</div>  
76 - </div>  
77 - <i class="head-down bh_cell"></i>  
78 - </div> 72 + <?= BasketHead::widget([]); ?>
79 73
80 </div> 74 </div>
81 75
frontend/web/css/concat_all.css
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
5 .w_960 { 5 .w_960 {
6 width: 960px; 6 width: 960px;
7 margin: auto; 7 margin: auto;
  8 + overflow: hidden;
  9 +
8 } 10 }
9 11
10 .cat_p_bradcrump { 12 .cat_p_bradcrump {
@@ -1013,7 +1015,7 @@ hr { @@ -1013,7 +1015,7 @@ hr {
1013 .item_3_blocks_wrap .busket_block .quick_order form .quick_order_phone { 1015 .item_3_blocks_wrap .busket_block .quick_order form .quick_order_phone {
1014 font-size: 12px; 1016 font-size: 12px;
1015 color: #333333; 1017 color: #333333;
1016 - padding: 9px; 1018 + padding: 10px;
1017 border: 1px solid #C6C7C9; 1019 border: 1px solid #C6C7C9;
1018 -webkit-border-radius: 2px; 1020 -webkit-border-radius: 2px;
1019 border-radius: 2px; 1021 border-radius: 2px;
@@ -3227,4 +3229,8 @@ span.red { @@ -3227,4 +3229,8 @@ span.red {
3227 .product_service ul li.item3 { 3229 .product_service ul li.item3 {
3228 background: url('/images/li3.png') left no-repeat; 3230 background: url('/images/li3.png') left no-repeat;
3229 padding: 3px 23px; 3231 padding: 3px 23px;
  3232 +}
  3233 +
  3234 +.head_basket_count{
  3235 + color:#6aa033;
3230 } 3236 }
3231 \ No newline at end of file 3237 \ No newline at end of file
frontend/web/js/basket.js
@@ -3,6 +3,18 @@ $(document).ready(function(){ @@ -3,6 +3,18 @@ $(document).ready(function(){
3 var result_block = $('.basket_result'); 3 var result_block = $('.basket_result');
4 var one_item_block = $('.busket_block'); 4 var one_item_block = $('.busket_block');
5 5
  6 + function countItems(){
  7 + var length = $('.busket_modal_01').find('.order_list_li').length;
  8 + if(length >= 1){
  9 + $('.head_basket_count').html(length);
  10 + $('.all_count').html(length);
  11 + } else {
  12 + $('.head_basket_count').html('');
  13 + $('.all_count').html('');
  14 + }
  15 + }
  16 +
  17 +
6 18
7 function changeAjaxPrice(id, num){ 19 function changeAjaxPrice(id, num){
8 $.post( "/orders/buy-items", {id: id, num:num}, function( data ) { 20 $.post( "/orders/buy-items", {id: id, num:num}, function( data ) {
@@ -23,8 +35,10 @@ $(document).ready(function(){ @@ -23,8 +35,10 @@ $(document).ready(function(){
23 var id = $(this).data('id'); 35 var id = $(this).data('id');
24 $.post( "/orders/buy-items", {id: id, num:1}, function( data ) { 36 $.post( "/orders/buy-items", {id: id, num:1}, function( data ) {
25 $('.basket_result').each(function(){ 37 $('.basket_result').each(function(){
26 - $(this).html(data) 38 + $(this).html(data);
  39 + countItems();
27 }); 40 });
  41 +
28 }); 42 });
29 43
30 }); 44 });
@@ -54,7 +68,7 @@ $(document).ready(function(){ @@ -54,7 +68,7 @@ $(document).ready(function(){
54 block.remove(); 68 block.remove();
55 }); 69 });
56 countPrise(forCount); 70 countPrise(forCount);
57 - 71 + countItems();
58 72
59 73
60 74