Движок для региональных лендингов и мини-сайтов

Если связка из контекста и лендинга хорошо заходит в одном регионе, то можно затестировать аналогичную для другого. Чтобы проще было это делать, я использую шаблонизатор Smarty для сайтов. Это не реклама, так как смарти бесплатен. Сейчас покажу, что и как я настраиваю.

Преимущества смарти в его лёгкой установке (запустится на любом хостинге с php) и простому внедрению (можно разобраться даже без знаний вёрстки).

Немного теории

Как это работает в итоге: небольшой сайт использует шаблонизатор, который на все страницы подключает общую шапку и подвал. Соответственно редактировать такой сайт проще — например, если нужно поставить метрику. Вашу вёрстку проще подключить к шаблонизатору, чем интегрировать в цмс (например вордпресс).

Но самый главный плюс будет в том, что все специфичные данные будут заменены на переменные. Все переменные прописываются в файле-конфиге, если поменять значения там — поменяется на всём сайте сразу. Итого процедура клонирования сайта с одного региона на другой сводится к полному копированию сайта на новый домен, а затем небольшому редактированию единственного файла.

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

Подготовка к работе

Итак, допустим у нас есть одностраничный лендинг, на который мы льём трафик. Он на чистом html+css, без php. Первым делом нужно установить Smarty, как это показано в инструкции на официальном сайте. Достаточно загрузить файлы по фтп на хостинг, прописать в конфиге пути к служебным папкам. Подробно расписывать не буду, чтобы не увеличивать данный мануал — всё есть на сайте смарти.

Далее нужно создать файл index.php и прописать в нём такой код:

<?php

// put full path to Smarty.class.php
require('/var/www/fladex.ru/smarty/Smarty.class.php');
$smarty = new Smarty();

$smarty->setTemplateDir('/var/www/fladex.ru/smarty/templates');
$smarty->setCompileDir('/var/www/fladex.ru/smarty/templates_c');
$smarty->setCacheDir('/var/www/fladex.ru/smarty/cache');
$smarty->setConfigDir('/var/www/fladex.ru/smarty/configs');
$smarty->display('index.tpl');

?>

В файл templates/index.tpl нужно скопировать весь код из index.html. После этого файл index.html нужно удалить.

Как теперь будет работать: при открытии главной страницы сайта будет запускаться index.php, который в свою очередь покажет шаблон index.tpl.

Выделение шапки и подвала

Теперь нужно создать файлы header.tpl и footer.tpl. В них я вписываю код верха и низа страницы. Обычно в header.tpl я вставляю весь блок <head>, а также часть с
<header>, которая содержит видимую часть шапки и меню. В footer.tpl идёт весь блок <footer>, а также закрывающие теги (то есть всё начиная с открывающего тега <footer> и до самого конца кода).

Из index.tpl нужно удалить тот код, который был скопирован в отдельные файлы — теперь этот код можно подключать из файлов. Делается это так (привожу код index.tpl):

{include file='header.tpl'}
// здесь основной контент страницы
{include file='footer.tpl'}

Зачем это было нужно? Чтобы теперь легко подключать новые страницы на сайт, если это необходимо. Для этого создаём новые файлы шаблонов, например, contacts.tpl, about.tpl и т.д. В них подключаем шапку и подвал, а между ними выводим основной контент страницы.

Подключение файла-конфига

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

<?php

// put full path to Smarty.class.php
require('/var/www/fladex.ru/smarty/Smarty.class.php');
$smarty = new Smarty();

$smarty->setTemplateDir('/var/www/fladex.ru/smarty/templates');
$smarty->setCompileDir('/var/www/fladex.ru/smarty/templates_c');
$smarty->setCacheDir('/var/www/fladex.ru/smarty/cache');
$smarty->setConfigDir('/var/www/fladex.ru/smarty/configs');

?>

И соответственно из index.php удаляем эти строки, заменяя их на подключение файла-конфига:

<?php

include_once 'config.php';
$smarty->display('index.tpl');

?>

Замена изменяющихся данных

Какие данные на странице могут измениться? В моём случае, когда я делаю сайт под лидген, могут измениться:

  • телефон
  • почта
  • адрес
  • домен

Поэтому теперь нужно пройтись по всем файлам шаблонов и заменить все такие данные на шаблонные переменные вида {$phone}. Для примера, ссылка на телефон в шаблоне теперь будет выглядеть так:

<a href="tel:{$phone}">{$phone}</a>

Чтобы задать значение переменной, нужно в файле config.php прописать её значение в виде:

$phone = '88003335555';

а затем в index.php передать её в шаблон:

<?php

include_once 'config.php';

$smarty->assign('phone', $phone);
$smarty->display('index.tpl');

?>

Использование глобального конфига

Чтобы не прописывать каждую переменную отдельно, я использую одну глобальную $config. Смотрите, как выглядит мой конфиг-файл:

<?php

$config['domain'] = 'fladex.ru';
$config['url'] = 'https://fladex.ru';

$config['address']['city1'] = 'Саранск';
$config['address']['city2'] = 'Саранске'; // предлог в
$config['address']['city3'] = 'Саранску'; // предлог по
$config['address']['street'] = 'ул. Истляева 42';
$config['address']['region1'] = 'Республика Мордовия';
$config['address']['region2'] = 'Республике Мордовии'; // предлог в
$config['address']['region3'] = 'Республике Мордовии'; // предлог по

$config['phone1'] = '8 (800) 333-55-55'; // публичный вид
$config['phone1_link'] = '88003335555'; // для ссылок

$config['phone2'] = '+7 (902) 666-55-33'; // публичный вид
$config['phone2_link'] = '+79026665533'; // для ссылок

$config['email'] = 'mail@fladex.ru';

// put full path to Smarty.class.php
require('/var/www/fladex.ru/smarty/Smarty.class.php');
$smarty = new Smarty();

$smarty->setTemplateDir('/var/www/fladex.ru/smarty/templates');
$smarty->setCompileDir('/var/www/fladex.ru/smarty/templates_c');
$smarty->setCacheDir('/var/www/fladex.ru/smarty/cache');
$smarty->setConfigDir('/var/www/fladex.ru/smarty/configs');

?>

То есть я завёл одну переменную $config, куда запихал все данные: домен сайта с префиксом и без, город и регион в трёх падежах, 2 номера телефона и емэйл.

Теперь index.php будет выглядеть так:

<?php

include_once 'config.php';

$smarty->assign('config', $config);
$smarty->display('index.tpl');

?>

И все новые страницы, которые вы будете добавлять, тоже будут выглядеть так, отличаясь только названием подключаемого шаблона.

Результат

Допустим вы смогли разобраться с этой инструкцией и настроить у себя шаблонизатор смарти. Что это вам даёт? Теперь вы можете полностью скопировать этот сайт на другой домен, открыть файл config.php и прописать там другие данные (под другой регион). После этого изменения сразу появятся на всех страницах сайта.

При необходимости можно добавить новые переменные, которые посчитаете нужным. Например, номер счётчика метрики, схему проезда и т.д.

Минусы этого подхода:

  1. нельзя использовать на крупном проекте — тут только CMS без вариантов;
  2. если качаете сайт под SEO, то нужно что-то придумывать с текстами на страницах, чтобы они были уникальными
  3. контент-менеджер должен уметь работать с html на уровне редактирования готовых файлов

Готовая сборка под лидген

Так как тема оказалась полезной для лидгенщиков, я собрал архив с примером. Во вложении можете скачать архив с копией многостраничного сайта (ссылка на демо-сайт) и настроенным смарти. Я удалил страницы, оставив только 2 — но чтобы понять, как оно работает, вам этого хватит.

Добавить комментарий для Руслан Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  • seoonly.ru
    02.08.2020, 20:52

    ок, весьма ок

  • Алекс
    03.08.2020, 08:57

    Возьми Битрикс, не еби мозг себе и людям.

    • FladeX
      09.08.2020, 19:44

      Не фанат битрикса для сайтов

  • Руслан
    03.08.2020, 11:08

    live demo не хватает , или хотя бы картинок

    • FladeX
      09.08.2020, 19:45

      Что именно показать в лайв-демо? Клиентская сторона не зависит от движка, какую вёрстку закинешь такая и будет. Админки у этого решения тоже нет. Так что для демо нет материала)

  • Дмитрий Каруев
    03.08.2020, 15:20

    Мне кажется тут даже смарти не нужен. Достаточно простых переменных и инклюд хедер инклюд футер

    • FladeX
      09.08.2020, 19:45

      Грубо говоря смарти это более продвинутый пхп-инклюд

  • Гарри Поттер
    03.08.2020, 16:38

    Прочитал для «религиозных» лендингов…
    Вот это, думаю, лидген пошел