Современная, быстрая и удобная система управления сайтом

Шаблоны для новичков. Урок 9. Использование PHP в шаблоне

Архив записейКомментарии: 1Просмотров: 4299

Принялся было уже делать вводную статью по PHP, но вдруг вспомнил, что несколько лет назад, когда ещё занимался поддержкой WordPress, выпускал рассылку и там как раз есть полное описание основ PHP. Совершенно нет смысла дублировать её здесь, поэтому с первой частью работы с PHP я адресую по указанной ссылке.

Для наших задач вполне хватит самых базовых основ. Главное научиться разбираться в синтаксисе PHP и где и как искать подсказки по нужным функциям.

В main.php мы уже столкнулись с PHP-кодом. Код достаточно примитивный, поэтому я опишу используемые в этом файле функции.

Функция file_exists()

Стандартная PHP-функция принимает имя файла и проверяет его реальное существование. Если файла нет, то возвращается false. Если есть - true. Эта функция используется в условиях перед подключением файла.

Функция function_exists()

Похожая функция, которая проверяет существование фунции. Например есть плагин Ушки. В плагине задана функция ushka(). Но плагин может быть как включен, так и выключен. Если вызвать функцию ushka() при выключённом плагине, то PHP будет ругаться, ведь эта функция не определена. Чтобы избежать таких ситуаций и используют function_exists().

Функции require() и require_once()

Эти функции подключают указанный файл. Разница между ними в том, что require_once() подключает файл только один раз. Например в каком-то файле определены php-функции. Если подключить этот файл дважды, то PHP при втором подключении будет ругаться, поскольку функции уже были созданы раньше. Чтобы этого избежать и используется require_once().

Функция getinfo()

Эта функция MaxSite CMS возвращает необходимое значение. Например:

  • getinfo('template_dir') возвращает полный путь на сервере к каталогу шаблонов.
  • getinfo('siteurl') - полный http-адрес сайта.
  • getinfo('template_url') - http-адрес к текущему шаблону.
  • getinfo('name_site') - название сайта.
  • getinfo('description_site') - описание сайта.

Значений достаточно много, более того, они постоянно пополняются. Поэтому, чтобы увидеть полный список, откройте файл common/common.php.

Это ядро MaxSite CMS, поэтому все функции этого файла доступны из любой части системы.

Понятно, что с помощью getinfo() несколько проще и удобней получать какие-то параметры.

Функция mso_hook()

Функция MaxSite CMS которая выполняет т.н. хуки (ловушки). Техническая строна вопроса нам особо не понадобится, поэтому объясню вкратце. Где-нибудь в плагине, шаблоне или любой другой функции задается выполнение хука. Указывается его имя, например mso_hook('body_start') прописан в шаблоне сразу после BODY. Теперь, в своем плагине или даже шаблоне можно указать, что для хука body_start будет выполнена какая-то своя функция. Скажем вывод какой-то рекламы. При загрузке сайта MaxSite CMS проверит есть ли у хука body_start какие-то функции и, если есть, выполнит их.

Хуков довольном много, все они под разные задачи и имеют разные параметры. В основном они предназначены для программистов, поэтому рассматривать их мы не будем.

Функция get_component_fn() и другие

Функция выводит компонент в шаблоне. Сама функция определена в файле default/functions-template.php, то есть является частью default-шаблона. Если шаблон не использует технологию default, то эта функция будет недоступна.

В файле default/functions-template.php определены и другие функции, которые не только обслуживают программную часть шаблона, но и предоставляют некоторые вспомогательные функции, который упрощают создание шаблонов. По ходу уроков я будут рассматривать некоторые из них.

Функции в functions.php

Файл functions.php в любом шаблоне имеет особое значение. MaxSite CMS подключает этот файл также и в админ-панели. То есть здесь располагаются какие-то данные, которые должны быть доступны не только при выводе шаблона, но и в его настройках.

Например функция mso_register_sidebar() регистрирует для админ-панели сайдбар. То есть мы просто указываем, что в нашем шаблоне есть такой-то сайдбар с такими-то параметрами.

Функция mso_set_val() позволяет установить для каких-то «глобальных» переменных новое значение. В частности в файле functions.php прописаны новые данные для оформления виджетов и некоторых других блоков плагинов и системы. Скорее всего эти данные менять не придется, поскольку они оптимальны для любого шаблона.

Custom-файлы

В main.php функцией get_component_fn() подключаются компоненты шаблона. Компоненты завязаны на опции, поэтому и используется отдельная функция, чтобы упростить код.

Custom-файлы (большинство из них) также подключаются в main.php, только используется более простой алгоритм. Каждый custom-файл имеет предопределенное имя и подключается в определенном месте шаблона. Рассмотрим пример.

if (file_exists(getinfo('template_dir') . 'custom/header-start.php'))
	require(getinfo('template_dir') . 'custom/header-start.php');

Функция file_exists() проверяет наличие файла. Имя файла формируется из:

getinfo('template_dir') . 'custom/header-start.php'

Функция getinfo() в этом варианте возвратит путь на сервере до каталога шаблона. Дальше мы дописываем строчку 'custom/header-start.php', то есть путь к файлу относительно каталога шаблона.

Обратите внимание на точку «.» между этими двумя значениями. В PHP для объединения строк используется точка. Например:

echo 'раз';
echo ' два';

Будет аналогичен

echo 'раз' . ' два';

То есть точка «склеивает» строки между собой. Результат - «раз два».

В нашем коде получится строчка «путь-до-каталога-шаблона/custom/header-start.php».

Теперь, если file_exists() вернет true, что означает существование файла, то выполнится и блок условия. У нас это единственная функция require(), у которой мы указываем тот же самый путь к файлу header-start.php.

Если же файла нет, то условие не выполняется и никакого подключения уже не будет.

Теперь давайте посмотрим в каталог шаблона custom. В нашем шаблоне в нем нет никаких файлов. В default-шаблоне есть файлы, только они имеют другие имена - в них присутствует префикс «_» (подчеркивание). Поскольку _header-start.php и header-start.php разные файлы, то никаких подключений custom-файлов не происходит. В default-шаблоне присутствуют лишь заготовки custom-файлов. Если необходимо их использовать, то следует удалить префикс подчеркивания. После этого файл автоматически подключится.

Данный способ подключения файлов достаточно часто используется в MaxSite CMS. Для вебмастера такой алгоритм очень удобен, поскольку нет надобности заниматься кодом подключения - все работает автоматом.

При создании шаблона мы будем использовать custom-файлы под какую-то определенную задачу.

Файлы компонентов

Компоненты обычно представляют собой смесь html и php-кода. С помощью PHP получаются опции, списки файлов и т.п. Например компонент footer-copyright.php содержит только вывод названия сайта и текущий год (стандартная функция date).

Компонент image-select.php более сложен. Вначале получается опция, где указан каталог, где хранятся картинки с помощью mso_get_option(). После формируется адрес на сервере. Дальше объединяем путь с именем файла, который указан в опции. И уже после этого формируем HTML-код компонента.

Компонент menu.php еще сложней: в нем учитываются и опции, и авторизованный пользователь сайта, и прочие параметры.

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

Файлы type и type_foreach

Type-файлы присутствуют в default-шаблоне и отвечают за вывод данных. Например одиночная запись выводится файлом page.php. MaxSite CMS так устроена, что в своем шаблоне не нужно держать эти файлы. Система сама разберется как и что подключать.

Type_foreach-файлы предназначены для изменения каких-то частей type-файлов. То есть, чтобы не использовать переделку сложного type-файла, можно использовать type_foreach под конкрентую задачу. Например type_foreach-файл info-top.php позволяет изменить вывод инфо-блока (дата, заголовок, рубрики и т.п.) страницы.

Все используемые type_foreach-файлы находятся в каталоге «/type_foreach/». Опять же MaxSite CMS подключает файл при его наличии. Если файла нет, то ничего не происходит. В каталоге «/_type_foreach/» находятся заготовки type_foreach-файлов.

Программирование type-файлов достаточно сложная задача, поэтому мы этими вопросами заниматься не будем. А вот type_foreach-файлы несколько проще для понимания, поэтому мы будем рассматривать некоторые из них.

Каталог stock

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

Практический пример - два сайдбара

Рассмотрим на примере нашего тестового шаблона подключение второго сайдбара. Default-шаблон использует один и многие вебмастера не знают как добавить второй.

Зарегистрируем сайдбар для админ-панели

Регистрация должна происходить в файле custom/my_functions.php. Этот файл подключается в function.php, поэтому также будет доступен в админ-панели.

Копируем в свой шаблон заготовку из default-шаблона. Заготовка имеет имя _my_functions.php, после копирования переименовываем его в my_functions.php.

Первый сайдбар у нас уже зарегистрирован, поэтому просто добавим второй:

mso_register_sidebar('2', t('Второй сайдбар'));

Функция mso_register_sidebar() первым параметром принимает номер сайдбара. Вторым параметром - его «человеческое» название.

Функция t() - это функция перевода MaxSite CMS.
По-умолчанию в MaxSite CMS используется русский язык, но, если указать другой, то фраза автоматически переведется. На текущий момент MaxSite CMS имеет переводы на английский, украинский и немецкий языки. Функция t() будет достаточно часто встречаться в коде MaxSite CMS.

После регистрации сайдбара, он становится доступен в админ-панели. Можно (даже нужно) разместить в нём различные виджеты.

Вывод сайдбара

Но регистрация сайдбара - это еще не его вывод на сайте. Для вывода используется файл custom/sidebars.php. Опять же копируем заготовку из default-шаблона.

В файле уже прописан пример вывода одного сайдбара, добавим второй. Сам сайдбар выводит фунция mso_show_sidebar(), где первым параметром указывается его номер.

Также здесь нужно создать HTML-код, обрамляющий блоки сайдбаров.

echo '<div class="aside sidebar1"><div class="sidebar1-wrap">';
	mso_show_sidebar('1');
echo '</div></div>';
 
echo '<div class="aside sidebar2"><div class="sidebar2-wrap">';
	mso_show_sidebar('2');
echo '</div></div>';

CSS-стили

Определимся как будем выводить сайдбары. Пусть первый будет слева, второй - справа. Эту схему расположения колонок мы уже рассматривали, поэтому сразу привожу готовый css-код для var_style.css. Размер сайдбаров - по 230px.

div.content {width: 500px; float: left; margin: 0 230px;}
div.content-wrap {margin: 20px;}
 
div.sidebar1 {width: 230px; float: left; margin-left: -100%;}
div.sidebar1-wrap {margin: 20px 0 0 0;}
 
div.sidebar2 {width: 230px; float: left; margin-left: -230px;}
div.sidebar2-wrap {margin: 20px 0 0 0;}

Итого

Для вебмастера необходимо потратить какие-то усилия на изучения основ PHP. Как бы мы не хотели, но сделать всё только через HMTL и CSS пока затруднительно. Тем более, что сайты сейчас имеют множество настроек, которыми можно управлять в админ-панели. Когда-то давно можно было прописать название сайта прямо в HTML-коде шаблона. Но сейчас такой вариант просто не будет принят всерьёз. В MaxSite CMS вебмастеру уже предоставляются готовые php-функции и файлы для создания шаблона. Главное узнать о них и научиться использовать в работе.

««« Урок 10 | Урок 8 »»»

Комментариев: 1 RSS

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)