Принялся было уже делать вводную статью по 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-функции и файлы для создания шаблона. Главное узнать о них и научиться использовать в работе.
Комментариев: 1 RSS
1dark10418-02-2012 12:03
Продолжение будет?