Темизация в Yii 2
Темизация в Yii 2

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

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

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

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

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

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



Темизация в Yii2

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

Для того, чтобы начать использовать темизацию, настройте свойство [[yii\base\View::theme|theme]] компонента приложения view. Конфигурация настраивает объект [[yii\base\Theme]], который отвечает за то, как именно заменяются файлы отображений. Главным образом, стоит настроить следующие свойства [[yii\base\Theme]]:

  • [[yii\base\Theme::basePath]]: базовая директория, в которой размещены темизированные ресурсы (CSS, JS, изображения, и так далее).
  • [[yii\base\Theme::baseUrl]]: базовый URL для доступа к темизированным ресурсам.
  • [[yii\base\Theme::pathMap]]: правила замены файлов представлений. Подробно описаны далее.

Например, если вы вызываете $this->render('about') в SiteController, то будет использоваться файл отображения @app/views/site/about.php. Тем не менее, если вы включите темизацию как показано ниже, то вместо него будет использоваться @app/themes/basic/site/about.php.

return [
    'components' => [
        'view' => [
            'theme' => [
                'basePath' => '@app/themes/basic',
                'baseUrl' => '@web/themes/basic',
                'pathMap' => [
                    '@app/views' => '@app/themes/basic',
                ],
            ],
        ],
    ],
];

Info: При настройке тем поддерживаются псевдонимы пути. При замене отображений они преобразуются в реальные пути в файловой системе или URL.

Вы можете обратиться к объекту [[yii\base\Theme]] через свойство [[yii\base\View::theme]]. Например, в файле отображения, это будет выглядеть следующим образом (объект view доступен как $this):

$theme = $this->theme;

// возвращает: $theme->baseUrl . '/img/logo.gif'
$url = $theme->getUrl('img/logo.gif');

// возвращает: $theme->basePath . '/img/logo.gif'
$file = $theme->getPath('img/logo.gif');

Свойство [[yii\base\Theme::pathMap]] определяет то, как заменяются файлы представлений. Свойство принимает массив пар ключ-значение, где ключи являются путями к оригинальным файлам, которые мы хотим заменить, а значения — соответствующие пути к файлам из темы. Замена основана на частичном совпадении: если путь к представлению начинается с любого из ключей массива [[yii\base\Theme::pathMap|pathMap]], то соответствующая ему часть будет заменена значением из того же массива. Для приведённой выше конфигурации @app/views/site/about.php частично совпадает с ключом @app/views и будет заменён на @app/themes/basic/site/about.php.

Темизация модулей

Для того, чтобы темизировать модули, свойство [[yii\base\Theme::pathMap]] может быть настроено следующим образом:

'pathMap' => [
    '@app/views' => '@app/themes/basic',
    '@app/modules' => '@app/themes/basic/modules', // <-- !!!
],

Это позволит вам темизировать @app/modules/blog/views/comment/index.php в @app/themes/basic/modules/blog/views/comment/index.php.

Темизация виджетов

Для того, чтобы темизировать виджеты вы можете настроить свойство [[yii\base\Theme::pathMap]] следующим образом:

'pathMap' => [
    '@app/views' => '@app/themes/basic',
    '@app/widgets' => '@app/themes/basic/widgets', // <-- !!!
],

Это позволит вам темизировать @app/widgets/currency/views/index.php в @app/themes/basic/widgets/currency/views/index.php.

Наследование тем

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

'pathMap' => [
    '@app/views' => [
        '@app/themes/christmas',
        '@app/themes/basic',
    ],
]

В этом случае представление @app/views/site/index.php темизируется либо в @app/themes/christmas/site/index.php, либо в @app/themes/basic/site/index.php в зависимости от того, в какой из тем есть нужный файл. Если файлы присутствуют и там и там, используется первый из них. На практике большинство темизированных файлов будут расположены в @app/themes/basic, а их версии для праздников в @app/themes/christmas.

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

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

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

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

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