Розробка кастомних плагінів MkDocs

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка кастомних плагінів MkDocs
Середня
~2-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

Розроблення користувацьких плагінів MkDocs

Плагіни MkDocs — це класи Python, підключені через события життєвого циклу збірки. Вони можуть змінювати вміст сторінок, навігацію, конфігурацію та підсумковий вивід HTML.

Структура плагіна

# my_mkdocs_plugin/__init__.py
from mkdocs.plugins import BasePlugin
from mkdocs.config import config_options
from mkdocs.config.base import Config

class MyPluginConfig(Config):
    api_url = config_options.Type(str, default='')
    cache_timeout = config_options.Type(int, default=3600)
    enabled = config_options.Type(bool, default=True)


class MyMkDocsPlugin(BasePlugin[MyPluginConfig]):

    def on_config(self, config):
        """Викликається після завантаження mkdocs.yml"""
        if not self.config.enabled:
            return config
        # Можна змінювати глобальну конфігурацію
        config['extra']['my_plugin_version'] = '1.0.0'
        return config

    def on_page_markdown(self, markdown, page, config, files):
        """Змінення Markdown до конвертування в HTML"""
        # Замінюємо користувацькі теги
        markdown = markdown.replace('{{VERSION}}', self._get_version())
        return markdown

    def on_page_content(self, html, page, config, files):
        """Змінення готового HTML сторінки"""
        # Додаємо користувацький банер на конкретні сторінки
        if page.meta.get('deprecated'):
            banner = '<div class="deprecated-notice">⚠️ Застарілий розділ</div>'
            html = banner + html
        return html

    def on_page_context(self, context, page, config, nav):
        """Додавання змінних у контекст шаблона"""
        context['api_status'] = self._get_api_status()
        return context

    def on_files(self, files, config):
        """Додавання/видалення файлів зі збірки"""
        return files

    def on_nav(self, nav, config, files):
        """Змінення навігації"""
        return nav

    def on_post_build(self, config):
        """Після завершення збірки"""
        self._notify_build_complete()

    def _get_version(self):
        import requests
        resp = requests.get(f"{self.config.api_url}/version", timeout=5)
        return resp.json().get('version', 'unknown')

Реєстрація через entry_points

# pyproject.toml
[project.entry-points."mkdocs.plugins"]
my-plugin = "my_mkdocs_plugin:MyMkDocsPlugin"
# mkdocs.yml
plugins:
  - my-plugin:
      api_url: https://api.myproject.com
      cache_timeout: 7200

Плагін для генерування сторінок API

class ApiDocsPlugin(BasePlugin):
    """Генерує сторінки документації зі специфікації OpenAPI"""

    def on_files(self, files, config):
        import yaml
        import requests
        from mkdocs.structure.files import File

        spec = requests.get(self.config.openapi_url).json()

        for path, methods in spec['paths'].items():
            for method, operation in methods.items():
                content = self._generate_endpoint_page(path, method, operation, spec)
                # Створюємо віртуальний файл без запису на диск
                file = File.generated(
                    config,
                    f"api/{self._path_to_slug(path)}-{method}.md",
                    content=content,
                )
                files.append(file)

        return files

    def _generate_endpoint_page(self, path, method, operation, spec):
        return f"""# {operation.get('summary', path)}

**{method.upper()}** `{path}`

{operation.get('description', '')}

## Parameters

{self._render_parameters(operation.get('parameters', []))}

## Responses

{self._render_responses(operation.get('responses', {}))}
"""

Розроблення плагіна для генерування сторінок із зовнішнього джерела займає 2–5 днів.