Налаштування та кастомізація теми Jekyll

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування та кастомізація теми Jekyll
Проста
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування і кастомізація теми Jekyll

Jekyll-теми розповсюджуються двома способами: як gem-пакети (встановлюються через Bundler) і як звичайні репозиторії (копіюються безпосередньо). Механізм кастомізації відрізняється, але принцип override однаковий: файли в корені проекту перекривають файли теми.

Gem-based теми: як це працює

Коли тема встановлена як gem, її файли знаходяться в директорії Ruby gems, а не в проекті:

bundle info --path minima
# => /path/to/gems/minima-2.5.1

Для перегляду файлів теми:

bundle exec jekyll theme-files

Для override: скопіювати потрібний файл з gem в корінь проекту, зберігаючи структуру папок:

# Скопіювати макет теми в проект
cp $(bundle info --path minima)/_layouts/post.html _layouts/post.html

# Скопіювати частину
cp $(bundle info --path minima)/_includes/header.html _includes/header.html

Після цього редагуйте скопійований файл — Jekyll автоматично використовуватиме його замість оригіналу.

Налаштування через _config.yml

Більшість тем читають параметри з конфігу. Приклад для популярної теми Minimal Mistakes:

# Тема
remote_theme: "mmistakes/[email protected]"

# Скін теми
minimal_mistakes_skin: "air" # "default", "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"

# Параметри сайту
locale: "uk-UA"
title: "Назва сайту"
name: "Команда"
description: "Опис"
url: "https://example.com"

# Автор за замовчуванням
author:
  name: "Ім'я"
  avatar: "/assets/images/avatar.jpg"
  bio: "Короткий опис"
  links:
    - label: "Email"
      icon: "fas fa-fw fa-envelope-square"
      url: "mailto:[email protected]"
    - label: "LinkedIn"
      icon: "fab fa-fw fa-linkedin"
      url: "https://linkedin.com/in/username"

# Навігація
navigation:
  - title: "Головна"
    url: /
  - title: "Блог"
    url: /blog/
  - title: "Про нас"
    url: /about/

# Аналітика
analytics:
  provider: "google-gtag"
  google:
    tracking_id: "G-XXXXXXXXXX"
    anonymize_ip: false

# Коментарі
comments:
  provider: "disqus"
  disqus:
    shortname: "mysite"

Кастомізація стилів

Gem-теми зазвичай дозволяють додати кастомні стилі через спеціальний файл. Для Minima:

/* assets/css/style.scss */
---
---
@import "minima";

/* Ваші переопреділення */
:root {
  --base-font-size: 16px;
  --base-line-height: 1.7;
  --brand-color: #2563eb;
  --brand-color-dark: #1e40af;
}

.site-header {
  border-top: 4px solid var(--brand-color);
  background: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}

.post-title {
  font-size: 2.25rem;
  line-height: 1.2;
  letter-spacing: -0.02em;
}

Для Minimal Mistakes — через _sass/minimal-mistakes/_variables.scss (потрібно скопіювати з gem):

/* _sass/minimal-mistakes/_variables.scss */
$sans-serif: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !default;
$monospace: "JetBrains Mono", "Fira Code", monospace !default;

$primary-color: #2563eb !default;
$success-color: #22c55e !default;
$warning-color: #f59e0b !default;
$danger-color: #ef4444 !default;

$border-radius: 6px !default;
$box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1) !default;

Переопреділення шаблонів Liquid

Приклад: додати таблицю змісту (TOC) до макета посту:

<!-- _layouts/post.html -->
---
layout: default
---
<article class="post h-entry">
  <header class="post-header">
    <h1 class="post-title p-name">{{ page.title | escape }}</h1>
    <p class="post-meta">
      <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}">
        {{ page.date | date: "%d %B %Y" }}
      </time>
      {% if page.author %}· {{ page.author }}{% endif %}
    </p>
  </header>

  {% if page.toc %}
  <aside class="toc">
    <h2>Зміст</h2>
    {% include toc.html html=content %}
  </aside>
  {% endif %}

  <div class="post-content e-content">
    {{ content }}
  </div>

  {% if page.tags.size > 0 %}
  <div class="post-tags">
    {% for tag in page.tags %}
    <a href="/tags/{{ tag | slugify }}/" class="tag">#{{ tag }}</a>
    {% endfor %}
  </div>
  {% endif %}
</article>

Додавання кастомних партиалів

Якщо тема не передбачає потрібний компонент, створіть його в _includes/:

<!-- _includes/cta-banner.html -->
{% assign bg = include.bg | default: "primary" %}
{% assign title = include.title %}
{% assign subtitle = include.subtitle %}
{% assign button_text = include.button_text | default: "Дізнатися більше" %}
{% assign button_url = include.button_url | default: "/contact/" %}

<section class="cta-banner cta-banner--{{ bg }}">
  <div class="container">
    <h2>{{ title }}</h2>
    {% if subtitle %}
    <p>{{ subtitle }}</p>
    {% endif %}
    <a href="{{ button_url }}" class="btn btn--primary">{{ button_text }}</a>
  </div>
</section>

Використання на сторінці або макеті:

{% include cta-banner.html
  title="Готові розпочати проект?"
  subtitle="Обговоримо ваші завдання і підберемо рішення"
  button_text="Зв'язатися"
  button_url="/contact/"
  bg="dark"
%}

Управління навігацією

Для складних меню — через _data/navigation.yml:

main:
  - title: "Послуги"
    url: /services/
    children:
      - title: "Веб-розробка"
        url: /services/web/
      - title: "Мобільні додатки"
        url: /services/mobile/
  - title: "Блог"
    url: /blog/
  - title: "Контакти"
    url: /contact/
<!-- _includes/header.html -->
<nav>
  {% for item in site.data.navigation.main %}
  <div class="nav-item {% if item.children %}has-dropdown{% endif %}">
    <a href="{{ item.url | relative_url }}"
       {% if page.url == item.url %}aria-current="page"{% endif %}>
      {{ item.title }}
    </a>
    {% if item.children %}
    <ul class="dropdown">
      {% for child in item.children %}
      <li><a href="{{ child.url | relative_url }}">{{ child.title }}</a></li>
      {% endfor %}
    </ul>
    {% endif %}
  </div>
  {% endfor %}
</nav>

Терміни

Налаштування gem-теми через конфіг і кастомний CSS — 1–2 дні. Override шаблонів, додавання кастомних партиалів і даних — 3–5 днів.