c80_yax 0.1.0.4 → 0.1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|