---
title: "Раскопал интересный тип поля в Joomla - Groupedlist - WebTolk"
description: "Как создать свой тип поля Joomla Form для группированного списка? Groupedlist Form Field. php код."
url: "https://web-tolk.ru/blog/raskopal-interesnyj-tip-polya-v-joomla-groupedlist"
date: "2025-09-25T05:39:38+00:00"
language: "ru-RU"
---

# Раскопал интересный тип поля в Joomla - Groupedlist

 Автор: Сергей Толкачев Создано: 25 сентября 2025 Обновлено: 25 сентября 2025 Просмотров: 339    ![](https://web-tolk.ru/blog/images/blog/raskopal-interesnyj-tip-polya-v-joomla-groupedlist/header.webp)

В процессе работы над компонентом нужно разделить опции выпадающего списка на группы. Я писал ранее как это сделать просто в коде тут: [статья](https://web-tolk.ru/blog/index.php?option=com_content&view=article&id=115&catid=10&lang=ru-RU), [пост](https://t.me/webtolkru/377). Но как сделать такой список для использования в описаниях форм в xml?

Первой мыслью было сделать свой тип поля, расширяющий стандартный `\Joomla\CMS\Form\Field\ListField`. Однако, в ядре Joomla нашёлся уже готовый класс поля для группированных списков `\Joomla\CMS\Form\Field\GroupedlistField`. Он расширяет напрямую `FormField` и имеет 2 метода - `getGroups()` и `getInput()`.

В `getInput()` вызывается метод `getGroups()` для получения массивов с группами опций и его можно было спокойно заменить на `collectLayoutData()`, где этой работе самое и место, но это не слишком принципиально. И там и там работа делается. Поэтому нас интересует именно метод `getGroups()`.

Мы создаём свой класс поля, расширяем `GroupedlistField`. Делаем обязательно свой `$type` для поля и реализуем метод `getGroups()`. Всё.

```
<?php
use Joomla\CMS\Form\Field\GroupedlistField;
use Joomla\CMS\HTML\HTMLHelper;

class ServerschemelistField extends GroupedlistField
{
    // type совпадает с именем файла и класса
    // без суффикса 'Field'
    protected $type = 'Serverschemelist';

    /**
     * Method to get the field options.
     *
     * @return  array  The field option objects.
     *
     * @throws  Exception
     *
     * @since  1.0.0
     */
    protected function getGroups(): array
    {
        // наши группы
        $group1 = [];
        $group2 = [];
        $data   = []; // какой-то массив с чем-нибудь
        // Собираем первую группу опций
        foreach ($data as $item) {
            $optionattr = [];
            // Атрибуты для <option>
            if ($something_happend) {
                $optionattr['option.attr'] = [
                    'selected' => 'selected',
                    'onclick'  => 'earthQuake()',
                    'showon'   => 'field1:value1000',
                ];
            }

            $group1[] = HTMLHelper::_(
                'select.option',
                $item->option_value,
                $item->option_label_text,
                $optionattr
            );
        }
        // Аналогично собираем $group2
        // ...
        $groups = [
            ['Имя группы 1'] = $group1,
            ['Имя группы 2'] = $group2,
        ];
        // В parent::getGroups() будут значения
        // из xml-описания формы, если они есть.
        // Соединяем их с нашими.
        return array_merge(parent::getGroups(), $groups);
    }
}
```

- [Пост в Telegram-канале](https://t.me/webtolkru/708)

## Об авторе

![Толкачев Сергей Юрьевич](https://web-tolk.ru/images/uslugi/sergey-tolkachyov-apr-2023.webp)

### Толкачев Сергей Юрьевич

Joomla-разработчик. [Контрибьютер ядра Joomla](https://github.com/joomla/joomla-cms/pulls?q=is%3Apr+author%3Asergeytolkachyov+). Один из ведущих Telegram-канала русскоязычного Joomla-сообщества [JoomlaFeed](https://t.me/joomlafeed), один из модераторов [чата русскоязычного Joomla-сообщества](https://t.me/joomlaru). Мои расширения в официальном маркетплейсе расширений Joomla - [Joomla Extensions Directory](https://extensions.joomla.org/profile/profile/details/528051/). Имею публикации в [официальном журнале международного Joomla-сообщества - Joomla Community Magazine](https://magazine.joomla.org/authors/sergeytolkachyov) и на [официальном сайте русскоязычного Joomla-сообщества](https://joomlaportal.ru/users/sergey-tolkachyov).

Муж. Отец 3 детей.

Россия, Саратов.

## JSON-LD Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "item": {
                "@id": "https://web-tolk.ru/",
                "name": "Главная"
            }
        },
        {
            "@type": "ListItem",
            "position": 2,
            "item": {
                "@id": "https://web-tolk.ru/blog",
                "name": "Блог"
            }
        },
        {
            "@type": "ListItem",
            "position": 3,
            "item": {
                "name": "Раскопал интересный тип поля в Joomla - Groupedlist"
            }
        }
    ]
}
```

```json
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Organization",
            "@id": "https://web-tolk.ru/#/schema/Organization/base",
            "name": "WebTolk",
            "url": "https://web-tolk.ru/",
            "logo": {
                "@type": "ImageObject",
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo",
                "url": "images/webtolk-1080p.jpg",
                "contentUrl": "images/webtolk-1080p.jpg",
                "width": 1920,
                "height": 1080
            },
            "image": {
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo"
            },
            "sameAs": [
                "https://github.com/WebTolk",
                "https://github.com/sergeytolkachyov",
                "https://vk.com/web_tolk",
                "https://vk.com/webtolkru",
                "https://tenchat.ru/sergeytolkachyov",
                "https://t.me/sergeytolkachyov",
                "https://t.me/webtolkru"
            ]
        },
        {
            "@type": "WebSite",
            "@id": "https://web-tolk.ru/#/schema/WebSite/base",
            "url": "https://web-tolk.ru/",
            "name": "WebTolk",
            "publisher": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            }
        },
        {
            "@type": "WebPage",
            "@id": "https://web-tolk.ru/#/schema/WebPage/base",
            "url": "https://web-tolk.ru/blog/raskopal-interesnyj-tip-polya-v-joomla-groupedlist",
            "name": "Раскопал интересный тип поля в Joomla - Groupedlist - WebTolk",
            "description": "Как создать свой тип поля Joomla Form для группированного списка? Groupedlist Form Field. php код.",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebSite/base"
            },
            "about": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            },
            "inLanguage": "ru-RU",
            "breadcrumb": {
                "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17"
            }
        },
        {
            "@type": "Article",
            "@id": "https://web-tolk.ru/#/schema/com_content/article/152",
            "name": "Раскопал интересный тип поля в Joomla - Groupedlist",
            "headline": "Раскопал интересный тип поля в Joomla - Groupedlist",
            "inLanguage": "ru-RU",
            "author": {
                "@type": "Person",
                "name": "Сергей Толкачев"
            },
            "thumbnailUrl": "images/blog/raskopal-interesnyj-tip-polya-v-joomla-groupedlist/header.webp",
            "image": "images/blog/raskopal-interesnyj-tip-polya-v-joomla-groupedlist/header.webp",
            "dateModified": "2025-09-25T00:00:00+00:00",
            "interactionStatistic": {
                "@type": "InteractionCounter",
                "userInteractionCount": 339
            },
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebPage/base"
            }
        }
    ]
}
```
