Шаблонизация сайта

Demort

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


Список основных тегов.
HTML:
<html lang="{$_LANG}">
<head>
  {$_SEO_HEAD}
</head>
<body class="body">
{$_SEO_BODY}
    .....
{$_SEO_FOOTER}
</body>
</html>

Список тегов виджетов
PHP:
{language} // Тег выбора языка шаблон language.tpl
{include 'site:is_login.tpl'} //Это не совсем тег это конструкция сразу подключает нужный фрагмент в шаблон в нашем случаи is_login.tpl
{server count=3} //Виджет серверов онлайн шаблон server_status.tpl доп поля настраиваются из админки. Можно передать сколько вывести элементов count=3
{forum count=5} //Последние темы с форума настройка источник из админки шаблон forum.tpl. Можно передать сколько вывести элементов count=5
{rating count=10} //Сложный виджет, у него есть иерархия платформа тип статистики главный шаблон rating.tpl под категории /rating/lineage2/top_clan.tpl. Можно передать сколько вывести элементов count=5
{news count=3 page=1} //Новостной блок, принимает параметры кол-во новостей и страницу, передача их не обязательна есть дефолтные параметры 10,1 шаблон news.tpl
{iblock ikey='event' count=3} //Виджет инфо блока - блоки создаются в админ панели и наполняются контентом
{streams count=3} //Виджет стимов - блоки создаются в админ панели и наполняются контентом


<div class="content__box">
    {if $_CONTENT?} //Проверка на пустую переменную
        {$_CONTENT} //Отрисовка контента
    {else}
        {news count=3 page=1} //применение на практике
    {/if}
</div>

{$.site.dir_site} //Путь к выбронному шаблону пример: src="/template/site/default"
{$L_MENU_BTN_HOME} //Тег языковой, настраивается либо из /Lang/ru.php в шаблоне либо через админку
 
Последнее редактирование:

Demort

Administrator
Команда форума
Сео теги и подключение js и css файлов.
HTML:
{$_SEO_HEAD}
{$_SEO_BODY}
{$_SEO_FOOTER}
Теги автоматически подстраиваются по урл и отдают нужный контент, пример использования
файлы в шаблоне Headers.php и IncludeJsCss.php

Headers.php
PHP:
/**
*  %site_name%             => Имя проекта,
*  %server_name%           => Имя текушего сервера,
*  %platform_server_name%  => Платформа и имя сервера пример: Lineage2 > Gracia Final,
*  %url%                   => ссылка на сайт пример: https://mw4.mmoweb.ru/,
*
*  Class/SeoX.php method initReplaceTeg() Добовление тегов
*/
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(
    ),
);


IncludeJsCss.php
PHP:
return array(
    'ru' => [
        'init' => [
            'head' => array(
                ['idx' => 'charset', 'typex' => 'meta', 'charset' => 'utf-8'],
                ['idx' => 'viewport', 'typex' => 'meta', 'name' => 'viewport', 'content' => 'width=device-width'],
                ['idx' => 'favicons', 'typex' => 'link', 'rel' => 'shortcut icon', 'href' => TEMPLATE_DIR.'/images/favicon.ico'],
            ),
            'body' => array(),
            'footer' => array(
                //<!-- Get-Web Libs  -->
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/libs/jquery/jquery-3.4.1.min.js'],
                ['idx' => 'jquery', 'typex' => 'link', 'rel' => 'stylesheet', 'href' => TEMPLATE_DIR.'/libs/fontello/css/fontello.css'],
                ['idx' => 'jquery', 'typex' => 'link', 'rel' => 'stylesheet', 'href' => TEMPLATE_DIR.'/fonts/BeaufortforLOL/fonts.css'],
                //<!-- fancybox -->
                ['idx' => 'jquery', 'typex' => 'link', 'rel' => 'stylesheet', 'href' => TEMPLATE_DIR.'/libs/fancybox/css/jquery.fancybox.min.css'],
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/libs/fancybox/js/jquery.fancybox.min.js'],
                //<!-- circle-progress -->
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/libs/circle-progress/js/circle-progress.min.js'],
                //<!-- countdown -->
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/libs/countdown/js/jquery.plugin.min.js'],
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/libs/countdown/js/jquery.countdown.min.js'],

                //<!-- Main style -->
                ['idx' => 'jquery', 'typex' => 'link', 'rel' => 'stylesheet', 'href' => TEMPLATE_DIR.'/css/style.css?ver=' . filemtime(ROOT_DIR.TEMPLATE_DIR.'/css/style.css')],
                //<!-- Adaptation style -->
                ['idx' => 'jquery', 'typex' => 'link', 'rel' => 'stylesheet', 'href' => TEMPLATE_DIR.'/css/adaptation.css?ver=' . filemtime(ROOT_DIR.TEMPLATE_DIR.'/css/adaptation.css')],
                //<!-- Main app -->
                ['idx' => 'jquery', 'typex' => 'script', 'src' => TEMPLATE_DIR.'/js/app.js?ver=' . filemtime(ROOT_DIR.TEMPLATE_DIR.'/js/app.js')],
                //MMOWEB STAT
                ['idx' => 'webstat', 'typex' => 'script', 'src' => 'https://mmo24.ru/webstat/watch.js'],

                //['idx'=> '', 'typex' => 'script', 'js' => 'alert(1)'],
            ),
        ],
    ],

    'en' => [],
);
При добавление тега надо учесть что есть 3 раздела head, body, footer эти разделы одноименны с отрисовкой в шаблоне {$_SEO_HEAD}, {$_SEO_BODY}, {$_SEO_FOOTER}

В подключении источника есть 2 обязательных элемента такие как idx, typex
idx - должен быть уникальным в разделе, для взаимодействия с ним из шаблона удаление или подмены
typex - тип тега есть зарезервированные теги (title, meta, link, script[Под-тег: js])
Далее элемент отрисовываются как есть 'charset' => 'utf-8' превратится в теге в charset="utf-8" итд.

Добавление из шаблона
Бывают задачи доабвить JS или CSS только в определенном шаблоне, для этого есть конструкция
PHP:
{$.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'])}
И при вызове шаблона где объявлены эти методы будет произведена вставка перед отрисовкой.



 
Последнее редактирование:

Demort

Administrator
Команда форума
Вид админ панели клиентской части
1590156249070.png
 
Последнее редактирование:
Сверху