Как выводить разный контент в шаблоне Smarty в зависимости от поддомена в Webasyst

Если вы используете Webasyst и хотите показывать уникальный контент для каждой витрины (на поддоменах вроде sochi.site.ru, krasnodar.site.ru), это можно реализовать на уровне шаблона, без PHP-кода. Всё делается средствами Smarty.

Зачем это нужно

Допустим, у вас одна установка Webasyst с несколькими витринами:

  • sochi.site.ru
  • rostov-na-donu.site.ru
  • krasnodar.site.ru

И вы хотите, чтобы на каждой из них отображались уникальные заголовки, тексты или блоки.

Решение на Smarty

В нужном .html-шаблоне используйте следующее:

{assign var="host" value=$smarty.server.HTTP_HOST}

{if strpos($host, '.site.ru') !== false}
    {assign var="subdomain_parts" value="`$host`"|explode:"."}
    {assign var="subdomain" value=$subdomain_parts[0]}
{else}
    {assign var="subdomain" value=""}
{/if}

{if $subdomain == 'sochi'}
    <h1>Добро пожаловать во флористический центр Сочи</h1>
{elseif $subdomain == 'rostov-na-donu'}
    <h1>Цветы в Ростове-на-Дону &mdash; с любовью</h1>
{elseif $subdomain == 'krasnodar'}
    <h1>Краснодарский филиал Floramour</h1>
{else}
    <h1>Общий сайт сети Floramour</h1>
{/if}

Как работает

  • {$smarty.server.HTTP_HOST} — получает полный домен, например sochi.site.ru.
  • explode разбивает строку по точкам, берём [0] — это и есть поддомен.
  • Далее — обычные if/elseif, чтобы отобразить нужный блок в зависимости от города.


Смотрите также