Я создаю статический веб-сайт с помощью 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
.
Проблема в том, что, учитывая то, как я поступаю, Миддлман создает одну страницу категории для каждого продукта в категории, а затем пропускает ее, поскольку она идентична:
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|
не увенчалось успехом. Любая подсказка?
🤔 А знаете ли вы, что...
Ruby известен своей философией 'Принципов языка Ruby' (The Ruby Way), которая включает в себя простоту и элегантность.
Как уже упоминалось, у меня нет опыта работы с 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
, которую вы можете просмотреть.