Задать вопрос
HelpSophie
@HelpSophie

Как получать данные из разных JSON для разных страниц и языковых версий (Nunjucks)?

Мучаю Nunjucks.
Есть задача сверстать страниц 20-30 и на двух языках (ru, eng).

Хочу получать данные из json с такой структурой:
source
---data
--- ---pages
--- --- ---ru
--- --- --- ---index.json
--- --- --- ---catalog.json
--- --- --- ---contact.json (ит.д.)
--- --- ---en
--- --- --- ---index.json
--- --- --- ---catalog.json
--- --- --- ---contact.json (ит.д.)
--- --- global-ru.json
--- --- global-en.json


Пока у меня получается получать данные только из одного файла json

Появилось несколько вопросов:
1. Как сделать так, чтобы нужная страница узнавала о своем json?

2. Пока имею представление как это решить в 2 отдельных gulp-таска. Их как-то можно хитро объединить в одну задачу? И имеет ли это смысл

Вот мой таск:
my gulp task

const gulp = require("gulp");
const data = require("gulp-data");
const nunjucksRender = require("gulp-nunjucks-render");

// HTML (Nunjacks)
const njkHTML = () => {
  let versionNumber = Number(new Date().toISOString().replace(/\D+/g, ""));

  return gulp.src("source/*.njk")
    .pipe(plumber())

   .pipe(data(function () {
      return [require("./source/data/global-ru.json"),
       require("./source/data/pages/ru/index.json")];
    }))
/*  с таким return вообще не получает данные  */
/*  работает только когда 1 файл  */

    .pipe(nunjucksRender({

      manageEnv: (env) => {
        env.opts.autoescape = false;
        env.addGlobal(`template`, `source/layouts/default.njk`);
        env.addGlobal(`versionNumber`, versionNumber);
      }
    }))
    .pipe(gulp.dest("build"));
};
exports.njkHTML = njkHTML;



Если нужно что-то еще уточнить, скажите.
  • Вопрос задан
  • 229 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
delphinpro
@delphinpro Куратор тега HTML
frontend developer
Вот здесь https://www.npmjs.com/package/gulp-data
Первый же пример "Get data via JSON file, keyed on filename."
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы