# Основа шаблонизатора

В CMS MMOWEB упрощена шаблонизация сайта на сколько это было возможно, добавлены теги отвечающие за рендеринг виджетов и основных элементов движка.

## &#x20;**Список основных тегов.**

```markup
<html lang="{$_LANG}">
  <head>
    {$_SEO_HEAD}
  </head>
  <body class="body">
    {$_SEO_BODY}
      .....
    {$_SEO_FOOTER}
  </body>
</html>
```

## SEO теги и подключение js и css файлов.

| ТЕГ              | Описание                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------- |
| {$\_LANG}        | Тег языка распростряняется на все шаблоны содержить ru,en итд в зависимости от выбранного языка |
| {$\_SEO\_HEAD}   | Этот тег парсится из файлов Headers.php и IncludeJsCss.php                                      |
| {$\_SEO\_BODY}   | Этот тег парсится из файла IncludeJsCss.php                                                     |
| {$\_SEO\_FOOTER} | Этот тег парсится из файла IncludeJsCss.php                                                     |

Рекомендовано для сайтов использующие переключения языков все заголовки содержанию информацию на нескольких языках к примеру такие как title description и тому подобные выносить в файл Headers.php формат:

```php
return array(
    'ru' => array(
        //Общий конфиг для лк
        'init' => array(
            'head' => array(
                ['idx' => 'title',      'typex' => 'title',                                         'content' => '%site_name% Сайт сервера %server_name%.'],
                ['idx' => 'og_title',   'typex' => 'meta', 'property' => 'og:title',                'content' => '%site_name% Сайт сервера %server_name%.'],
                ['idx' => 'og_s_name',  'typex' => 'meta', 'property' => 'og:site_name',            'content' => '%site_name%'],
                ['idx' => 'og_type',    'typex' => 'meta', 'property' => 'og:type',                 'content' => 'website'],
                ['idx' => 'og_url',     'typex' => 'meta', 'property' => 'og:url',                  'content' => '%url%'],
                ['idx' => 'desc',       'typex' => 'meta', 'name' => 'description',                 'content' => '%site_name% Сайт сервера %server_name%!'],
                ['idx' => 'og_desc',    'typex' => 'meta', 'property' => 'og:description',          'content' => '%site_name% Сайт сервера %server_name%!'],
                ['idx' => 'tw_desc',    'typex' => 'meta', 'property' => 'twitter:description',     'content' => '%site_name% Сайт сервера %server_name%!'],
                ['idx' => 'keywords',   'typex' => 'meta', 'name' => 'keywords',                    'content' => 'mmoweb, mmoweb4'],

            ),
        ),
    ),
    'en' => array(),
);
```

Для создания источника тега необходимо создать по примеру запись в массиве `head` обязательные поля `idx` - ключ тега для замены из файла IncludeJsCss.php в случаях когда сайт содержит больше 1 страницы и необходимо заменить тег на другой `typex` - ключ указывающий, что за тип тега может иметь следующие значения title, meta, link, script, html

**Значения поля `typex`**

| Ключ   | Описание                                                                     |
| ------ | ---------------------------------------------------------------------------- |
| title  | Принемаемый параметр **content**                                             |
| meta   | Может принемать любые ключи                                                  |
| link   | Может принемать любые ключи                                                  |
| script | Может принемать любые ключ. Доп.ключ на выполнения javascript кода ключ `js` |
| html   | Принемает параметр `html`                                                    |

### Пример создания тега:

```php
['idx' => 'favicons', 'typex' => 'link', 'rel' => 'shortcut icon', 'href' => TEMPLATE_DIR.'/images/favicon.ico'],
```

### Результат:&#x20;

```markup
<link rel="shortcut icon" href="/template/site/multiworld/images/favicon.ico">
```

Тут наглядно видно, что объявленный параметр rel передался в html со значением из ключа, и так можно передать любой ключ со значением.

### Параметры автозамены в тегах

В CMS MMOWEB есть дополнительная возможность передавать определенные вложения которые будут на выходе замениться в зависимости от настроек и выбранных параметров пользователя, к примеру %site\_name% заменится на название проекта которое вы указали в админ панели mmoweb.biz.

### Доступные значения.

| Значение                 | Описание                                                |
| ------------------------ | ------------------------------------------------------- |
| %site\_name%             | Имя проекта                                             |
| %server\_name%           | Имя текушего сервера                                    |
| %platform\_server\_name% | Платформа и имя сервера пример: Lineage2 > Gracia Final |
| %url%                    | Ссылка на сайт пример: <https://mmoweb.biz/>            |

Для более продвинутых можно самостоятельно добавить значения Class/SeoX.php method initReplaceTeg()

## Редактирование IncludeJsCss.php &#x20;

IncludeJsCss.php по сравнению с Headers.php имеет массив с body и footer вставляя теги в эти поля они будут отрисовываться в одноименных шаблонных тегах {$\_SEO\_HEAD} и {$\_SEO\_FOOTER}  принцип добавления такой же, как и Headers.php.

## &#x20;**Добавление тега из шаблона**

Бывают задачи добавить JS или CSS только в определенном шаблоне, для этого есть конструкция

```markup
{$.site._SEO->addTegHTML('head', 'telInput_css', 'link', ['rel'=>'stylesheet', 'href'=> $.const.VIEWPATH~'/panel/assets/css/intl-telInput/intlTelInput.css?ver=0.1'])}
{$.site._SEO->addTegHTML('footer', 'telInput', 'script', ['src'=> $.const.VIEWPATH~'/panel/assets/js/plugins/intl-telInput/intlTelInput.js?ver=0.1'])}
```

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

## Теги виджетов на сайте

Су шествует набор тегов шаблонизатора, для вставки модулей к примеру: статус серверов переключение языка и прочего.

### Список доступных тегов для сайта

| Тег                                       | Описание                                                                                                                                                                                                                                                                           |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| {language tpl='language.tpl'}             | <p>Тег выбора языка шаблон language.tpl</p><p>аргумент tpl необязательный, сделан для подмены дефолтного шаблона на кастомный </p>                                                                                                                                                 |
| {include 'site:is\_login.tpl'}            | Это не совсем тег это конструкция сразу подключает нужный фрагмент в шаблон в нашем случаи is\_login.tpl                                                                                                                                                                           |
| {server count=3 tpl='server\_status.tpl'} | <p>Виджет серверов онлайн шаблон server\_status.tpl доп поля настраиваются из админки. Можно передать сколько вывести элементов count=3. </p><p>2 аргумент необязательный, сделан для подмены дефолтного шаблона на кастомный </p>                                                 |
| {forum count=5 tpl='forum.tpl'}           | <p>Последние темы с форума настройка источник из админки шаблон forum.tpl. Можно передать сколько вывести элементов count=5</p><p>2 аргумент необязательный, сделан для подмены дефолтного шаблона на кастомный </p>                                                               |
| {rating count=10 tpl='rating.tpl'}        | <p>Сложный виджет, у него есть иерархия платформа тип статистики главный шаблон rating.tpl под категории /rating/lineage2/top\_clan.tpl. Можно передать сколько вывести элементов count=5</p><p>2 аргумент необязательный, сделан для подмены дефолтного шаблона на кастомный </p> |
| {news count=3 page=1}                     | Новостной блок, принимает параметры кол-во новостей и страницу, передача их не обязательна есть дефолтные параметры 10,1 шаблон news.tpl                                                                                                                                           |
| {iblock ikey='event' count=3}             | Виджет инфо блока - блоки создаются в админ панели и наполняются контентом                                                                                                                                                                                                         |
| {streams count=3 tpl='streams.tpl'}       | <p>Виджет стимов - блоки создаются в админ панели и наполняются контентом</p><p>2 аргумент необязательный, сделан для подмены дефолтного шаблона на кастомный </p>                                                                                                                 |
| {$.site.dir\_site}                        | Путь к выбронному шаблону пример: src="/template/site/default"                                                                                                                                                                                                                     |
| *{$L\_MENU\_BTN\_HOME}*                   | *Тег языковой, настраивается либо из /Lang/ru.php в шаблоне либо через админку*                                                                                                                                                                                                    |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mmoweb.biz/ru/razrabotchikam/adaptaciya-shablona/osnova-shablonizatora.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
