Разработка кастомного шаблона Joomla

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка кастомного шаблона Joomla
Средняя
~5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • 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

Разработка кастомного шаблона Joomla

Шаблон Joomla определяет внешний вид сайта: HTML-разметку, CSS, подключение JavaScript. Joomla 5 использует шаблон Cassiopeia как базовый — можно создать дочерний шаблон (child template) или разработать с нуля.

Структура шаблона

templates/my-template/
├── index.php              # Главный файл шаблона
├── templateDetails.xml    # Манифест (обязательно)
├── component.php          # Шаблон для компонентов (print-версия)
├── error.php              # Страница ошибок
├── offline.php            # Страница обслуживания
├── css/
│   ├── template.css
│   └── custom.css
├── js/
│   └── template.js
├── images/
│   └── logo.svg
├── html/                  # Переопределения layout компонентов
│   ├── com_content/
│   │   └── article/
│   │       └── default.php
│   └── layouts/
│       └── joomla/
└── language/
    └── ru-RU/

templateDetails.xml

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="template" client="site">
    <name>my-template</name>
    <author>Your Company</author>
    <version>1.0.0</version>
    <description>Кастомный шаблон</description>

    <files>
        <filename>index.php</filename>
        <filename>templateDetails.xml</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>images</folder>
        <folder>html</folder>
    </files>

    <positions>
        <position>header</position>
        <position>banner</position>
        <position>top-a</position>
        <position>top-b</position>
        <position>main-top</position>
        <position>sidebar-left</position>
        <position>sidebar-right</position>
        <position>main-bottom</position>
        <position>footer</position>
    </positions>

    <config>
        <fields name="params">
            <fieldset name="basic">
                <field name="logo" type="media" label="Логотип" />
                <field name="accent_color" type="color" label="Цвет акцента" default="#0066cc" />
                <field name="show_backtotop" type="radio" label="Кнопка вверх"
                    default="1">
                    <option value="1">Да</option>
                    <option value="0">Нет</option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>

index.php: основной файл

<?php defined('_JEXEC') or die; ?>
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
    <jdoc:include type="metas" />
    <jdoc:include type="styles" />
    <?php
    // Подключаем CSS шаблона
    $wa = $this->getWebAssetManager();
    $wa->registerAndUseStyle('template.my-template', 'css/template.css');
    $wa->registerAndUseScript('template.my-template', 'js/template.js', [], ['defer' => true]);
    ?>
</head>
<body class="site <?php echo $this->params->get('pageclass_sfx', ''); ?>">

<header class="site-header">
    <?php if ($this->params->get('logo')) : ?>
        <a href="<?php echo $this->baseurl; ?>" class="site-logo">
            <img src="<?php echo HTMLHelper::_('image', $this->params->get('logo'), '', [], true, 1); ?>"
                 alt="<?php echo $sitename; ?>" loading="eager">
        </a>
    <?php endif; ?>

    <nav class="site-nav">
        <jdoc:include type="modules" name="header" style="none" />
    </nav>
</header>

<div class="site-wrapper">
    <?php if ($this->countModules('sidebar-left')) : ?>
    <aside class="sidebar sidebar--left">
        <jdoc:include type="modules" name="sidebar-left" style="xhtml" />
    </aside>
    <?php endif; ?>

    <main class="site-content" id="main-content">
        <jdoc:include type="message" />
        <jdoc:include type="component" />
    </main>

    <?php if ($this->countModules('sidebar-right')) : ?>
    <aside class="sidebar sidebar--right">
        <jdoc:include type="modules" name="sidebar-right" style="xhtml" />
    </aside>
    <?php endif; ?>
</div>

<footer class="site-footer">
    <jdoc:include type="modules" name="footer" style="none" />
    <p>© <?php echo date('Y'); ?> <?php echo $sitename; ?></p>
</footer>

<jdoc:include type="scripts" />
</body>
</html>

Переопределение layout компонента

Скопировать оригинальный layout в папку html/ шаблона:

components/com_content/tmpl/article/default.php
→
templates/my-template/html/com_content/article/default.php

Joomla автоматически использует версию из шаблона. Изменить разметку статьи, не трогая файлы ядра.

Дочерний шаблон (Child Template)

Joomla 4+ поддерживает child templates:

<!-- templateDetails.xml дочернего шаблона -->
<inheritable>0</inheritable>
<parent>cassiopeia</parent>

Дочерний шаблон наследует все файлы родителя, переопределяет только то, что нужно. Обновления родителя применяются автоматически.

Сборка с Vite

// vite.config.js
export default {
    build: {
        outDir: 'templates/my-template',
        rollupOptions: {
            input: { main: 'src/js/main.js' },
            output: { assetFileNames: 'css/[name].[ext]', entryFileNames: 'js/[name].js' }
        }
    }
};

Сроки

Разработка кастомного шаблона по готовому дизайну с 8–12 позициями модулей — 5–10 дней.