Подтягиваем данные из Кодзиро в таблицу Тильды

Алексей Тур

Основатель Kodzero.pro

13.04.2026

Тильда отличный инструмент для быстрой разработки классных с точки зрения визуала лендингов, но работа с динамичными данными не всегда удобна. Например, таблицы, контент которых редактируется через точку с запятой:

В моей практике был случай, когда заказчику нужно было обновлять доступность позиций и цен в прайс-листе чуть ли не каждый день. Отправлять менеджеров редактировать вручную значения в Тильде так часто — утомительно и рискованно: легко случайно сломать вёрстку или внести опечатку в цену.

Сегодня, я покажу как можно сделать простую модификацию для стандартного блока Тильды, которая позволит вставлять данные из таблицы Кодзиро в стандартный блок Тильды и получить удобный инструмент работы с данными.


  • Проблема: редактировать контент таблицы Тильды не удобно, работать с большими объемами тяжело.
  • Решение: сделаем скрипт, который будет подгружать данные из админки Кодзиро в стандартный блок Тильды
  • Плюс вайб: менять содержимое таблицы (добавлять строки, править цифры, картинки) можно будет в админке Кодзиро, а данные будут автоматически проверяться и мгновенно попадать на сайт.

Почему Кодзиро подходит для этой задачи

  • Kodzero — это конструктор бэкенда: создаёте коллекцию данных (таблицу) с любыми полями → получаете готовый API и удобную админку.
  • Вы можете настроить поля: текст, число, картинка, дата, выпадающий список и т.д. Риск ошибки снижается.
  • Данные легко получать на API на вашем сайте. Мгновенно.
  • Менять содержимое просто – отлично для клиентов или менеджеров. Необходимость разбираться с Тильдой отпадает.

Начало

Для примера, сделаем небольшой каталог/прайс-лист футболок с принтами котиков. Вместо футболок может быть что угодно: услуги, цены, список партнёров, меню ресторана, расписание занятий, портфолио проектов – логика одна и та же.

Создание коллекции данных

Для начала создадим в Кодзиро коллекцию (таблицу) и настроем то, из каких полей она состоит.

В моём примере схема выглядит следующим образом:

СвойствоТипДоп. настройки
skuЧислоНе может быть «0», Только уникальные значения
titleТекстНе может быть пустым
stockЧислоМожет быть «0»
priceЧислоНе может быть «0», минимум «0.1»
imageURLМожет быть пустым
Помимо удобства вывода данных, схема Кодзиро позволяет настраивать правила валидации данных. Например, указать что цена не может быть пустой и меньше 0.

Добавление данных

skutitlestockpriceimage
100001Футболка «Тёмный маг»651299https://s3.twcstorage.ru/b3c41028-d393b949-52c0-4ce6-8017-ca2f7d617e15/kodcats-tshirts/black-800.webp
...............
100010Футболка «Магический кот»12490https://s3.twcstorage.ru/b3c41028-d393b949-52c0-4ce6-8017-ca2f7d617e15/kodcats-tshirts/wizard-800.webp

Настройка API

API-эндпоинт уже готов. Зайдём в «Настройки API», чтобы узнать адрес, куда отправлять запросы, чтобы получить данные нашей таблицы.

Важно! Необходимо отключить методы API, которые нам не нужны. Оставим включенным только «View All» и «View»:

Копируем адрес и всё почти готово:

https://api.kodzero.pro/v1/10000/100014

Если открыть ссылку прямо сейчас, то можно будет увидеть данные, которые мы добавили в таблицу.

Создание таблицы в Тильде

Теперь подготавливаем всё на стороне Тильды. Создаём таблицу (Блок CL46) и указываем во вкладке «Контент» какие колонки в ней будут:

Изображение;Артикул;Название;Остаток;Цена;

Размещение скрипта

Теперь добавляем на страницу блок HTML-код (блок T123). Сюда мы добавим скрипт, который будет обращаться к API Кодзиро и вставлять данные в таблицу.

Содержимое этого блока можно скопировать и вставить:

<script>
(function() {
    const tableSyncConfig = {
        // ID блок Тильды с таблицей
        tableRecId: '#rec2144224941',
        // URL для получения данных из Kodzero
            collectionUrl: `https://api.kodzero.pro/v1/10000/100014`,
        // Настройки колонок
        // template - это шаблон, который определяет, как будет отображаться значение в ячейке.
        // В шаблоне {value} будет заменено на фактическое значение из данных Kodzero для этой колонки.
        // Отсутствие шаблона означает, что значение будет вставлено как есть, без дополнительного форматирования.
        columns: {
            'image': {
                title: 'Изображение',
                template: '<img src="{value}" alt="image" style="max-width: 180px; max-height: 180px;" />'
            },
            'sku': {
                title: 'Артикул',
                template: '<strong>{value}</strong>'
            },
            'title': {
                title: 'Название',
            },
            'stock': {
                title: 'Остаток',
                template: '{value} шт.'
            },
            'price': {
                title: 'Цена',
                template: '{value} ₽'
            }
        }
    }

    // =======================================================
    // Далее находятся технические функции
    // Их можно не трогать, если не нужно менять логику работы

    const fetchKodzeroData = async () => {
        try {
            const result = await fetch(tableSyncConfig.collectionUrl)
            const json = await result.json()
            return json.ok && json.result ? json.result.found : []
        } catch (error) {
            console.error('Ошибка при получении данных из Kodzero:', error)
            return []
        }
    }

    const getTable = () => {
        const divWrapper = document.querySelector('#' + tableSyncConfig.tableRecId.replace('#', ''))
        const table = divWrapper.querySelector('table')
        const widthSettings = table.getAttribute('data-table-width').split(';')
        const columns = getColumnIdsOrdered(table)

        if (!table || !columns.length) {
            console.error('Не удалось найти таблицу или определить колонки. Проверьте правильность настроек и структуру таблицы на Тильде')
            return null
        }

        const output = {
            divWrapper,
            table,
            widthSettings,
            columns
        }
        
        return output
    }

    const getColumnIdsOrdered = (tableNode) => {
        const headers = tableNode.querySelectorAll('.t431__thead th')
        const columns = [...headers].map(el => el.innerText)
        const idValues = tableSyncConfig.columns
        
        columns.forEach((header, i) => {
            const id = Object.keys(idValues).find(key => idValues[key]?.title === header)
            columns[i] = id || ''
        })

        return columns
    }

    const getTableBody = () => {
        const tableBody = document.querySelector('#' + tableSyncConfig.tableRecId.replace('#', '')).querySelector('.t431__tbody')
        return tableBody
    }

    const insertRows = (records, tableData) => {
        clearTable()
        const tableBody = getTableBody()

        records.forEach((record, i) => {
            const tr = document.createElement('tr')
            tr.classList.add(i % 2 === 0 ? 't431__oddrow' : 't431__evenrow')
            
            tableData.columns.forEach(col => {
                const template = tableSyncConfig.columns[col]?.template || '{value}'
                const value = template.replace('{value}', record[col] || '')
                const td = document.createElement('td')

                td.classList.add('t431__td')
                td.classList.add('t-text')
                td.innerHTML = value

                tr.appendChild(td)
            })

            tableBody.appendChild(tr)
        })
    }   

    const clearTable = () => {
        const tableId = '#' + tableSyncConfig.tableRecId.replace('#', '')
        const tableBody = document.querySelector(tableId)?.querySelector('.t431__tbody')
        if (!tableBody) return
        tableBody.innerHTML = ''
    }

    const syncTableWithKodzero = async () => {
        try {
            clearTable()

            const records = await fetchKodzeroData()
            if (!records.length) return console.warn('Нет данных для отображения в таблице')
            
            const tableData = getTable()
            if (!tableData) return console.warn('Обработка данных таблицы невозможна из-за ошибок в структуре или настройках')

            insertRows(records, tableData)
        } catch (error) {
            console.error('Неожиданная ошибка при синхронизации таблицы:', error)
        }
    }

    document.addEventListener('DOMContentLoaded', syncTableWithKodzero)
})()

Кстати, дополнительно скрипт позволяет указать шаблон того, как данные каждого столбца будут вставлены. Например, здесь мы вставляем URL изображения в тег img. {value} будет заменено на реально значение.

{
    'image': {
        title: 'Изображение',
        template: '<img src="{value}" alt="image" style="max-width: 180px; max-height: 180px;" />'
    },
}

Результат

Сохраняем страницу и открываем её. Демо-страница на Тильде

Как видим, контент автоматически попадает в таблицу Тильды. Больше не нужно возиться со сложным синтаксисом, который имеет большой потенциал для совершения ошибок 😉

Визуал вы можете менять как угодно в настройках самой таблицы Тильды, скрипт не влияет на него, а лишь получает данные и вставляет строки в таблицу.

Примеры задач

Какие ещё задачи можно решать таким способом:

  • Каталог услуг с ценами и описанием
  • Прайс-лист (таблица с артикулами, остатками)
  • Расписание мероприятий / вебинаров / тренировок
  • Портфолио проектов с фильтрацией по категориям
  • Меню ресторана (блюда, цены, состав)
  • Список партнёров / дилеров с контактами
  • Блог / новости (краткий список с ссылками)
  • Отзывы клиентов (с рейтингом и фото)

То есть любая информация, которую удобно представить в виде таблицы или карточек.


Если у вас возникли проблемы, напишите мне в Телеграм, я с радостью помогу вам ✌️