Казалось, это просто - бери и переопределяй в свой шаблон. Но некоторые вещи оказались совсем не очевидными. Найденное решение, если честно, кажется костыльным, но работает. Пока что опишу кратко, потом оформлю в статью.
Чтобы сделать свой макет редактирования материала в Joomla нужно:
1️⃣ переопределить файл макета формы редактирования administrator/components/com_content/tmpl/article/edit.php в свой шаблон
2️⃣ закомментировать строку
// echo LayoutHelper::render('joomla.edit.params', $this);
Эта строка выводит поля материала дополнительными табами.
3️⃣ Переиначить вёрстку как надо, убрать лишние поля
4️⃣ Не потерять строку
echo $this->form->renderControlFields();
она нужна.
5️⃣ Получить поля в удобоваримом виде. Я предлагаю в массив.
$fields = [];
foreach ($this->form->getFieldsets() as $group => $fieldset) {
foreach ($this->form->getFieldset($group) as $field) {
$fields[$field->getAttribute('name')] = $field;
}
}
мы получаем тут все филдсеты, для каждого филдсета - все поля. Собираем их в массив, где ключ - системное имя поля.
6️⃣ Рендерим нужное поле
if($fields['coords']) {
echo $fields['coords']->renderField();
}
7️⃣ Если нужна совсем своя вёрстка - лейбл и инпут отдельно, то получаем их магическим методом __get()
.
echo $fields['pricelist']->__get('label'); // тут название свойства поля
8️⃣ Если нам нужно поле целиком, но со своими классами - устанавливаем свойства с помощью магического метода __set()
.
<?php
if($fields['pricelist']) :
$fields['pricelist']->__set('labelclass','h3 mt-4');
?>
<?php echo $fields['pricelist']->renderField(); ?>
<?php endif; ?>
Что мы теряем? - Автоматический рендер полей, если они были добавлены в админке. Ну а получаем гибкость в формировании макета редактирования / создания материала с фронта.