Как передать Дополнительные параметры в шаблон из админки Joomla 3

В этой статье рассмотрим, как при создании шаблона сайта Joomla 3 настроить дополнительные поля, значение которых можно редактировать в админке. Для этого потребуется внести дополнительные данные в файл конфигурации шаблона templateDetails.xml. Сразу рассмотрим, как это сделать в режиме поддержки мультиязычности админки и то, как подключить данные дополнительных полей шаблона, заданных в админке в сам шаблон сайта.

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Настройка передачи Дополнительных полей шаблона в файле конфигурации шаблона templateDetails.xml

Группа полей <config> конфига templateDetails.xml

Как вскользь упоминалось в статье по конфиг шаблона templateDetails.xml, есть группа параметров <config>, в которой можно задать параметры, которые попадут на вкладку «Дополнительные параметры» в настройках шаблона в Менеджере шаблонов Joomla. До тех пор, пока в конфиге не заданы эти параметры, вкладка «Дополнительные параметры» просто не будет отображаться.

Для того, чтобы задать дополнительный параметр, нужно воспользоваться рядом блоков, которые рассмотрим на примере одного поля, задающего цвет фона страницы:

<config>
	<fields name="params">
		<fieldset name="advanced">
			<field 
				name="templateBackgroundColor" 
				type="color" 
				label="TPL_REZON_BACKGROUND_COLOR_LABEL"
				description="TPL_REZON_BACKGROUND_COLOR_DESC" 
				class="" 
				default="#F4F6F7"
			/>
		</fieldset>
	</fields>
</config>

Итак,

  1. в контейнер <config> нужно вложить контейнер <fields> с параметром name="params".
  2. в этот контейнер <fields name="params"> нужно вложить контейнер <fieldset> с параметром name="advanced".
  3. в образовавшийся контейнер <fieldset name="advanced"> будем вкладывать поля с помощью контейнеров <field /> с параметрами, которые будут служить указанием того, что это за поле и как его обрабатывать.

Параметры поля <field /> для формирования дополнительных настраиваемых полей в шаблоне сайта Joomla

Дополнительные поля — это начиная с версии 3.8 Joomla, — стандартное расширение Joomla, поддерживаемое ядром. Поэтому набор полей стандартизирован, как и их параметры. Параметры поля, которые нужно описать в конфиге следующие:

  • Параметр «name» задаёт имя, по которому можно обратиться для того, чтобы задать, прочитать и изменить значение поля.
  • Параметр «type» задаёт тип поля. Все возможные типы настраиваемых полей Joomla имеет смысл рассмотреть в отдельной статье. Пока просто перечислю их: календарь, чекбокс, цвет, редактор, e-mail, галерея, изображение, целое число, список, медиа, радио, SQL, телефон, текст, текстовая область, часовой пояс, URL, пользователь, группа пользователей.
  • Параметр «label» задаёт подпись поля, отображаемое в админке (можно пользоваться языковыми константами).
  • Параметр «description» задаёт расширенное описание поля, которое высвечивается в виде подсказки в админке (можно пользоваться языковыми константами).
  • Параметр «class» позволяет задать css-класс для вывода поля в админке
  • Параметр «default» задаёт значение по умолчанию, которое будет использовано, если его не менять в админке.
    • другие параметры, которые пока не рассматриваю.

Для работы с настраиваемыми полями шаблона пока достаточно знать эти параметры для создания полноценного дополнительного функционала управления шаблоном в админке.

Поддержка мультиязычности при создании дополнительных полей шаблона в админке Joomla

В примере выше видно, что при задании значений параметров label и description поля использованы языковые константы, которые нужно задать в языковых файлах шаблона ru-RU.tpl_rezon.ini и en-GB.tpl_rezon.ini, для того, чтобы эти константы были выведены в виде текста, а не в виде названия константы.

Пример:

TPL_REZON_BACKGROUND_COLOR_LABEL="Цвет фона сайта"
TPL_REZON_BACKGROUND_COLOR_DESC="Для того, чтобы поменять цвет фона сайта, нужно выбрать цвет и сохранить изменения в шаблоне."

Важное замечание

При добавлении языковых констант в шаблон сайта, Joomla нужно их прочитать и перенести в языковые файлы шаблона, которые находятся тут:

language/ru-RU/ru-RU.tpl_rezon.ini
language/en-GB/en-GB.tpl_rezon.ini

А это происходит только при обновлении шаблона с сервера репозитория или при переустановке шаблона. Поэтому, для того, чтобы языковые константы обновились, нужно обновить или переустановить шаблон. Если это делать лень, можно ручками перенести значения этих констант в то место, откуда Joomla их берёт. Иначе, даже при заданных значениях в папке шаблона, они не будут применены и вместо их значений будет выдаваться их названия. Как обновить значения языковых констант шаблона без его переустановки или накатывания обновления, я пока не нашёл.

Чтение и применение значений дополнительных параметров шаблона

Осталось разобраться с тем, как прочитать значения дополнительных параметров шаблона и применить их при рендеринге.

Подключение и чтение дополнительных параметров происходит так:

$app = JFactory::getApplication();
$params = $app->getTemplate(true)->params;

Перед использованием, лучше убедиться, что параметр задан и только потом его использовать. Например с нашим параметром задания цвета фона страницы:

if ($this->params->get('templateBackgroundColor'))
{
	$this->addStyleDeclaration('
	body {
		background-color: ' . $this->params->get('templateBackgroundColor') . ';
	}');
}

Как видно на примере, вызов значения параметра происходит по его имени, заданному в name при описании в файле templateDetails.xml.

Выводы

Если всё сделано правильно, то дополнительные поля начинают работать сразу после установки шаблона и их можно менять и устанавливать в админке Joomla. Единственное неудобство в том, что языковые константа не подхватываются автоматически (для этого требуется их перенести в папку language Joomla или переустановить шаблон).

Синтаксис задания и вызова этих параметров предельно прост и позволяет использовать дополнительные параметры для придания гибкости в настройках шаблона. Поведение шаблона в зависимости от параметров — это уже вопрос программирования шаблона и фантазии его автора.

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню