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.