Особенность Joomla: json-значения для пользовательских полей и их рендер в subform и вне дочерней формы.
Опять длинное название, но куда уж без этого...
Итак, если вы делаете плагин пользовательского поля - его можно использовать через FieldsHelper. И в процессе ваши данные проходят через различные этапы обработки (недавно была статья на эту тему). И может так оказаться, что ваше поле хранит в rawvalue json (и в базе данных соответственно тоже), а в value вы на его основе рендерите значение. Это стандартный подход Joomla. Так работают, например, поля accessiblemedia. Однако, если вы поместили ваше поле в дочернюю форму (пользовательское поле типа subform и включили "Рендеринг значений = Да", то у вашего замечательного поля может появиться поломанный Json в value вместо нормального значения.
Например:
{"basePath":"...","layout":"..."}
❓ Что там под капотом Joomla происходит?
В обычном потоке Joomla сначала вызывает событие
onCustomFieldsBeforePrepareField, а потомonCustomFieldsPrepareField.Внутри
subformже для подполей приrender_values=1вызывается только событие -onCustomFieldsPrepareField.Если преобразование значения (например,
json_decode) сделано в вашем плагине только вbeforePrepareField, оно не обработает данные для подполя и...В шаблоне поля строка заэкранируется (
htmlentities), кавычки превратятсяв тыквув"и вы получите кривой json, вместо вашего значения.
👉 Собственно полезный совет по Joomla:
Для полей, которые могут жить внутри subform, делайте нормализацию значения и в onCustomFieldsPrepareField тоже, не только в beforePrepareField.
