---
title: "Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля - Joomlaportal"
description: "Как создать нестандартный HTML макет в шаблоне Joomla с помощью пользовательских полей и собственных макетов вывода? Примеры HTML и PHP кода. Веб-разработка."
url: "https://joomlaportal.ru/blogs/development/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya"
date: "2026-10-05T00:31:54+03:00"
language: "ru-RU"
---

## Breadcrumbs

[Главная](https://joomlaportal.ru/) > [Блоги](https://joomlaportal.ru/blogs) > [Разработка](https://joomlaportal.ru/blogs/development) > Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля

[Разработка](https://joomlaportal.ru/blogs/development)

# Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля

[Сергей Толкачёв](https://joomlaportal.ru/users/sergey-tolkachyov) 24 июня 2025 5 мин 5377 просмотров

Поделиться: [ВКонтакте](https://vk.com/share.php?url=https%3A%2F%2Fjoomlaportal.ru%2Fblogs%2Fdevelopment%2Fsovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya&title=%D0%A1%D0%BE%D0%B2%D0%B5%D1%82+%D0%BF%D0%BE+Joomla%3A+%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F+%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8+%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F) [Одноклассники](https://connect.ok.ru/offer?url=https%3A%2F%2Fjoomlaportal.ru%2Fblogs%2Fdevelopment%2Fsovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya&title=%D0%A1%D0%BE%D0%B2%D0%B5%D1%82+%D0%BF%D0%BE+Joomla%3A+%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F+%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8+%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F) [Telegram](https://t.me/share/url?url=https%3A%2F%2Fjoomlaportal.ru%2Fblogs%2Fdevelopment%2Fsovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya&text=%D0%A1%D0%BE%D0%B2%D0%B5%D1%82+%D0%BF%D0%BE+Joomla%3A+%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F+%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8+%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%BB%D1%8F)

![Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/header.webp)

Иногда дизайнеры рисуют непростые макеты. Внешне в них выглядит всё просто и красиво. Но ты смотришь на них и думаешь: "А с помощью чего я буду реализовывать это?".

Эта каруселька - плагином [WT Content Image gallery](https://web-tolk.ru/dev/joomla-plugins/wt-content-image-gallery). Эта карусель фото и видео в виде формата сторис - тоже им же. Вставляем просто шорткодами в материал.

Но между ними оказывается большой объём текста с описанием проекта, внутри которого ещё и блок с повторяемыми элементами - ассортимент проекта. Скрыт этот большой текст под спойлер с большой же синей кнопкой. Всё должно раскрываться / открываться, А заполнять всё это нужно далеко не программистам...

Размещать адаптивную вёрстку в материал - можно, но в данном случае не нужно. Кто-нибудь обязательно накосячит при копировании или правке шаблона текста. Поэтому решаем задачу с **помощью пользовательских полей Joomla**.

Вставить поля в материал Joomla можно с помощью кнопки редактора "Поле".

 ![joomla insert field editor button](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/joomla-insert-field-editor-button.webp) Кнопка редактора Joomla для вставки шорт-кода поля

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

![joomla insert field editor modal window](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/joomla-insert-field-editor-modal-window.webp)

Для содержимого спойлера мы создаем пользовательское поле типа редактор. В тело материала вставляем шорт код (с помощью кнопки редактора "поля") виде . Создаём собственный **макет вывода для поля Joomla** (в статье [Как происходит рендер пользовательских полей в Joomla?](https://habr.com/ru/articles/678538/)). В нём оборачиваем содержимое в собственно спойлер. В моём случае это Bootstrap collapse.

 ![](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/joomla-article-layout-with-field-shortcode.webp) Cтатья Joomla с шорткодами плагинов WT Content image gallery и стандартного плагина вставки полей.

Теперь любой текст, который мы наберём в поле редактора будет скрыт по умолчанию и будет раскрываться по нажатию на большую синюю кнопку. Содержимое поля пропускаем через `HTMLHelper::_('content.prepare', $field->value);`, чтобы работали шорт-коды, если вдруг потребуются. Стало так:

```
<?php
// мы в файле своего макета поля
// /templates/[ВАШ_ШАБЛОН]/html/layouts/com_fields/field/etapy-raboty-nad-proektom.php

use Joomla\CMS\HTML\HTMLHelper;
// типичный код макета поля пропускаем
// тут куча вёрстки
// и самое важное - вывод содержимого поля.

// $value - это текст из поля редактора
echo HTMLHelper::_('content.prepare', $value);
```

## Отображение пользовательского поля Joomla внутри другого пользовательского поля

Теперь принимаемся за адаптивную сетку с повторяемыми элементами - ассортимент проекта. Создаём 2 поля: типа **text** - для заголовка элемента, и **textarea** - для описания. Обоим полям ставим галочку "только в дочерней форме". Создаём 3-е поле - дочернюю форму, в настройках которой выбираем созданные заголовок и описание. Форма повторяемая, отключаем автоматическое отображение. Создаём свой макет вывода для поля и выбираем его в настройках.

![joomla 5 поле дочерняя форма с выбором полей](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/joomla-5-subform-field-params.webp)

Казалось бы - всё. Но нам нужно этот макет выводить ВНУТРИ предыдущего поля. Простая вставка шорт-кода типа  в содержимое поля не заработала. Поэтому я решил напрямую вызвать метод `onContentPrepare` плагина **Поля** группы контент, убрав при этом обработку `HTMLHelper`. Чтобы плагин заработал - нужно передать ему объект со свойством `text`, в котором находится содержимое поля для обработки и свойство `id`, означающее **id материала Joomla**. Не забыть указать нужный контекст для поля.

```
<?php
// мы находимся в файле макета поля
use Joomla\CMS\Factory;

$app = Factory::getApplication();
$fakeItem = new \stdClass();
// Получаем id текущего материала из объекта Input
$fakeItem->id = $app->getInput()->getInt('id');
//  - это шорт код вставки поля с id 29 - "ассортимент проекта"
// к содержимому поля конкатенируем шорт-код для обработки
$fakeItem->text = $field->value . '';
// Получаем объект плагина
$joomlaFieldContentPlugn = $app->bootPLugin('fields', 'content');
// вызываем метод обработки напрямую
$joomlaFieldContentPlugn->onContentPrepare('com_content.article', $fakeItem, $app->getParams());
// выводим оба поля
echo $fakeItem->text;
```

Теперь всё работает.

Минусы такого подхода - хардкод. В случае, когда шорт-код поля виден в админке - проще понять что там нагорожено. Но в данном случае сайт веду я и никто кроме меня.

## Почему не заработал content.prepare HTMLHelper?

Под капотом метод **HTMLHelper::_('content.prepare', $text)** делает в то же самое, что и сделал я: создаёт объект, эмулирующий объект материала, а потом возвращает обработанное свойство. За одним исключением - он не добавляет в него `id`. А `id` материала необходим контент-плагину **Поля** для того, чтобы получить значения полей конкретного материала. Поэтому, когда мы сами сделали то же самое, но добавив id - плагин заработал.

## Изменения в Joomla 5.3+

Joomla постепенно переходит от простого указания аргументов для триггеров плагинов к собственным классам событий. Это позволяет не запоминать порядок передачи аргументов класса и использовать человекопонятные методы `$event->getContext()`, `$event->getItem()` и т.д. А то в одном месте в Joomla было `$article`, в другом - `$item`, в третьем ещё как-то... Порядку больше становится.

После обновления сайта клиентов до Joomla 5.3 обновился и контент-плагин **fields** и описанный выше способ с вызовом метода плагина отвалился потому, что я передавал в нём 3 аргумента, вместо одного. И для события `onContentPrepare` это должен быть объект класса `ContentPrepareEvent`.

Как меняется фрагмент кода из предыдущего поста:

```
<?php
// мы находимся в файле макета поля

use Joomla\CMS\Event\Content\ContentPrepareEvent;
use Joomla\CMS\Factory;

$app = Factory::getApplication();
$fakeItem = new \stdClass();
// Получаем id текущего материала из объекта Input
$fakeItem->id = $app->getInput()->getInt('id');
//  - это шорт код вставки поля с id 29 - "ассортимент проекта"
// к содержимому поля конкатенируем шорт-код для обработки
$fakeItem->text = $field->value . '';
// Получаем объект плагина
$joomlaFieldContentPlugn = $app->bootPLugin('fields', 'content');
// вызываем метод обработки напрямую
// вместо 3-х аргументов теперь указываем один
// это объект класса ContentPrepareEvent
$joomlaFieldContentPlugn->onContentPrepare(new ContentPrepareEvent('onContentPrepare', [
            'context' => 'com_content.article',
            'subject' => $fakeItem,
            'params'  => $app->getParams(),
            'page'    => 0,
        ]));
// выводим оба поля
echo $fakeItem->text;
```

##### Теги:

[PHP](https://joomlaportal.ru/tags/php) [поля Joomla](https://joomlaportal.ru/tags/polya-joomla) [разработка](https://joomlaportal.ru/tags/razrabotka)

### Похожие статьи

[!\[Совет по Joomla: Как сделать ссылки на списки сущностей Joomla с фильтрацией?\](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/joomla-ssylki-na-spiski-sushchnostej-s-filtratsiej/header.webp)](https://joomlaportal.ru/blogs/development/joomla-ssylki-na-spiski-sushchnostej-s-filtratsiej)

31 августа 2026

##### [Совет по Joomla: Как сделать ссылки на списки сущностей Joomla с фильтрацией?](https://joomlaportal.ru/blogs/development/joomla-ssylki-na-spiski-sushchnostej-s-filtratsiej)

В Joomla в любом списке сущностей есть параметры поиска, которыми мы привыкли пользоваться...

[Читать далее](https://joomlaportal.ru/blogs/development/joomla-ssylki-na-spiski-sushchnostej-s-filtratsiej)

[!\[Переопределение макета НЕ в шаблоне Joomla\](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/pereopredelenie-maketa-ne-v-shablone-joomla/header.webp)](https://joomlaportal.ru/blogs/development/pereopredelenie-maketa-ne-v-shablone-joomla)

31 августа 2026

##### [Переопределение макета НЕ в шаблоне Joomla](https://joomlaportal.ru/blogs/development/pereopredelenie-maketa-ne-v-shablone-joomla)

Мы все знаем, что при работе с сайтом создание своих переопределений стандартных макетов — это...

[Читать далее](https://joomlaportal.ru/blogs/development/pereopredelenie-maketa-ne-v-shablone-joomla)

[!\[Общая информация о принципе действия Joomla 6. Жизненный цикл Приложений Joomla.\](https://joomlaportal.ru/blogs/development/images/blogs/razrabotka/obshchaya-informatsiya-o-printsipe-dejstviya-joomla-6-zhiznennyj-tsikl-prilozhenij-joomla/header-1080.webp)](https://joomlaportal.ru/blogs/development/obshchaya-informatsiya-o-printsipe-dejstviya-joomla-6-zhiznennyj-tsikl-prilozhenij-joomla)

01 июля 2026

##### [Общая информация о принципе действия Joomla 6. Жизненный цикл Приложений Joomla.](https://joomlaportal.ru/blogs/development/obshchaya-informatsiya-o-printsipe-dejstviya-joomla-6-zhiznennyj-tsikl-prilozhenij-joomla)

Как работает ядро Joomla 6 на уровне Приложения (Application)? Сколько видов Приложений на самом...

[Читать далее](https://joomlaportal.ru/blogs/development/obshchaya-informatsiya-o-printsipe-dejstviya-joomla-6-zhiznennyj-tsikl-prilozhenij-joomla)

[Назад](https://joomlaportal.ru/blogs/development) [На главную](https://joomlaportal.ru/)

## JSON-LD Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "name": "Главная",
            "item": "https://joomlaportal.ru/"
        },
        {
            "@type": "ListItem",
            "position": 2,
            "name": "Блоги",
            "item": "https://joomlaportal.ru/blogs"
        },
        {
            "@type": "ListItem",
            "position": 3,
            "name": "Разработка",
            "item": "https://joomlaportal.ru/blogs/development"
        },
        {
            "@type": "ListItem",
            "position": 4,
            "name": "Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля",
            "item": "https://joomlaportal.ru/blogs/development/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya"
        }
    ]
}
```

```json
{
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": "Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля",
    "url": "https://joomlaportal.ru/blogs/development/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya",
    "datePublished": "2025-06-24T04:42:23+03:00",
    "dateModified": "2025-06-24T04:44:41+03:00",
    "author": {
        "@type": "Person",
        "name": "Сергей Толкачёв"
    },
    "publisher": {
        "@type": "Organization",
        "name": "Joomlaportal.ru",
        "logo": {
            "@type": "ImageObject",
            "url": "https://joomlaportal.ru/images/schema-org-portal-logo.jpg"
        }
    },
    "articleSection": "Разработка",
    "description": "Как создать нестандартный HTML макет в шаблоне Joomla с помощью пользовательских полей и собственных макетов вывода? Примеры HTML и PHP кода. Веб-разработка.",
    "image": {
        "@type": "ImageObject",
        "url": "https://joomlaportal.ru/images/blogs/razrabotka/sovet-po-joomla-render-polzovatelskogo-polya-vnutri-drugogo-polzovatelskogo-polya/header.webp"
    }
}
```
