c80_yax 0.1.0.4 → 0.1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/app/admin/c80_yax/cats.rb +2 -2
- data/app/admin/c80_yax/colors.rb +38 -0
- data/app/admin/c80_yax/items.rb +5 -2
- data/app/admin/c80_yax/prop_names.rb +1 -1
- data/app/admin/c80_yax/uoms.rb +1 -1
- data/app/assets/javascripts/backend/strsubcats.js +0 -12
- data/app/assets/javascripts/c80_yax.js.coffee +3 -1
- data/app/assets/javascripts/lib_backend/init_select_picker.js +13 -0
- data/app/assets/stylesheets/c80_yax/elems/cats_iconed_list.scss +73 -0
- data/app/assets/stylesheets/c80_yax.scss +3 -1
- data/app/helpers/c80_yax/cats/cat_lists_helper.rb +15 -0
- data/app/helpers/c80_yax/cats/cat_url_helper.rb +11 -0
- data/app/helpers/c80_yax/cats/cat_view_helper.rb +11 -1
- data/app/models/c80_yax/cat.rb +2 -2
- data/app/models/c80_yax/color.rb +21 -0
- data/app/models/c80_yax/common_prop.rb +1 -0
- data/app/models/c80_yax/item.rb +1 -0
- data/app/models/c80_yax/main_prop.rb +1 -0
- data/app/models/c80_yax/mixins/cat/database.rb +28 -0
- data/app/models/c80_yax/price_prop.rb +1 -0
- data/app/models/c80_yax/strsubcat.rb +2 -0
- data/app/views/c80_yax/cats/_cats_iconed_list.html.erb +35 -0
- data/config/locales/cat/ru.yml +20 -0
- data/config/locales/color/ru.yml +16 -0
- data/config/locales/item/ru.yml +28 -0
- data/config/locales/prop_name/ru.yml +15 -0
- data/config/locales/ru.yml +1 -75
- data/config/locales/strsubcat/ru.yml +38 -0
- data/config/locales/uom/ru.yml +15 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20161108095505_create_c80_yax_uoms.rb +2 -1
- data/db/migrate/20161108095950_create_c80_yax_prop_names.rb +4 -2
- data/db/migrate/20170625175353_create_c80_yax_colors.rb +10 -0
- data/db/migrate/20170625180000_create_c80_yax_join_table_colors_items.rb +12 -0
- data/engines/pack/README.md +52 -0
- data/engines/pack/app/admin/pack/suites.rb +55 -0
- data/engines/pack/app/assets/javascripts/backend/suites.js +14 -0
- data/engines/pack/app/assets/javascripts/packs.js.coffee +1 -0
- data/engines/pack/app/models/pack/srow.rb +8 -0
- data/engines/pack/app/models/pack/suite.rb +16 -0
- data/engines/pack/config/locales/suite/ru.yml +15 -0
- data/engines/pack/db/migrate/20170625205656_create_c80_yax_pack_suites.rb +10 -0
- data/engines/pack/db/migrate/20170625215151_create_c80_yax_pack_srows.rb +15 -0
- data/engines/pack/lib/pack/engine.rb +25 -0
- data/engines/pack/lib/pack.rb +7 -0
- data/lib/c80_yax/engine.rb +1 -0
- data/lib/c80_yax/version.rb +1 -1
- data/lib/c80_yax.rb +1 -0
- metadata +29 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f84d6d925b03319291e02341f11afd2d6125d78
|
4
|
+
data.tar.gz: 841ecbebbd29adaa0f60f8bd9842eded93287030
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b76cf0581e9c5a3d597756b7f9cd39cf132ef6af0e7cd2a3087abf4de496d5655a3b31405ff0a77dfbe965219dc68fa1576f69984a77155493fbb0bbf781bb48
|
7
|
+
data.tar.gz: f1b287c9f282d1b04f97c3626f520084d357ea25d6c0efb1b3e2143dae87895122f5db305a62c63e637f348b4533b5beddcc182cba2633396536e167fff7dd41
|
data/Gemfile
CHANGED
data/app/admin/c80_yax/cats.rb
CHANGED
@@ -20,7 +20,7 @@ ActiveAdmin.register C80Yax::Cat, as: 'Cat' do
|
|
20
20
|
column :ord
|
21
21
|
column :title
|
22
22
|
column :image do |cat|
|
23
|
-
|
23
|
+
cat_image_tag(cat)
|
24
24
|
end
|
25
25
|
column :strsubcats do |cat|
|
26
26
|
res = '-'
|
@@ -41,7 +41,7 @@ ActiveAdmin.register C80Yax::Cat, as: 'Cat' do
|
|
41
41
|
f.inputs 'Свойства категории' do
|
42
42
|
f.input :title
|
43
43
|
f.input :ord
|
44
|
-
f.input :image, :as => :file, :hint =>
|
44
|
+
f.input :image, :as => :file, :hint => cat_image_tag(f.object)
|
45
45
|
f.input :strsubcats, :as => :check_boxes
|
46
46
|
end
|
47
47
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
ActiveAdmin.register C80Yax::Color, as: 'Color' do
|
2
|
+
|
3
|
+
menu :label => proc{ I18n.t('c80_yax.active_admin.menu.color')},
|
4
|
+
:parent => 'x_c80_yax',
|
5
|
+
:priority => 8
|
6
|
+
|
7
|
+
permit_params :title,
|
8
|
+
:value,
|
9
|
+
:skidka,
|
10
|
+
:item_ids => []
|
11
|
+
|
12
|
+
config.batch_actions = false
|
13
|
+
config.sort_order = 'id_asc'
|
14
|
+
before_filter :skip_sidebar!, :only => :index
|
15
|
+
|
16
|
+
index do
|
17
|
+
id_column
|
18
|
+
column :title
|
19
|
+
column :value
|
20
|
+
column :skidka
|
21
|
+
column :items
|
22
|
+
|
23
|
+
actions
|
24
|
+
end
|
25
|
+
|
26
|
+
form(:html => {:multipart => true}) do |f|
|
27
|
+
|
28
|
+
f.inputs 'Свойства' do
|
29
|
+
f.input :title
|
30
|
+
f.input :value, :as => :color
|
31
|
+
f.input :skidka
|
32
|
+
f.input :items, :as => :check_boxes
|
33
|
+
end
|
34
|
+
|
35
|
+
f.actions
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/app/admin/c80_yax/items.rb
CHANGED
@@ -18,7 +18,8 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
|
|
18
18
|
:strsubcat_id,
|
19
19
|
:iphotos_attributes => [:id, :image, :_destroy],
|
20
20
|
:item_props_attributes => [:value, :_destroy, :prop_name_id, :id],
|
21
|
-
:vendor_ids => []
|
21
|
+
:vendor_ids => [],
|
22
|
+
:color_ids => []
|
22
23
|
# :gallery_ids => [],
|
23
24
|
# :related_child_ids => []
|
24
25
|
|
@@ -51,6 +52,8 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
|
|
51
52
|
print_vendor(itm)
|
52
53
|
end
|
53
54
|
|
55
|
+
column :colors
|
56
|
+
|
54
57
|
actions
|
55
58
|
end
|
56
59
|
|
@@ -104,7 +107,7 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
|
|
104
107
|
:multiple => false
|
105
108
|
},
|
106
109
|
:include_blank => true
|
107
|
-
|
110
|
+
f.input :colors, :as => :check_boxes
|
108
111
|
end
|
109
112
|
|
110
113
|
f.inputs 'Характеристики' do
|
data/app/admin/c80_yax/uoms.rb
CHANGED
@@ -1,17 +1,5 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
// при клике по habtm кнопке "добавить",
|
4
|
-
// на всякий случай,
|
5
|
-
// инициализируем в появившемся на экране блоке
|
6
|
-
// возможный bootstrap select picker
|
7
|
-
var init_select_picker = function (){
|
8
|
-
$('.has_many_add').on('click', function (){
|
9
|
-
setTimeout(function() {
|
10
|
-
$('.selectpicker').selectpicker();
|
11
|
-
}, 40);
|
12
|
-
});
|
13
|
-
};
|
14
|
-
|
15
3
|
var f_edit = function (){
|
16
4
|
init_select_picker();
|
17
5
|
};
|
@@ -1,8 +1,10 @@
|
|
1
1
|
|
2
2
|
#= require lib_backend/init
|
3
|
+
#= require lib_backend/init_select_picker
|
3
4
|
#= require lib_backend/collapsable-groups
|
4
5
|
#= require lib_backend/jalert
|
5
6
|
#= require lib_backend/loading
|
6
7
|
#= require lib_backend/custom_columns
|
7
8
|
|
8
|
-
#= require_tree ./backend
|
9
|
+
#= require_tree ./backend
|
10
|
+
#= require packs
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
// при клике по habtm кнопке "добавить",
|
4
|
+
// на всякий случай,
|
5
|
+
// инициализируем в появившемся на экране блоке
|
6
|
+
// возможный bootstrap select picker
|
7
|
+
var init_select_picker = function (){
|
8
|
+
$('.has_many_add').on('click', function (){
|
9
|
+
setTimeout(function() {
|
10
|
+
$('.selectpicker').selectpicker();
|
11
|
+
}, 40);
|
12
|
+
});
|
13
|
+
};
|
@@ -0,0 +1,73 @@
|
|
1
|
+
$cat_icon_width: 290px;
|
2
|
+
$cat_icon_height: 240px;
|
3
|
+
|
4
|
+
//noinspection SassScssUnresolvedMixin
|
5
|
+
div.cats_iconed_list {
|
6
|
+
@include clearfix;
|
7
|
+
margin: 15px;
|
8
|
+
|
9
|
+
> ul {
|
10
|
+
@include clearfix;
|
11
|
+
padding: 0;
|
12
|
+
margin: 0;
|
13
|
+
list-style: none;
|
14
|
+
/*width: 857px;*/
|
15
|
+
position: relative;
|
16
|
+
|
17
|
+
> li {
|
18
|
+
float: left;
|
19
|
+
/*margin-right: 59px;*/
|
20
|
+
&.child-4th { margin-right:0; }
|
21
|
+
|
22
|
+
> a {
|
23
|
+
display: block;
|
24
|
+
width: $cat_icon_width;
|
25
|
+
height: $cat_icon_height;
|
26
|
+
/*background: transparent url(image_path('strcat_button_bg.png')) no-repeat 0 0;*/
|
27
|
+
position: relative;
|
28
|
+
text-decoration: none !important;
|
29
|
+
outline: none;
|
30
|
+
|
31
|
+
span {
|
32
|
+
position: absolute;
|
33
|
+
display: block;
|
34
|
+
width: 100%;
|
35
|
+
text-decoration: none !important;
|
36
|
+
|
37
|
+
&.icon {
|
38
|
+
width: $cat_icon_width;
|
39
|
+
height: $cat_icon_height;
|
40
|
+
}
|
41
|
+
|
42
|
+
&.title {
|
43
|
+
bottom: 15px;
|
44
|
+
text-align: center;
|
45
|
+
padding: 0 30px;
|
46
|
+
color: #000000;
|
47
|
+
/*font-family: pf_din_text_cond_pro_boldRg, monospace, monospace;*/
|
48
|
+
font-weight: normal !important;
|
49
|
+
font-size: 12px;
|
50
|
+
text-transform: uppercase;
|
51
|
+
}
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
&:hover {
|
56
|
+
text-decoration: none !important;
|
57
|
+
span { text-decoration: none !important; }
|
58
|
+
}
|
59
|
+
|
60
|
+
&.active {
|
61
|
+
}
|
62
|
+
|
63
|
+
&:focus {
|
64
|
+
text-decoration: none !important;
|
65
|
+
span { text-decoration: none !important; }
|
66
|
+
}
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
73
|
+
}
|
@@ -2,7 +2,8 @@ module C80Yax
|
|
2
2
|
module Cats
|
3
3
|
module CatViewHelper
|
4
4
|
|
5
|
-
|
5
|
+
# выдать html строку с image_tag картинки категории
|
6
|
+
def cat_image_tag(cat, thumb_type = 'thumb_md')
|
6
7
|
res = ''
|
7
8
|
if cat.image.present?
|
8
9
|
res = image_tag cat.image.thumb_md
|
@@ -10,6 +11,15 @@ module C80Yax
|
|
10
11
|
res.html_safe
|
11
12
|
end
|
12
13
|
|
14
|
+
# выдать урл картинки категории
|
15
|
+
def cat_image_url(cat, thumb_type = 'thumb_md')
|
16
|
+
res = ''
|
17
|
+
if cat.image.present?
|
18
|
+
res = cat.image.send(thumb_type)
|
19
|
+
end
|
20
|
+
res
|
21
|
+
end
|
22
|
+
|
13
23
|
end
|
14
24
|
end
|
15
25
|
end
|
data/app/models/c80_yax/cat.rb
CHANGED
@@ -3,6 +3,8 @@ require 'babosa'
|
|
3
3
|
module C80Yax
|
4
4
|
class Cat < ActiveRecord::Base
|
5
5
|
|
6
|
+
include C80Yax::Mixins::Cat::Database
|
7
|
+
|
6
8
|
validates :title,
|
7
9
|
presence: true,
|
8
10
|
uniqueness: true,
|
@@ -22,8 +24,6 @@ module C80Yax
|
|
22
24
|
input.to_s.to_slug.normalize(transliterations: :russian).to_s
|
23
25
|
end
|
24
26
|
|
25
|
-
scope :menu_order, -> {order(:ord => :asc)}
|
26
|
-
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module C80Yax
|
2
|
+
class Color < ActiveRecord::Base
|
3
|
+
|
4
|
+
validates :title,
|
5
|
+
presence: true,
|
6
|
+
uniqueness: true,
|
7
|
+
length: { in: 2..50 }
|
8
|
+
|
9
|
+
validates :value,
|
10
|
+
presence: true,
|
11
|
+
uniqueness: true,
|
12
|
+
length: { in: 2..50 }
|
13
|
+
|
14
|
+
validates :skidka,
|
15
|
+
length: { in: 3..250 }
|
16
|
+
|
17
|
+
has_and_belongs_to_many :items
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/app/models/c80_yax/item.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module C80Yax
|
2
|
+
module Mixins
|
3
|
+
module Cat
|
4
|
+
module Database
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
base.instance_eval do
|
9
|
+
scope :menu_order, -> {order(:ord => :asc)}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
# выдать первые N категорий, отсортированные
|
18
|
+
# в ord порядке
|
19
|
+
|
20
|
+
def iconed_list(n)
|
21
|
+
self.menu_order.limit(n)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -11,6 +11,7 @@ class C80Yax::Strsubcat < ActiveRecord::Base
|
|
11
11
|
length: { in: 6..50 }
|
12
12
|
|
13
13
|
has_and_belongs_to_many :cats
|
14
|
+
public_constant :HABTM_Cats
|
14
15
|
|
15
16
|
has_many :subordinates,
|
16
17
|
class_name: 'C80Yax::Strsubcat',
|
@@ -22,6 +23,7 @@ class C80Yax::Strsubcat < ActiveRecord::Base
|
|
22
23
|
has_and_belongs_to_many :prop_names,
|
23
24
|
:after_add => :after_add_prop_names,
|
24
25
|
:after_remove => :after_remove_prop_names
|
26
|
+
public_constant :HABTM_PropNames
|
25
27
|
|
26
28
|
has_many :items, :dependent => :destroy
|
27
29
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<%
|
2
|
+
# Квадратные кнопки категорий
|
3
|
+
#
|
4
|
+
# k - счётчик элементов в строке, для того, чтобы симулировать last-child селектор: у каждого 4-го элемента (последнего в строке) убираем margin справа
|
5
|
+
#
|
6
|
+
%>
|
7
|
+
<div class="cats_iconed_list">
|
8
|
+
<ul>
|
9
|
+
|
10
|
+
<% cats.each_with_index do |cat, index| %>
|
11
|
+
<% k = index % 4 %>
|
12
|
+
<li class="child-<%=k+1%>th">
|
13
|
+
|
14
|
+
<%= link_to "#{cat_normal_url(cat)}",
|
15
|
+
:title => cat.title,
|
16
|
+
:class => 'a_cat_nav',
|
17
|
+
:id => "a_#{cat.slug}",
|
18
|
+
:role => 'button',
|
19
|
+
:tabindex => index,
|
20
|
+
:data => {
|
21
|
+
:cat_slug => cat.slug,
|
22
|
+
# :html => true,
|
23
|
+
# :toggle => 'popover',
|
24
|
+
# :trigger => 'click'
|
25
|
+
} do %>
|
26
|
+
<span class="icon" style="background: transparent url(<%= cat_image_url(cat) %>) no-repeat 50% 50%;"></span>
|
27
|
+
<span class="title"><%= cat.title %></span>
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
</li>
|
31
|
+
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
</ul>
|
35
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
cat: 'Категории'
|
6
|
+
activerecord:
|
7
|
+
models:
|
8
|
+
cat:
|
9
|
+
one: 'категорию'
|
10
|
+
other: 'Категории'
|
11
|
+
attributes:
|
12
|
+
c80_yax/cat:
|
13
|
+
id: 'id'
|
14
|
+
ord: 'Порядковый №'
|
15
|
+
title: 'Название'
|
16
|
+
slug: 'Friendly URL'
|
17
|
+
image: 'Изображение'
|
18
|
+
strsubcats: 'Подкатегории'
|
19
|
+
created_at: 'Дата создания'
|
20
|
+
updated_at: 'Обновлено'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
color: 'Цвета'
|
6
|
+
activerecord:
|
7
|
+
models:
|
8
|
+
color:
|
9
|
+
one: 'цвет'
|
10
|
+
other: 'Цвета'
|
11
|
+
attributes:
|
12
|
+
c80_yax/color:
|
13
|
+
title: 'Название'
|
14
|
+
value: 'Значение'
|
15
|
+
skidka: 'Алгоритм скидки'
|
16
|
+
items: 'Назначен товарам'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
item: 'Товары'
|
6
|
+
activerecord:
|
7
|
+
models:
|
8
|
+
item:
|
9
|
+
one: 'товар'
|
10
|
+
other: 'Товары'
|
11
|
+
attributes:
|
12
|
+
c80_yax/item:
|
13
|
+
id: 'id'
|
14
|
+
title: 'Название'
|
15
|
+
short_desc: 'Краткое описание'
|
16
|
+
full_desc: 'Подробное описание'
|
17
|
+
is_hit: 'Хит'
|
18
|
+
is_sale: 'Акция'
|
19
|
+
is_main: 'Выводить на главной'
|
20
|
+
is_gift: 'Подарочный набор'
|
21
|
+
is_starting: 'Стартовый набор'
|
22
|
+
is_available: 'В наличии'
|
23
|
+
strsubcat: 'Подкатегория'
|
24
|
+
cat: 'Категория'
|
25
|
+
related_parent: 'related_parent'
|
26
|
+
related_childs: 'related_childs'
|
27
|
+
iphotos: 'Фото'
|
28
|
+
colors: 'Цвет'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
prop_name: 'Имена свойств'
|
6
|
+
activerecord:
|
7
|
+
models:
|
8
|
+
prop_name:
|
9
|
+
one: 'Имя свойства'
|
10
|
+
other: 'Имена свойств'
|
11
|
+
attributes:
|
12
|
+
c80_yax/prop_name:
|
13
|
+
title: 'Название'
|
14
|
+
uom: 'Ед. измерения'
|
15
|
+
related: 'Старая цена'
|
data/config/locales/ru.yml
CHANGED
@@ -2,78 +2,4 @@ ru:
|
|
2
2
|
c80_yax:
|
3
3
|
active_admin:
|
4
4
|
menu:
|
5
|
-
core_item: 'Каталог'
|
6
|
-
strsubcat: 'Подкатегории'
|
7
|
-
cat: 'Категории'
|
8
|
-
item: 'Товары'
|
9
|
-
pages:
|
10
|
-
strsubcat:
|
11
|
-
label_view_title: 'Настройки подкатегории'
|
12
|
-
label_all_props: 'Характеристики, которыми описываются товары из этой подкатегории'
|
13
|
-
label_main_props: 'Характеристки, которые выводятся на странице просмотра товара под заголовком (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
14
|
-
label_price_props: 'Ценовые характеристики, которые выводятся на странице просмотра товара (<a class="poiasn" href="%{img}" target="_blank">пример</a>)'
|
15
|
-
label_common_props: 'Характеристки, которые выводятся на странице просмотра товара справа (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
16
|
-
label_prefix_props: 'Префикс-характеристики (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
17
|
-
activerecord:
|
18
|
-
models:
|
19
|
-
strsubcat:
|
20
|
-
one: 'подкатегорию'
|
21
|
-
other: 'Подкатегории'
|
22
|
-
cat:
|
23
|
-
one: 'категорию'
|
24
|
-
other: 'Категории'
|
25
|
-
item:
|
26
|
-
one: 'товар'
|
27
|
-
other: 'Товары'
|
28
|
-
prop_name:
|
29
|
-
one: 'Имя свойства'
|
30
|
-
other: 'Имена свойств'
|
31
|
-
# iphoto:
|
32
|
-
# one: 'Фотоm'
|
33
|
-
# other: 'Фотоr'
|
34
|
-
attributes:
|
35
|
-
c80_yax/prop_name:
|
36
|
-
title: 'Название'
|
37
|
-
uom: 'Ед. измерения'
|
38
|
-
c80_yax/strsubcat:
|
39
|
-
id: 'id'
|
40
|
-
ord: 'Порядковый №'
|
41
|
-
title: 'Название'
|
42
|
-
created_at: 'Дата создания'
|
43
|
-
updated_at: 'Обновлено'
|
44
|
-
cats: 'Принадлежит категории'
|
45
|
-
parent: 'Принадлежит подкатегории'
|
46
|
-
parent_id_in: 'Принадлежит подкатегории'
|
47
|
-
c80_yax/cat:
|
48
|
-
id: 'id'
|
49
|
-
ord: 'Порядковый №'
|
50
|
-
title: 'Название'
|
51
|
-
strsubcats: 'Подкатегории'
|
52
|
-
created_at: 'Дата создания'
|
53
|
-
updated_at: 'Обновлено'
|
54
|
-
c80_yax/item:
|
55
|
-
id: 'id'
|
56
|
-
title: 'Название'
|
57
|
-
short_desc: 'Краткое описание'
|
58
|
-
full_desc: 'Подробное описание'
|
59
|
-
is_hit: 'Хит'
|
60
|
-
is_sale: 'Акция'
|
61
|
-
is_main: 'Выводить на главной'
|
62
|
-
is_gift: 'Подарочный набор'
|
63
|
-
is_starting: 'Стартовый набор'
|
64
|
-
is_available: 'В наличии'
|
65
|
-
strsubcat: 'Подкатегория'
|
66
|
-
cat: 'Категория'
|
67
|
-
related_parent: 'related_parent'
|
68
|
-
related_childs: 'related_childs'
|
69
|
-
iphotos: 'Фото'
|
70
|
-
# iphoto: 'Фото'
|
71
|
-
errors:
|
72
|
-
models:
|
73
|
-
c80_yax/strsubcat:
|
74
|
-
attributes:
|
75
|
-
title:
|
76
|
-
taken: 'Подкатегория с таким названием уже существует'
|
77
|
-
blank: 'Укажите, пожалуйста, название подкатегории'
|
78
|
-
too_short: 'Название слишком короткое'
|
79
|
-
too_long: 'Название слишком длинное'
|
5
|
+
core_item: 'Каталог'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
strsubcat: 'Подкатегории'
|
6
|
+
pages:
|
7
|
+
strsubcat:
|
8
|
+
label_view_title: 'Настройки подкатегории'
|
9
|
+
label_all_props: 'Характеристики, которыми описываются товары из этой подкатегории'
|
10
|
+
label_main_props: 'Характеристки, которые выводятся на странице просмотра товара под заголовком (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
11
|
+
label_price_props: 'Ценовые характеристики, которые выводятся на странице просмотра товара (<a class="poiasn" href="%{img}" target="_blank">пример</a>)'
|
12
|
+
label_common_props: 'Характеристки, которые выводятся на странице просмотра товара справа (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
13
|
+
label_prefix_props: 'Префикс-характеристики (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
|
14
|
+
activerecord:
|
15
|
+
models:
|
16
|
+
strsubcat:
|
17
|
+
one: 'подкатегорию'
|
18
|
+
other: 'Подкатегории'
|
19
|
+
attributes:
|
20
|
+
c80_yax/strsubcat:
|
21
|
+
id: 'id'
|
22
|
+
ord: 'Порядковый №'
|
23
|
+
title: 'Название'
|
24
|
+
created_at: 'Дата создания'
|
25
|
+
updated_at: 'Обновлено'
|
26
|
+
cats: 'Принадлежит категории'
|
27
|
+
parent: 'Принадлежит подкатегории'
|
28
|
+
parent_id_in: 'Принадлежит подкатегории'
|
29
|
+
prop_names: 'Имена свойств'
|
30
|
+
errors:
|
31
|
+
models:
|
32
|
+
c80_yax/strsubcat:
|
33
|
+
attributes:
|
34
|
+
title:
|
35
|
+
taken: 'Подкатегория с таким названием уже существует'
|
36
|
+
blank: 'Укажите, пожалуйста, название подкатегории'
|
37
|
+
too_short: 'Название слишком короткое'
|
38
|
+
too_long: 'Название слишком длинное'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ru:
|
2
|
+
c80_yax:
|
3
|
+
active_admin:
|
4
|
+
menu:
|
5
|
+
uom: 'Единицы измерения'
|
6
|
+
activerecord:
|
7
|
+
models:
|
8
|
+
uom:
|
9
|
+
one: 'единицу измерения'
|
10
|
+
other: 'Единицы измерения'
|
11
|
+
attributes:
|
12
|
+
c80_yax/uom:
|
13
|
+
title: 'Название'
|
14
|
+
comment: 'Комментарий'
|
15
|
+
is_number: 'Является числом?'
|
data/config/routes.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
class CreateC80YaxUoms < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :c80_yax_uoms, :options => 'COLLATE=utf8_unicode_ci' do |t|
|
4
|
-
t.string :title
|
4
|
+
t.string :title, null: false, limit: 50
|
5
5
|
t.string :comment
|
6
|
+
t.string :regex
|
6
7
|
t.boolean :is_number
|
7
8
|
|
8
9
|
t.timestamps null: false
|
@@ -1,12 +1,14 @@
|
|
1
1
|
class CreateC80YaxPropNames < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :c80_yax_prop_names, :options => 'COLLATE=utf8_unicode_ci' do |t|
|
4
|
-
t.string :title
|
4
|
+
t.string :title, null: false
|
5
5
|
t.boolean :is_normal_price
|
6
6
|
t.boolean :is_excluded_from_filtering
|
7
7
|
t.references :uom, index: true
|
8
8
|
t.references :related, index: true # NOTE:: see forbiz schema.rb:518: "prop_names" t.integer "related" (скорее всего, был забыт _id)
|
9
|
-
|
9
|
+
t.string :regex
|
10
|
+
t.string :comment
|
11
|
+
t.string :opt
|
10
12
|
t.timestamps null: false
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CreateC80YaxColors < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :c80_yax_colors do |t|
|
4
|
+
t.string :title, null: false, limit: 50
|
5
|
+
t.string :value, null: false, limit: 50
|
6
|
+
t.string :skidka, limit: 255
|
7
|
+
t.timestamps null: false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateC80YaxJoinTableColorsItems < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :c80_yax_colors_items, :id => false do |t|
|
4
|
+
t.integer :color_id, :null => false
|
5
|
+
t.integer :item_id, :null => false
|
6
|
+
end
|
7
|
+
|
8
|
+
add_index :c80_yax_colors_items, [:color_id, :item_id], name: 'too_long17'
|
9
|
+
add_index :c80_yax_colors_items, [:item_id, :color_id], name: 'too_long18'
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Описание
|
2
|
+
|
3
|
+
Добавляем возможность создавать т.н. "Выдачи товаров" - `Suites`.
|
4
|
+
|
5
|
+
* Suite:
|
6
|
+
* + title:string, null: false
|
7
|
+
* has_many srows:
|
8
|
+
* ord:integer, null: false, default: 10
|
9
|
+
* belongs_to :suite
|
10
|
+
* belongs_to :item
|
11
|
+
* + where:string, default: 'before' # before, after
|
12
|
+
* + url:string
|
13
|
+
|
14
|
+
|
15
|
+
# Цитата из ТЗ
|
16
|
+
|
17
|
+
Функционал формирования выдач позволяет создавать специальные
|
18
|
+
выдачи продуктов и выводить блок из каталога (блок выдачи)
|
19
|
+
на любые страницы сайта кроме страниц:
|
20
|
+
- контакты,
|
21
|
+
- дилеры,
|
22
|
+
- техническая информация,
|
23
|
+
- диллеры
|
24
|
+
- страницы диллеров.
|
25
|
+
|
26
|
+
Каждая выдача имеет следующие характеристики
|
27
|
+
- Название (например «Скидки до 50% на снегозадержатели» или «Линия жизни»)
|
28
|
+
- Набор товаров принадлежащих данной акции (набор)
|
29
|
+
Для каждой страницы, на которой будет располагаться тот или иной блок
|
30
|
+
выдачи, из панели управления сайтом можно выбрать место для расположения
|
31
|
+
блока: перед основным содержанием страницы или после основного содержания.
|
32
|
+
Если на странице предполагается расположение нескольких различных блоков
|
33
|
+
выдачи, то расположение каждого из них опять же задаются по принципу
|
34
|
+
«после или перед основным содержанием страницы», а сам порядок блоков
|
35
|
+
выдачи регулируется через установку порядкового номера каждому блоку.
|
36
|
+
При этом существует отдельная нумерация (по порядковому номеру) для
|
37
|
+
блоков расположенных перед основным содержанием страницы и после него.
|
38
|
+
Определение продуктов, которые войдут в ту или иную выдачу, производится
|
39
|
+
вручную – из панели управления сайтом. При создании/редактировании той
|
40
|
+
или иной выдачи выдачи, можно включать в состав выдачи любые продукты
|
41
|
+
из базы каталога сайта, а также включать продукты в выдачу группами
|
42
|
+
(категориями и подкатегориями)
|
43
|
+
|
44
|
+
Подобная организация функционала позволяет управлять блоками с
|
45
|
+
продуктами на главной странице, а также позволяют вставлять необходимые
|
46
|
+
выдачи на нужные страницы сайта, например на страницу конкретной акции
|
47
|
+
без обращения к инструментарию программиста.
|
48
|
+
|
49
|
+
Также любая сформированная выдача может быть размещена во всплывающем
|
50
|
+
окне каталога. При этом можно выбрать категорию, под стобцом которой
|
51
|
+
будет размещена данная выдача (ссылка).
|
52
|
+
Каждая выдача имеет заранее предопределенное свойство "id".
|
@@ -0,0 +1,55 @@
|
|
1
|
+
ActiveAdmin.register Pack::Suite, as: 'Suite' do
|
2
|
+
|
3
|
+
menu :label => proc{ I18n.t('c80_yax.active_admin.menu.suite')},
|
4
|
+
:parent => 'x_c80_yax',
|
5
|
+
:priority => 9
|
6
|
+
|
7
|
+
permit_params :title,
|
8
|
+
:where,
|
9
|
+
:url,
|
10
|
+
:srows_attributes => [:id, :_destroy, :item_id, :ord]
|
11
|
+
|
12
|
+
config.batch_actions = false
|
13
|
+
config.sort_order = 'id_asc'
|
14
|
+
before_filter :skip_sidebar!, :only => :index
|
15
|
+
|
16
|
+
index do
|
17
|
+
id_column
|
18
|
+
column :title
|
19
|
+
column :where
|
20
|
+
column :url
|
21
|
+
|
22
|
+
actions
|
23
|
+
end
|
24
|
+
|
25
|
+
form(:html => {:multipart => true}) do |f|
|
26
|
+
|
27
|
+
f.inputs 'Свойства' do
|
28
|
+
f.input :title
|
29
|
+
f.input :where
|
30
|
+
f.input :url
|
31
|
+
|
32
|
+
f.inputs 'Товары' do
|
33
|
+
f.has_many :srows, allow_destroy: true do |srow|
|
34
|
+
srow.input :ord
|
35
|
+
srow.input :item,
|
36
|
+
:as => :select,
|
37
|
+
:input_html => {
|
38
|
+
:title => '',
|
39
|
+
:class => 'selectpicker',
|
40
|
+
:data => {
|
41
|
+
:size => 10,
|
42
|
+
:width => '500px'
|
43
|
+
},
|
44
|
+
:multiple => false
|
45
|
+
},
|
46
|
+
:collection => C80Yax::Item.all.map { |o| ["#{o.title}", o.id]}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
f.actions
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
#= require_tree ./backend
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pack
|
2
|
+
class Suite < ActiveRecord::Base
|
3
|
+
|
4
|
+
has_many :srows, :dependent => :destroy
|
5
|
+
accepts_nested_attributes_for :srows,
|
6
|
+
:reject_if => lambda { |attributes|
|
7
|
+
!attributes.present?
|
8
|
+
},
|
9
|
+
:allow_destroy => true
|
10
|
+
|
11
|
+
validates :title,
|
12
|
+
:presence => true,
|
13
|
+
:length => { in: 2..255 }
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateC80YaxPackSrows < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :c80_yax_pack_srows do |t|
|
4
|
+
t.integer :ord, null: false, default: 0
|
5
|
+
t.references :suite, index: true
|
6
|
+
t.references :item, index: true
|
7
|
+
|
8
|
+
t.timestamps null: false
|
9
|
+
end
|
10
|
+
|
11
|
+
add_foreign_key :c80_yax_pack_srows, :c80_yax_items, column: :item_id
|
12
|
+
add_foreign_key :c80_yax_pack_srows, :c80_yax_pack_suites, column: :suite_id
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Pack
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
config.i18n.load_path += Dir[config.root.join('config', 'locales', '*','*.{yml}').to_s]
|
4
|
+
isolate_namespace Pack
|
5
|
+
|
6
|
+
initializer :pack_engine do
|
7
|
+
# byebug
|
8
|
+
if defined?(ActiveAdmin)
|
9
|
+
ActiveAdmin.application.load_paths += Dir["#{config.root}/app/helpers/**/"]
|
10
|
+
ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/**/"]
|
11
|
+
ActiveAdmin.application.load_paths += Dir["#{config.root}/app/admin/**/"]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer :append_migrations do |app|
|
16
|
+
# byebug
|
17
|
+
unless app.root.to_s.match root.to_s
|
18
|
+
config.paths['db/migrate'].expanded.each do |expanded_path|
|
19
|
+
app.config.paths['db/migrate'] << expanded_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/c80_yax/engine.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module C80Yax
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
config.autoload_paths += %W(#{config.root}/app/models/c80_yax/concerns)
|
4
|
+
config.i18n.load_path += Dir[config.root.join('config', 'locales', '*','*.{yml}').to_s]
|
4
5
|
isolate_namespace C80Yax
|
5
6
|
|
6
7
|
initializer :c80_yax_engine do
|
data/lib/c80_yax/version.rb
CHANGED
data/lib/c80_yax.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: c80_yax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- README.md
|
125
125
|
- Rakefile
|
126
126
|
- app/admin/c80_yax/cats.rb
|
127
|
+
- app/admin/c80_yax/colors.rb
|
127
128
|
- app/admin/c80_yax/items.rb
|
128
129
|
- app/admin/c80_yax/lib/custom_columns.rb
|
129
130
|
- app/admin/c80_yax/prop_names.rb
|
@@ -137,6 +138,7 @@ files:
|
|
137
138
|
- app/assets/javascripts/lib_backend/collapsable-groups.js
|
138
139
|
- app/assets/javascripts/lib_backend/custom_columns.js
|
139
140
|
- app/assets/javascripts/lib_backend/init.js
|
141
|
+
- app/assets/javascripts/lib_backend/init_select_picker.js
|
140
142
|
- app/assets/javascripts/lib_backend/jalert.js
|
141
143
|
- app/assets/javascripts/lib_backend/loading.js
|
142
144
|
- app/assets/stylesheets/c80_yax.scss
|
@@ -147,12 +149,15 @@ files:
|
|
147
149
|
- app/assets/stylesheets/c80_yax/backend/collapsed.scss
|
148
150
|
- app/assets/stylesheets/c80_yax/backend/jquery-my-dialog.scss
|
149
151
|
- app/assets/stylesheets/c80_yax/elems/add_to_bucket.scss
|
152
|
+
- app/assets/stylesheets/c80_yax/elems/cats_iconed_list.scss
|
150
153
|
- app/assets/stylesheets/c80_yax/lib/bootstrap_checkboxes.scss
|
151
154
|
- app/assets/stylesheets/c80_yax/lib/loading.scss
|
152
155
|
- app/assets/stylesheets/c80_yax/lib_custom/bootstrap_checkboxes.scss
|
153
156
|
- app/assets/stylesheets/c80_yax_backend.scss
|
154
157
|
- app/controllers/c80_yax/admin_data_controller.rb
|
155
158
|
- app/controllers/c80_yax/app_controller.rb
|
159
|
+
- app/helpers/c80_yax/cats/cat_lists_helper.rb
|
160
|
+
- app/helpers/c80_yax/cats/cat_url_helper.rb
|
156
161
|
- app/helpers/c80_yax/cats/cat_view_helper.rb
|
157
162
|
- app/helpers/c80_yax/data_helper.rb
|
158
163
|
- app/helpers/c80_yax/items/asterix_helper.rb
|
@@ -164,6 +169,7 @@ files:
|
|
164
169
|
- app/helpers/c80_yax/strsubcats/props_helper.rb
|
165
170
|
- app/helpers/c80_yax/uom_helper.rb
|
166
171
|
- app/models/c80_yax/cat.rb
|
172
|
+
- app/models/c80_yax/color.rb
|
167
173
|
- app/models/c80_yax/common_prop.rb
|
168
174
|
- app/models/c80_yax/concerns/props/parsable.rb
|
169
175
|
- app/models/c80_yax/iphoto.rb
|
@@ -171,6 +177,7 @@ files:
|
|
171
177
|
- app/models/c80_yax/item_observer.rb
|
172
178
|
- app/models/c80_yax/item_prop.rb
|
173
179
|
- app/models/c80_yax/main_prop.rb
|
180
|
+
- app/models/c80_yax/mixins/cat/database.rb
|
174
181
|
- app/models/c80_yax/mixins/item/database/props.rb
|
175
182
|
- app/models/c80_yax/mixins/strsubcat/database/prop_names_changed.rb
|
176
183
|
- app/models/c80_yax/mixins/strsubcat/database/props.rb
|
@@ -185,11 +192,18 @@ files:
|
|
185
192
|
- app/uploaders/c80_yax/icat_uploader.rb
|
186
193
|
- app/uploaders/c80_yax/iphoto_uploader.rb
|
187
194
|
- app/views/admin/strsubcats/_view.html.erb
|
195
|
+
- app/views/c80_yax/cats/_cats_iconed_list.html.erb
|
188
196
|
- app/views/c80_yax/items/_buy_options.html.erb
|
189
197
|
- bin/console
|
190
198
|
- bin/setup
|
191
199
|
- c80_yax.gemspec
|
200
|
+
- config/locales/cat/ru.yml
|
201
|
+
- config/locales/color/ru.yml
|
202
|
+
- config/locales/item/ru.yml
|
203
|
+
- config/locales/prop_name/ru.yml
|
192
204
|
- config/locales/ru.yml
|
205
|
+
- config/locales/strsubcat/ru.yml
|
206
|
+
- config/locales/uom/ru.yml
|
193
207
|
- config/routes.rb
|
194
208
|
- db/migrate/20161030061203_create_c80_yax_strsubcats.rb
|
195
209
|
- db/migrate/20161030225354_create_c80_yax_items.rb
|
@@ -211,7 +225,20 @@ files:
|
|
211
225
|
- db/migrate/20170621170808_create_c80_yax_join_table_prefix_props_prop_names.rb
|
212
226
|
- db/migrate/20170622193535_create_c80_yax_vendors.rb
|
213
227
|
- db/migrate/20170622194040_create_c80_yax_join_table_items_vendors.rb
|
228
|
+
- db/migrate/20170625175353_create_c80_yax_colors.rb
|
229
|
+
- db/migrate/20170625180000_create_c80_yax_join_table_colors_items.rb
|
214
230
|
- db/seeds/c80_yax_01_fill_props.rb
|
231
|
+
- engines/pack/README.md
|
232
|
+
- engines/pack/app/admin/pack/suites.rb
|
233
|
+
- engines/pack/app/assets/javascripts/backend/suites.js
|
234
|
+
- engines/pack/app/assets/javascripts/packs.js.coffee
|
235
|
+
- engines/pack/app/models/pack/srow.rb
|
236
|
+
- engines/pack/app/models/pack/suite.rb
|
237
|
+
- engines/pack/config/locales/suite/ru.yml
|
238
|
+
- engines/pack/db/migrate/20170625205656_create_c80_yax_pack_suites.rb
|
239
|
+
- engines/pack/db/migrate/20170625215151_create_c80_yax_pack_srows.rb
|
240
|
+
- engines/pack/lib/pack.rb
|
241
|
+
- engines/pack/lib/pack/engine.rb
|
215
242
|
- lib/c80_yax.rb
|
216
243
|
- lib/c80_yax/engine.rb
|
217
244
|
- lib/c80_yax/strsubcat_runtime_tables.rb
|