ecm_products 0.0.1.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +27 -0
- data/app/controllers/ecm/products/product_categories_controller.rb +9 -0
- data/app/controllers/ecm/products/products_controller.rb +9 -0
- data/app/models/ecm/products/product.rb +97 -0
- data/app/models/ecm/products/product_category.rb +71 -0
- data/app/models/ecm/products/product_link.rb +23 -0
- data/app/models/ecm/products.rb +5 -0
- data/app/views/ecm/products/product_categories/_product_category.html.erb +23 -0
- data/app/views/ecm/products/product_categories/index.html.erb +6 -0
- data/app/views/ecm/products/product_categories/show.html.erb +18 -0
- data/app/views/ecm/products/product_links/_product_link.html.erb +12 -0
- data/app/views/ecm/products/products/_product.html.erb +29 -0
- data/app/views/ecm/products/products/_product_details.html.erb +40 -0
- data/app/views/ecm/products/products/_product_preview.html.erb +18 -0
- data/app/views/ecm/products/products/index.html.erb +3 -0
- data/app/views/ecm/products/products/show.html.erb +1 -0
- data/config/locales/ecm.products.de.yml +20 -0
- data/config/locales/ecm.products.en.yml +20 -0
- data/config/locales/ecm.products.product.de.yml +38 -0
- data/config/locales/ecm.products.product.en.yml +38 -0
- data/config/locales/ecm.products.product_category.de.yml +35 -0
- data/config/locales/ecm.products.product_category.en.yml +35 -0
- data/config/locales/ecm.products.product_link.de.yml +17 -0
- data/config/locales/ecm.products.product_link.en.yml +17 -0
- data/config/locales/ecm.products.routes.de.yml +5 -0
- data/config/locales/ecm.products.routes.en.yml +5 -0
- data/db/migrate/001_create_ecm_products_product_categories.rb +40 -0
- data/db/migrate/002_create_ecm_products_products.rb +46 -0
- data/db/migrate/003_create_ecm_products_product_links.rb +18 -0
- data/lib/ecm/products/active_admin/ecm_products_product_categories.rb +75 -0
- data/lib/ecm/products/active_admin/ecm_products_product_links.rb +39 -0
- data/lib/ecm/products/active_admin/ecm_products_products.rb +74 -0
- data/lib/ecm/products/engine.rb +12 -0
- data/lib/ecm/products/routing.rb +22 -0
- data/lib/ecm/products/version.rb +5 -0
- data/lib/ecm_products.rb +13 -0
- data/lib/tasks/ecm_products_tasks.rake +77 -0
- metadata +440 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 Roberto Vásquez Angel
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= EcmProducts
|
2
|
+
|
3
|
+
= Installation
|
4
|
+
|
5
|
+
gem 'ecm_products'
|
6
|
+
|
7
|
+
bundle install
|
8
|
+
|
9
|
+
rake ecm_products_engine:install:migrations
|
10
|
+
|
11
|
+
rake db:migrate
|
12
|
+
|
13
|
+
= Create sample data
|
14
|
+
|
15
|
+
rake ecm_products:db:populate
|
16
|
+
|
17
|
+
This project rocks and uses MIT-LICENSE.
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'EcmPictures'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Ecm::Products::ProductCategoriesController < ApplicationController
|
2
|
+
def index
|
3
|
+
@product_categories = ::Ecm::Products::ProductCategory.includes(:ecm_products_products)
|
4
|
+
end
|
5
|
+
|
6
|
+
def show
|
7
|
+
@product_category = ::Ecm::Products::ProductCategory.includes(:ecm_products_products).find(params[:id])
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module FixUpdateCounters
|
2
|
+
def fix_updated_counters
|
3
|
+
self.changes.each {|key, value|
|
4
|
+
# key should match /master_files_id/ or /bibls_id/
|
5
|
+
# value should be an array ['old value', 'new value']
|
6
|
+
if key =~ /_id/
|
7
|
+
changed_class = key.sub(/_id/, '')
|
8
|
+
|
9
|
+
# Get real class of changed attribute, so work both with namespaced/normal models
|
10
|
+
klass = self.association(changed_class.to_sym).klass
|
11
|
+
|
12
|
+
# Try to get counter cache from association options
|
13
|
+
begin
|
14
|
+
counter_name = self.association(changed_class.to_sym).options[:counter_cache]
|
15
|
+
rescue
|
16
|
+
# Namespaced model return a slash, split it.
|
17
|
+
unless (counter_name = "#{self.class.name.underscore.pluralize.split("/")[1]}_count".to_sym)
|
18
|
+
counter_name = "#{self.class.name.underscore.pluralize}_count".to_sym
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
klass.decrement_counter(counter_name, value[0]) unless value[0] == nil
|
24
|
+
klass.increment_counter(counter_name, value[1]) unless value[1] == nil
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
ActiveRecord::Base.send(:include, FixUpdateCounters)
|
31
|
+
|
32
|
+
class Ecm::Products::Product < ActiveRecord::Base
|
33
|
+
# database settings
|
34
|
+
self.table_name = 'ecm_products_products'
|
35
|
+
|
36
|
+
# acts as list
|
37
|
+
acts_as_list :scope => :ecm_products_product_category
|
38
|
+
|
39
|
+
# associations
|
40
|
+
belongs_to :ecm_products_product_category,
|
41
|
+
:class_name => Ecm::Products::ProductCategory,
|
42
|
+
:counter_cache => :ecm_products_products_count
|
43
|
+
|
44
|
+
has_many :ecm_products_product_links,
|
45
|
+
:class_name => Ecm::Products::ProductLink,
|
46
|
+
:dependent => :destroy,
|
47
|
+
:foreign_key => :ecm_products_product_id,
|
48
|
+
:order => 'position'
|
49
|
+
|
50
|
+
# attributes
|
51
|
+
attr_accessible :ecm_products_product_category_id,
|
52
|
+
:locale,
|
53
|
+
:long_description,
|
54
|
+
:main_image,
|
55
|
+
:name,
|
56
|
+
:position,
|
57
|
+
:preview_image,
|
58
|
+
:price,
|
59
|
+
:price_on_application,
|
60
|
+
:published_at,
|
61
|
+
:short_description,
|
62
|
+
:slug
|
63
|
+
|
64
|
+
# callbacks
|
65
|
+
after_update :fix_updated_counters
|
66
|
+
before_update :fix_updated_position, :if => Proc.new { |d| !position.blank? && d.ecm_products_product_category_id_changed? }
|
67
|
+
|
68
|
+
# friendly id
|
69
|
+
extend FriendlyId
|
70
|
+
friendly_id :name, :use => :slugged
|
71
|
+
|
72
|
+
# money
|
73
|
+
monetize :price_cents, :allow_nil => true
|
74
|
+
|
75
|
+
# paperclip
|
76
|
+
has_attached_file :main_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
|
77
|
+
has_attached_file :preview_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
|
78
|
+
|
79
|
+
# validations
|
80
|
+
validates :ecm_products_product_category, :presence => true
|
81
|
+
validate :available_locale, :unless => Proc.new { |c| c.locale.blank? }
|
82
|
+
validates :name, :presence => true
|
83
|
+
# validates_attachment_presence :main_image
|
84
|
+
# validates_attachment_presence :preview_image
|
85
|
+
|
86
|
+
# private methods
|
87
|
+
|
88
|
+
private
|
89
|
+
def fix_updated_position
|
90
|
+
Rails.logger.debug "Fixing positions for #{self.to_s} (Moving to last)"
|
91
|
+
add_to_list_bottom
|
92
|
+
end
|
93
|
+
|
94
|
+
def available_locale
|
95
|
+
I18n.available_locales.map(&:to_s).include?(self.locale)
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Ecm::Products::ProductCategory < ActiveRecord::Base
|
2
|
+
# database settings
|
3
|
+
self.table_name = 'ecm_products_product_categories'
|
4
|
+
|
5
|
+
# associations
|
6
|
+
has_many :ecm_products_products,
|
7
|
+
:class_name => Ecm::Products::Product,
|
8
|
+
:dependent => :destroy,
|
9
|
+
:foreign_key => :ecm_products_product_category_id,
|
10
|
+
:order => 'position'
|
11
|
+
|
12
|
+
# attributes
|
13
|
+
attr_accessible :depth,
|
14
|
+
:lft,
|
15
|
+
:locale,
|
16
|
+
:long_description,
|
17
|
+
:main_image,
|
18
|
+
:name,
|
19
|
+
:parent_id,
|
20
|
+
:preview_image,
|
21
|
+
:rgt,
|
22
|
+
:short_description,
|
23
|
+
:slug
|
24
|
+
|
25
|
+
# awesome nested set
|
26
|
+
acts_as_nested_set
|
27
|
+
default_scope :order => 'lft ASC'
|
28
|
+
|
29
|
+
# friendly id
|
30
|
+
extend FriendlyId
|
31
|
+
friendly_id :name, :use => :slugged
|
32
|
+
|
33
|
+
# paperclip
|
34
|
+
has_attached_file :main_image, :styles => { :medium_thumb => "160x120", :big_thumb => "360x268" }
|
35
|
+
has_attached_file :preview_image, :styles => { :small_thumb => "64x48", :medium_thumb => "160x120", :big_thumb => "360x268" }
|
36
|
+
|
37
|
+
# validations
|
38
|
+
validates :name, :presence => true, :uniqueness => { :scope => [ :parent_id ] }
|
39
|
+
validates :locale, :presence => true, :if => Proc.new { |pc| pc.parent.nil? } # , :if => :root?
|
40
|
+
validates :locale, :absence => true, :if => Proc.new { |pc| !pc.parent.nil? }
|
41
|
+
validate :available_locale, :if => Proc.new { |pc| pc.locale.present? }
|
42
|
+
|
43
|
+
# public methods
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
name
|
47
|
+
end
|
48
|
+
|
49
|
+
def tree_name
|
50
|
+
root_prefix = (self.root?) ? "[#{self.locale}] " : ""
|
51
|
+
|
52
|
+
if self.ecm_products_products_count == 0
|
53
|
+
"#{root_prefix}#{to_s}"
|
54
|
+
else
|
55
|
+
"#{root_prefix}#{to_s} (#{self.ecm_products_products_count})"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.for_actual_locale
|
60
|
+
# where(:locale => I18n.locale)
|
61
|
+
t = self.arel_table
|
62
|
+
where(t[:locale].eq(I18n.locale).or(t[:locale].eq(nil)))
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def available_locale
|
68
|
+
I18n.available_locales.map(&:to_s).include?(self.locale)
|
69
|
+
end
|
70
|
+
# private
|
71
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Ecm::Products::ProductLink < ActiveRecord::Base
|
2
|
+
# database settings
|
3
|
+
self.table_name = 'ecm_products_product_links'
|
4
|
+
|
5
|
+
# acts as list
|
6
|
+
acts_as_list :scope => :ecm_products_product
|
7
|
+
|
8
|
+
# associations
|
9
|
+
belongs_to :ecm_products_product,
|
10
|
+
:class_name => Ecm::Products::Product,
|
11
|
+
:counter_cache => :ecm_products_product_links_count
|
12
|
+
|
13
|
+
# attributes
|
14
|
+
attr_accessible :description,
|
15
|
+
:ecm_products_product_id,
|
16
|
+
:name,
|
17
|
+
:position,
|
18
|
+
:url
|
19
|
+
|
20
|
+
# validations
|
21
|
+
validates :name, :presence => true, :uniqueness => { :scope => [ :ecm_products_product_id ] }
|
22
|
+
validates :url, :presence => true, :uniqueness => { :scope => [ :ecm_products_product_id ] }
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1 class="product_category-name"><%= product_category.name %></h1>
|
2
|
+
|
3
|
+
<%= nested_li(product_category.descendants, {}) do |product_category, level| %>
|
4
|
+
<%= link_to product_category.tree_name, product_category %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% unless product_category.short_description.blank? %>
|
8
|
+
<p><%= product_category.short_description %></p>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% unless product_category.long_description.blank? %>
|
12
|
+
<p><%= product_category.long_description %></p>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<h2><%= Ecm::Products::ProductCategory.human_attribute_name(:ecm_products_products) %></h2>
|
16
|
+
|
17
|
+
<% if product_category.ecm_products_products_count == 0 %>
|
18
|
+
<%= t('ecm.products.product_category.messages.no_products_available') %>
|
19
|
+
<% else %>
|
20
|
+
<ul class="thumbnails product-previews">
|
21
|
+
<%= render :partial => 'ecm/products/products/product_preview', :collection => product_category.ecm_products_products, :as => :product %>
|
22
|
+
</ul>
|
23
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= render @product_category %>
|
2
|
+
|
3
|
+
<% if @product_category.root? %>
|
4
|
+
|
5
|
+
<%= link_to(ecm_products_product_categories_path, :class => 'back-link btn') do %>
|
6
|
+
<i class="icon-arrow-left icon-white"></i>
|
7
|
+
<%= t('ecm.products.product_category.actions.back_to_index') %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% else %>
|
11
|
+
|
12
|
+
<%= link_to(@product_category.parent, :class => 'back-link btn') do %>
|
13
|
+
<i class="icon-arrow-left icon-white"></i>
|
14
|
+
<%= t('ecm.products.product_category.actions.back_to_parent', :name => @product_category.parent.to_s) %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<% end %>
|
18
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h3><%= product_link.name %></h3>
|
2
|
+
|
3
|
+
<p class="product_link-description">
|
4
|
+
<%= product_link.description %>
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<%= link_to product_link.url, :class => "product_link-url open-link external-link btn" do %>
|
8
|
+
<i class="icon-info-sign icon-white"></i>
|
9
|
+
<%= t('ecm.products.product_link.actions.visit') %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<hr />
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div class="product" id="product-<%= product.id %>">
|
2
|
+
<h2>
|
3
|
+
<% if product.locale.present? %>
|
4
|
+
<span class="product-locale">[<%= product.locale %>]</span>
|
5
|
+
<% end %>
|
6
|
+
<span class="product-name"><%= product.name %></span>
|
7
|
+
</h2>
|
8
|
+
<ul>
|
9
|
+
<li class="product-created_at"><%= Ecm::Products::Product.human_attribute_name(:created_at) %>: <%= l(product.created_at) rescue nil %></li>
|
10
|
+
<li class="product-updated_at"><%= Ecm::Products::Product.human_attribute_name(:updated_at) %>: <%= l(product.updated_at) rescue nil %></li>
|
11
|
+
</ul>
|
12
|
+
|
13
|
+
<% unless product.short_description.blank? %>
|
14
|
+
<div class="product-short_description">
|
15
|
+
<p><%= product.short_description %></p>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<% unless product.long_description.blank? %>
|
20
|
+
<div class="product-long_description">
|
21
|
+
<p><%= product.long_description %></p>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
|
25
|
+
<div class="product-actions">
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<hr />
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<div class="product" id="product-<%= product.id %>">
|
2
|
+
<h1>
|
3
|
+
<% if product.locale.present? %>
|
4
|
+
<span class="product-locale">[<%= product.locale %>]</span>
|
5
|
+
<% end %>
|
6
|
+
<span class="product-name"><%= product.name %></span>
|
7
|
+
</h1>
|
8
|
+
|
9
|
+
<% if product.main_image? %>
|
10
|
+
<div class="product-main_image"><%= image_tag(product.main_image.url, :class => 'thumbnail') %></div>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% if product.short_description.present? %>
|
14
|
+
<div class="product-short_description"><%= product.short_description %></div>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<% if product.long_description.present? %>
|
18
|
+
<div class="product-long_description"><%= product.long_description %></div>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<div class="product-price"><%= humanized_money_with_symbol product.price %></div>
|
22
|
+
|
23
|
+
<% if product.ecm_products_product_links.present? %>
|
24
|
+
<hr />
|
25
|
+
|
26
|
+
<div class="product-links">
|
27
|
+
<% product.ecm_products_product_links.each do |product_link| %>
|
28
|
+
<%= render product_link %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<hr />
|
36
|
+
|
37
|
+
<%= link_to(product.ecm_products_product_category, :class => 'btn') do %>
|
38
|
+
<i class="icon-arrow-left icon-white"></i>
|
39
|
+
<%= t('ecm.products.product.actions.back_to_category', :name => product.ecm_products_product_category) %>
|
40
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<li>
|
2
|
+
<div class="thumbnail <%= product_counter.odd? ? "even" : "odd" %>">
|
3
|
+
|
4
|
+
<%= image_tag(product.preview_image.url) %>
|
5
|
+
|
6
|
+
<div class="caption">
|
7
|
+
<h5><%= product.name %></h5>
|
8
|
+
<p class="short_description"><%= product.short_description %></p>
|
9
|
+
|
10
|
+
<p>
|
11
|
+
<%= link_to(product, :class => "more-link btn") do %>
|
12
|
+
<i class="icon-info-sign icon-white"></i>
|
13
|
+
<%= t('ecm.products.product.actions.more') %>
|
14
|
+
<% end %>
|
15
|
+
</p>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'product_details', :locals => { :product => @product } %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
de:
|
2
|
+
ecm:
|
3
|
+
products:
|
4
|
+
active_admin:
|
5
|
+
menu: Produkte
|
6
|
+
product:
|
7
|
+
actions:
|
8
|
+
back_to_category: Zurück zu %{name}
|
9
|
+
more: Mehr
|
10
|
+
messages:
|
11
|
+
product_category:
|
12
|
+
actions:
|
13
|
+
back_to_parent: Zurück zu %{name}
|
14
|
+
back_to_index: Zurück zur Übersicht
|
15
|
+
messages:
|
16
|
+
no_products_available: Keine Produkte in dieser Kategorie vorhanden.
|
17
|
+
product_link:
|
18
|
+
actions:
|
19
|
+
visit: Öffnen
|
20
|
+
messages:
|
@@ -0,0 +1,20 @@
|
|
1
|
+
en:
|
2
|
+
ecm:
|
3
|
+
products:
|
4
|
+
active_admin:
|
5
|
+
menu: Products
|
6
|
+
product:
|
7
|
+
actions:
|
8
|
+
back_to_category: back to %{name}
|
9
|
+
more: more
|
10
|
+
messages:
|
11
|
+
product_category:
|
12
|
+
actions:
|
13
|
+
back_to_parent: back to %{name}
|
14
|
+
back_to_index: back to the index
|
15
|
+
messages:
|
16
|
+
no_products_available: No products available in this category.
|
17
|
+
product_link:
|
18
|
+
actions:
|
19
|
+
visit: visit
|
20
|
+
messages:
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
de:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
ecm/products/product:
|
6
|
+
one: Produkt
|
7
|
+
other: Produkte
|
8
|
+
attributes:
|
9
|
+
ecm/products/product:
|
10
|
+
name: Name
|
11
|
+
preview_image_fingerprint: Vorschaubild Fingerabdruck
|
12
|
+
position: Position
|
13
|
+
slug: Freundliche ID
|
14
|
+
main_image_content_type: Hauptbild Dateityp
|
15
|
+
created_at: Erstellt am
|
16
|
+
main_image_updated_at: Hauptbild aktualisiert am
|
17
|
+
updated_at: Aktualisiert am
|
18
|
+
short_description: Kurzbeschreibung
|
19
|
+
main_image_file_name: Hauptbild Dateiname
|
20
|
+
main_image_file_size: Hauptbild Dateigröße
|
21
|
+
main_image_fingerprint: Hauptbild Fingerabdruck
|
22
|
+
ecm_products_product_category: Produktkategorie
|
23
|
+
ecm_products_product_category_id: Produktkategorie
|
24
|
+
long_description: Langbeschreibung
|
25
|
+
preview_image_updated_at: Vorschaubild aktualisiert am
|
26
|
+
ecm_products_product_links: Links
|
27
|
+
ecm_products_product_links_count: Links
|
28
|
+
preview_image_content_type: Vorschaubild Dateityp
|
29
|
+
price_currency: Preiswährung
|
30
|
+
locale: Sprache
|
31
|
+
price_on_application: Preis auf Anfrage
|
32
|
+
preview_image_file_name: Vorschaubild Dateiname
|
33
|
+
published_at: Veröffentlicht am
|
34
|
+
preview_image_file_size: Vorschaubild Dateigröße
|
35
|
+
price: Preis
|
36
|
+
price_cents: Preis in Cents
|
37
|
+
preview_image: Vorschaubild
|
38
|
+
main_image: Hauptbild
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
ecm/products/product:
|
6
|
+
one: product
|
7
|
+
other: products
|
8
|
+
attributes:
|
9
|
+
ecm/products/product:
|
10
|
+
name: name
|
11
|
+
preview_image_fingerprint: preview image fingerprint
|
12
|
+
position: position
|
13
|
+
slug: friendly id
|
14
|
+
main_image_content_type: main image content type
|
15
|
+
created_at: created at
|
16
|
+
main_image_updated_at: main image updated at
|
17
|
+
updated_at: updated at
|
18
|
+
short_description: short_description
|
19
|
+
main_image_file_name: main image file name
|
20
|
+
main_image_file_size: main image file size
|
21
|
+
main_image_fingerprint: main image fingerprint
|
22
|
+
ecm_products_product_category: product category
|
23
|
+
ecm_products_product_category_id: product category
|
24
|
+
long_description: long description
|
25
|
+
preview_image_updated_at: preview_image updated at
|
26
|
+
ecm_products_product_links: links
|
27
|
+
ecm_products_product_links_count: product links
|
28
|
+
preview_image_content_type: preview image content type
|
29
|
+
price_currency: price currency
|
30
|
+
locale: language
|
31
|
+
price_on_application: price on application
|
32
|
+
preview_image_file_name: preview image file name
|
33
|
+
published_at: published at
|
34
|
+
preview_image_file_size: preview image file size
|
35
|
+
price: price
|
36
|
+
price_cents: price cents
|
37
|
+
preview_image: preview image
|
38
|
+
main_image: main image
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
de:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
ecm/products/product_category:
|
6
|
+
one: Produkt Kategorie
|
7
|
+
other: Produkt Kategorien
|
8
|
+
attributes:
|
9
|
+
ecm/products/product_category:
|
10
|
+
slug: Freundliche ID
|
11
|
+
name: Name
|
12
|
+
preview_image_fingerprint: Vorschaubild Fingerabdruck
|
13
|
+
main_image_content_type: Hauptbild Dateityp
|
14
|
+
created_at: Erstellt am
|
15
|
+
ecm_products_products: Produkte
|
16
|
+
ecm_products_products_count: Produkte
|
17
|
+
depth: Baumtiefe
|
18
|
+
updated_at: Aktualisiert am
|
19
|
+
short_description: Kurzbeschreibung
|
20
|
+
main_image_updated_at: Hauptbild aktualisiert am
|
21
|
+
lft: Links
|
22
|
+
main_image_fingerprint: Hauptbild Fingerabdruck
|
23
|
+
main_image_file_name: Hauptbild Dateiname
|
24
|
+
main_image_file_size: Hauptbild Dateigröße
|
25
|
+
long_description: Langbeschreibung
|
26
|
+
preview_image_content_type: Vorschaubild Dateityp
|
27
|
+
preview_image_updated_at: Vorschaubild aktualisiert am
|
28
|
+
parent: Überkategorie
|
29
|
+
parent_id: Überkategorie
|
30
|
+
locale: Sprache
|
31
|
+
preview_image_file_name: Vorschaubild Dateiname
|
32
|
+
preview_image_file_size: Vorschaubild Dateigröße
|
33
|
+
rgt: Rechts
|
34
|
+
preview_image: Vorschaubild
|
35
|
+
main_image: Hauptbild
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
ecm/products/product_category:
|
6
|
+
one: product category
|
7
|
+
other: product categories
|
8
|
+
attributes:
|
9
|
+
ecm/products/product_category:
|
10
|
+
slug: slug
|
11
|
+
name: name
|
12
|
+
preview_image_fingerprint: preview image fingerprint
|
13
|
+
main_image_content_type: main image content type
|
14
|
+
created_at: created at
|
15
|
+
ecm_products_products: products
|
16
|
+
ecm_products_products_count: products
|
17
|
+
depth: depth
|
18
|
+
updated_at: updated at
|
19
|
+
short_description: short description
|
20
|
+
main_image_updated_at: main image updated at
|
21
|
+
lft: left
|
22
|
+
main_image_fingerprint: main image fingerprint
|
23
|
+
main_image_file_name: main image file name
|
24
|
+
main_image_file_size: main image file size
|
25
|
+
long_description: long description
|
26
|
+
preview_image_content_type: preview image content type
|
27
|
+
preview_image_updated_at: preview image updated at
|
28
|
+
parent: parent category
|
29
|
+
parent_id: parent category
|
30
|
+
locale: language
|
31
|
+
preview_image_file_name: preview image file name
|
32
|
+
preview_image_file_size: preview image file size
|
33
|
+
rgt: right
|
34
|
+
preview_image: preview image
|
35
|
+
main_image: main image
|
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
de:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
ecm/products/product_link:
|
6
|
+
one: Produkt Link
|
7
|
+
other: Produkt Links
|
8
|
+
attributes:
|
9
|
+
ecm/products/product_link:
|
10
|
+
name: Name
|
11
|
+
position: Position
|
12
|
+
created_at: Erstellt am
|
13
|
+
updated_at: Aktualisiert am
|
14
|
+
ecm_products_product: Produkt
|
15
|
+
ecm_products_product_id: Produkt
|
16
|
+
url: URL
|
17
|
+
description: Beschreibung
|