Hello, World!

Самое первое отличие от большинства других платформ, которое бросается в глаза при первом знакомстве, - это тот факт, что практически все файлы с PHP-кодом, шаблоны и конфигурационные файлы находятся за пределами DOCUMENT_ROOT. Для чего это сделано? Однажды мы столкнулись c очень интересным сбоем на сервере: отключился интерпретатор PHP, и все файлы отдавались сервером напрямую - в исходном виде. В результате любой посетитель смог увидеть не только исходный код сайта, но и все содержимое конфигурационных файлов, в которых содержались также и пароли к базам данных и сторонним сервисам. Однако, в случае если все эти файлы лежат за пределами DOCUMENT_ROOT, то такой сбой ничего не даст потенциальному злоумышленнику, поскольку единственный PHP-файл, который он сможет увидеть - это www/index.php, в котором нет ничего для него интересного.

Таким образом, в дальнейшем мы будем указывать пути к файлам и каталогам начиная от каталога, находящегося уровнем выше DOCUMENT_ROOT. При этом сам DOCUMENT_ROOT в путях будем именовать как www. На некоторых хостингах он будет именоваться по-другому - помните об этом.

Изменяем текст на главной странице

Итак, вы установили TAO и удалили каталог install из DOCUMENT_ROOT. Теперь можете посмотреть главную страницу своего сайта и увидеть то, что показано на скриншоте.

Самое первое, что вы можете сделать - это изменить текст на главной странице. Простейший способ сделать это - отредактировать непосредственно шаблон главной страницы, который находится в файле app/views/main.phtml. Откройте его и замените его содержимое на свое:

// app/views/main.phtml
<h1>Главная страница</h1>
<p>Мой новый сайт!</p>

Вы, конечно же, заметили, что в этом файле находится только содержимое центральной части страницы (контентной области), тогда как в браузере мы можем наблюдать несколько больше: шапку, футер, боковую колонку. Дело в том, что содержимое любой конечной страницы по умолчанию отображается внутри другого шаблона - шаблона обрамления (layout).

Шаблоны обрамления

Шаблоны обрамления (layouts, лейауты) находятся в каталоге app/views/layouts. Их может быть произвольное число, но после инсталляции вы получаете три: для почтовых сообщений (mail), для печати (print) и для рабочих страниц (work). Последний (app/views/layouts/work.phtml) является лейаутом по умолчанию, в котором и отображается наша главная страница. Откройте этот файл.

В нем есть такая конструкция:

// app/views/layouts/work.phtml
<?= $this['content'] ?>

Это и есть директива вывода в нужном месте шаблона содержимого контентой области, которое приходит в лейаут в переменной $this['content']. Есть и еще несколько интересных вещей, которые бросятся вам в глаза при первом взгляде на лейаут:

%HEAD{}, %NAVIGATION{}, %NAVIGATION{1}, %ROUTE{} - это так называемые вставки (insertions). Подробнее о них можно прочитать в специальной статье. Это специальные конструкции, которые перед окончательным выводом страницы обработаются и заменятся на HTML-код.

%HEAD{} - это заголовочная информация, которая будет состоять из:

  • Тега TITLE
  • Мета-тегов (description, keywords)
  • Директив подключения JavaScript и CSS
  • Прочей информации, обычно размещаемой в заголовочной части HTML-страницы

В самом начале страницы вы увидите директивы, влияющие на заголовочную информацию, например - $this->use_styles(). Об этом тоже есть специальная статья

%NAVIGATION{} - это вывод навигационного блока. Эта вставка - с параметрами, которые могут быть указаны в фигурных скобках. Если параметры не указаны, то это эквивалентно вызову %NAVIGATION{0}. Число указывает уровень навигации, который требуется выводить. Нумерация уровней начинается с нуля. Для получения более подробной информации читайте статью "Навигация".

%ROUTE{} - это вывод "хлебных крошек" на внутренних страницах.

Редактируя этот шаблон, вы сможете натянуть на движок сайта любой дизайн. Главное - знать что такое HTML/CSS и уметь ими пользоваться.

Редактируем контент главной страницы в админке

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

Итак, заходим в админку по адресу /admin/ (логин и пароль вы указывали при инсталляции системы) и нажимаем на ссылку "Настройки". Здесь мы можем управлять информацией самых разных типов.

Информация делится на разделы. Изначально создано два раздела: "Основные настройки" и "Настройки системы администрирования". В каждом из них можно создать новую переменную, нажав на иконку с плюсиком в правой стороне заголовка раздела. Переменные, которые объединены неким общим смыслом рекомендуется создавать в отдельном разделе. Добавить раздел можно, нажав на соответсвующую кнопку в правой верхней части страницы.

Для простоты создадим переменную в уже существующем разделе "Основные настройки". Нажимаем на плюсик в этом разделе и заполняем форму:

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

Нажимаем кнопку "Добавить" и автоматически попадаем на форму редактирования новой настройки. Пишем там интересующий нас текст и нажимаем кнопку "Сохранить". Теперь мы видим, что в разделе "Основные настройки" появилась новая строчка с нашей новой переменной. Нажав на эту строчку, мы снова попадаем в редактирование.

Однако, от просто добавленной переменной нет никакого толка. Теперь наша задача - отобразить текст из этой переменной на главной странице. Механизм, реализующий чтение настроек из PHP-скрипта, доступен через вызов CMS::vars(). Подробнее об этом можно узнать в статье "Настройки".

Открываем файл app/views/main.phtml, стираем все, что там было и пишем вместо этого следующее:

// app/views/main.phtml
<?= CMS::vars()->get('maintext') ?>

Вот и все. Теперь содержимое главной страницы редактируется из админки. Ради интереса попробуйте поиграть с типами настроек. Например, сделать переменную с типом "Текст HTML" (будет использоваться HTML-редактор). Или добавить настройку типа "Галерея" и вывести ее на главной странице.

Как вывести главную страницу в другом лейауте?

Действительно, на многих сайтах главная страница сильно отличается от рабочих страниц, поэтому ее нужно выводить в другом шаблоне обрамления. Это легко сделать. Сначала создайте другой шаблон (лэйаут), например - app/views/layouts/main.phtml. Теперь в шаблоне главной страницы нужно указать, что он должен выводиться в этом лейауте:

// app/views/main.phtml
<?php
	$this->within_layout('main');
?>

Создание новых страниц

Самый простой способ - создать для этих страниц шаблоны в каталоге app/views/pages. Если такого каталога нет, то создайте его. Внутри него создайте новый файл about.phtml:

// app/views/pages/about.phtml
<h1>О компании</h1>
<p>Здесь будет страница о компании</p>

Теперь на сайте появилась страница с адресом /about/. Другой способ создать страницу с таким адресом - создать файл app/views/pages/about/index.phtml. Но это больше подходит для создания разделов (несколько страниц в одном подкаталоге). Например, создадим раздел "Продукция" со страницами:

  • app/views/pages/catalog/index.phtml (/catalog/) - "Продукция"
  • app/views/pages/catalog/hammers.phtml (/catalog/hammers/) - "Продукция -> Молотки"
  • app/views/pages/catalog/shovels.phtml (/catalog/shovels/) - "Продукция -> Лопаты"

Навигация

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

Таким образом необходимую структуру нужно сформировать отдельно. Для этого снова идем в админку - "Настройки". В разделе "Основные настройки" есть пункт "Структура навигации". Обратите внимание, что в разделе "Настройки системы администрирования" тоже есть такой пункт - не перепутайте. Заходим в редактирование и заносим туда следующий текст:

 О компании = {
 	url = /about/
 }
 Продукция = {
 	url = /catalog/
 	sub = {
 		Молотки = /catalog/hammers/
 		Лопаты = /catalog/shovels/
 	}
 }

Обновляем главную страницу и видим, что на сайте теперь есть навигация. А в разделе "Продукция" даже появился более глубокий уровень навигации - там ведь есть вложенные ссылки.

Для получения более подробной информации читайте статью "Навигация".

Как создавать новые страницы из админки?

Вы скажете, что вышеописанное - еще не достаточно, чтобы называться CMS, поскольку новые страницы приходится создавать путем создания файлов в файловой системе. И вы будете правы. Справедливости ради следует отметить, что можно поставить компонент "Файловый менеджер" и создавать файлы из админки. Но на самом деле этот метод вряд ли можно считать правильным. Вышеописанное годится только для задач "на скорую руку": сделать сайт из трех страниц или добавить на большой сайт простенькую динамическую страницу, на которой PHP-скрипт будет что-то делать.

Для серьезных же сайтов нужны и более серьезные механизмы. У разработчика есть два пути: взять готовые компоненты и создавать функционал на их основе или писать собственные компоненты с нуля. Но в любом случае вам следует сначала почитать об основных принципах устройства платформы TAO.

Метки: Азы
17.12.2013
Все статьи