ecm_products 0.0.1.pre

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.
Files changed (40) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +17 -0
  3. data/Rakefile +27 -0
  4. data/app/controllers/ecm/products/product_categories_controller.rb +9 -0
  5. data/app/controllers/ecm/products/products_controller.rb +9 -0
  6. data/app/models/ecm/products/product.rb +97 -0
  7. data/app/models/ecm/products/product_category.rb +71 -0
  8. data/app/models/ecm/products/product_link.rb +23 -0
  9. data/app/models/ecm/products.rb +5 -0
  10. data/app/views/ecm/products/product_categories/_product_category.html.erb +23 -0
  11. data/app/views/ecm/products/product_categories/index.html.erb +6 -0
  12. data/app/views/ecm/products/product_categories/show.html.erb +18 -0
  13. data/app/views/ecm/products/product_links/_product_link.html.erb +12 -0
  14. data/app/views/ecm/products/products/_product.html.erb +29 -0
  15. data/app/views/ecm/products/products/_product_details.html.erb +40 -0
  16. data/app/views/ecm/products/products/_product_preview.html.erb +18 -0
  17. data/app/views/ecm/products/products/index.html.erb +3 -0
  18. data/app/views/ecm/products/products/show.html.erb +1 -0
  19. data/config/locales/ecm.products.de.yml +20 -0
  20. data/config/locales/ecm.products.en.yml +20 -0
  21. data/config/locales/ecm.products.product.de.yml +38 -0
  22. data/config/locales/ecm.products.product.en.yml +38 -0
  23. data/config/locales/ecm.products.product_category.de.yml +35 -0
  24. data/config/locales/ecm.products.product_category.en.yml +35 -0
  25. data/config/locales/ecm.products.product_link.de.yml +17 -0
  26. data/config/locales/ecm.products.product_link.en.yml +17 -0
  27. data/config/locales/ecm.products.routes.de.yml +5 -0
  28. data/config/locales/ecm.products.routes.en.yml +5 -0
  29. data/db/migrate/001_create_ecm_products_product_categories.rb +40 -0
  30. data/db/migrate/002_create_ecm_products_products.rb +46 -0
  31. data/db/migrate/003_create_ecm_products_product_links.rb +18 -0
  32. data/lib/ecm/products/active_admin/ecm_products_product_categories.rb +75 -0
  33. data/lib/ecm/products/active_admin/ecm_products_product_links.rb +39 -0
  34. data/lib/ecm/products/active_admin/ecm_products_products.rb +74 -0
  35. data/lib/ecm/products/engine.rb +12 -0
  36. data/lib/ecm/products/routing.rb +22 -0
  37. data/lib/ecm/products/version.rb +5 -0
  38. data/lib/ecm_products.rb +13 -0
  39. data/lib/tasks/ecm_products_tasks.rake +77 -0
  40. 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,9 @@
1
+ class Ecm::Products::ProductsController < ApplicationController
2
+ def index
3
+ @products = ::Ecm::Products::Product.all
4
+ end
5
+
6
+ def show
7
+ @product = ::Ecm::Products::Product.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,5 @@
1
+ module Ecm::Products
2
+ def self.table_name_prefix
3
+ 'ecm_products_'
4
+ end
5
+ 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,6 @@
1
+ <h1><%= Ecm::Products::ProductCategory.model_name.human(:count => :other) %></h1>
2
+
3
+ <%= nested_li(@product_categories, { :tree_css_class => 'tree unstyled' }) do |product_category, level| %>
4
+ <%= link_to product_category.tree_name, product_category %>
5
+ <% end %>
6
+
@@ -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,3 @@
1
+ <h1>Ecm::Products::Products#index</h1>
2
+
3
+ <%= render :partial => "product_preview", :collection => @products, :as => :product %>
@@ -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