2014-12-30 2 views
2

Я работаю над некоторыми шаблонами для создания статического сайта с несколькими страницами. Каждая из этих страниц находится в другой папке, поэтому в основном это будет путь, подобный «/source/pages/page-1/index.html.erb».Локальные данные (JSON) в Middleman внутри другого пути, чем/данные

То, что я хочу добиться, чтобы поместить data.json файл в папке «страница-1», например, и извлечь его содержимое в index.html.erb файл в той же папке, используя посредника. Проблема в том, что Middleman требует, чтобы все файлы .json находились внутри «/data», и мне нужен каждый файл data.json внутри своей собственной папки.

Есть ли способ сделать Middleman извлечь каждый .json-файл отдельно для каждой папки?

Надеюсь, я был достаточно ясен. Любая помощь будет приветствоваться.

ответ

2

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

# config.rb 

helpers do 
    def json_data(filename = "data.json") 
    container_dir = File.split(current_resource.path).first.split(File::SEPARATOR).first 
    json_path = File.join(source, container_dir, filename) 
    ActiveSupport::JSON.decode(IO.read(json_path)) 
    end 
end 
+1

Я уже решил поместить всю информацию внутри «/ data» в виде массива и извлечь ее внутри каждой страницы, но это может быть именно то, что я искал. – NicolasJEngler

2

Я не думаю, что можно сделать что-то подобное. Похоже, что каталог определен here.

НО! Вы должны быть в состоянии изменить местоположение всего каталога данных:

set :data_dir, 'source/data' 
after_configuration do 
    data.categories.each do |category, data| 
    proxy "/#{category}.html", "/category.html", locals: {category: data} 
    end 
end 

Причина, почему это так, чтобы сгруппировать все данные в одном месте.

Вы можете сделать что-то вроде:

data 
|-- page1 
| |-- content1.yml 
| +-- content2.yml 
| 
|-- page2 
| |-- content1.yml 
| +-- content2.yml 
. 
. 

и извлечь его с помощью data.page1.content1.

Я с нетерпением жду, если кто-нибудь придет с хаком.

+0

Спасибо за предложение, radubogdan. Если ничего не придет, я, вероятно, в конечном итоге сделаю что-то подобное. – NicolasJEngler