Избегайте создания идентичных страниц с посредником по доверенности - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю статический веб-сайт с Middleman, ссылаясь на продукты, проанализированные из электронной таблицы.

В моей таблице есть следующие столбцы:

 _________________________________
| Product Name | Price | Category |
| Pet Food     |   $12 | Pets     |
| iPhone       |  $500 | Phone    |
| Pet toy      |   $25 | Pets     |
|______________|_______|__________|

Я создал страницы, на которых отображаются все продукты в Pets и Phone категорий с использованием шаблона под названием product_category.html.Он создает страницу для каждой уникальной категории, например.pets.html и phone.html.

Проблема в том, что, учитывая мои действия, Middleman создает одну страницу категории для каждого продукта в категории, а затем пропускает ее, поскольку она идентична:

remote:           create     build/pets.html
remote:           identical  build/pets.html
remote:           create     build/iphone.html

Вот мой примердля config.rb:

rows_by_categories = app.data.spreadsheet.sheet1.group_by { |row| row.category }

#Category Landings

app.data.spreadsheet.sheet1.each do |f|
  proxy "/#{f.category.to_s.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')}.html", "/product_category.html", locals: {
    f: {
      categorytitle: f.category,
      name: f.name,
      all_in_category: rows_by_categories[f.category],
      price: f.selling_price,
    },
  categories: rows_by_categories.keys,
  }, ignore: true
end

Я понимаю, что цикл повторяется в каждой строке моей электронной таблицы и воссоздает страницу для соответствующей категории.Тем не менее, несколько попыток, которые я дал, например.изменение app.data.spreadsheet.sheet1.each do |f| на rows_by_categories.each do |f| не удалось.Любая подсказка?

1 Ответ

0 голосов
/ 04 февраля 2019

Как уже упоминалось, у меня нет опыта работы с middleman, но я все равно постараюсь помочь.

Похоже, ваша главная проблема в том, что вы зацикливаете отдельные элементы, а не группы.Вместо этого попробуйте следующее.

rows_by_categories = app.data.spreadsheet.sheet1.group_by { |row| row.category }

#Category Landings
rows_by_categories.each do |category, rows|
    path_name = "/#{category.to_s.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')}.html" 
    row_data = rows.map do |row| 
        {
          categorytitle: row.category,
          name: row.name,
          price: row.selling_price,
        }
    end
    proxy path_name, "/product_category.html", locals: {
        products: row_data,
        categories: rows_by_categories.keys
     }, ignore: true
end

Здесь мы перебираем категории, и products теперь будет Array всех товаров в этой категории, а не одного товара.Это, насколько я знаю, создаст одну страницу для каждой категории и даст вам коллекцию products, которую вы можете просмотреть

...