VKengine Лицензии Установка Мануал
Телефон +7 (916) 478-23-45
Как создать сайт-визитку из нескольких страниц с возможностью изменения из админки?

Для того, чтобы создать сайт-визитку из нескольких страниц, нужно проделать несколько действий.

Предварительно необходимо иметь свёрстанный шаблон сайта и список страниц, который будет на сайте. Если Вам требуется изменяющееся меню, читайте об этом на странице Как добавить меню на сайт.
Свёрстанный шаблон разбивается на заголовок (хедер, header), хвост (футер, footer) и центральную часть, в которой будут находиться данные. Далее необходимо скопировать себе на компьютер папку engine/templates/common/. Там находится 2 файла: common_header.php и common_footer.php. Придумайте название Вашему шаблону (например, new) и переименуйте папку и файлы (в данном случае будет папка new и в ней файлы new_header.php и new_footer.php).
В файле new_header.php необходимо сохранить первые строки:
<? //3.0.3
//Файл содержит заголовок всех страниц
//Файл подлежит изменению

//Учёт статистики и формирование title, keywords и description
require_once $root_dir.$engine_path."engine/helper/title_data.php";

//Для того, чтобы вывести перечень переменных, переданных из контроллеров, раскомментируйте следующую строчку
//preprint($AllValues);
?>
а также
<?//Ниже - важная строчка. Она позволяет поиску по сайту отрезать весь заголовок и не сохранять его в базу для каждой страницы. Не удаляйте её
//и используйте в своих шаблонах
?>
<!-- end of common header -->
Вместо средней части подставьте код хедера Вашего шаблона. При этом имейте в виду, что отвечает за вывод title страницы, - за вывод ключевых слов (keywords), - за вывод описания (description). Поэтому Вам нужно будет вставить эти кусочки кода в то место, где Вы хотите видеть вывод соответственно title, description или keywords.
В new_footer.php необходимо сохранить только строчку
<!-- start of common footer -->
а после неё нужно вставить Ваш код футера.
Далее загрузите папку new в папку engine/templates/. Теперь при создании страниц Вы можете выбирать свой шаблон.

После этого Вам нужно понять, какова будет структура данных на Вашем сайте. Как правило, данные делятся на две части:
1) данные статичных страниц (центральные тексты всех страниц, которые находятся на сайте-визитке) - там обычно идёт название, текст, возможно, картинка, description, keywords.
2) данные, которые выводятся на всех страницах, но при этом их хотелось бы менять из административной панели; либо данные, которые нужно выводить в каком-то месте определённым образом. Как правило, это контакты внизу страницы, текст копирайта (2007-2010 All Rights Reserved), слоган в верхней части - но зачастую это также на странице контактных данных вывод e-mail со ссылкой (email@email.com), когда пользователь вводит только сам e-mail (email@email.com) в поле в административной панели, а требуется вывести данные в определённом виде.

В этом случае Вам потребуется 2 инфоблока: Статические страницы и Контактные данные.
Создайте инфоблок "Статические страницы" с полями Название (title) типа Строка, Текст (text) типа Текст, Картинка (picture) типа Фото (default), Ключевые слова (keywords) типа Строка и Описание (description) типа Текст. Создайте в этом инфоблоке один элемент для того, чтобы можно было пользоваться функцией создания страниц. Также этот элемент будет использоваться для текста на главной странице. Напишите название "Главная страница", текст "Текст главной страницы", ключевые слова и описание - "Главная страница", вставьте фотографию, и сохраните элемент нажатием на кнопку "Создать элемент".

Далее создайте стандартную страницу "Элемент подробно". Выберите название шаблона static, а название файла - index.php. Также выберите созданный шаблон (new). Таким образом Вы создадите главную страницу для Вашего сайта. На полученной странице переименуйте массив из news_detail в static_detail (заведите себе за правило менять стандартное название массива. Так и Вам будет легче разбираться в данных, и данные не будут перекрываться). Сообщение об ошибке измените на "Страница не найдена." Если пользователь пройдёт по ссылке, которая когда-то вела на статическую страницу, а Вы её удалили, то он получит именно это сообщение. Условие, при невыполнении которого выводится сообщение об ошибке, менять не надо. Условие по умолчанию позволяет включать/отключать показ пользователям в страницы, просто нажав на красную/зелёную точку рядом с названием страницы в админке (точка становится зелёной/красной). Ссылка на список страниц Вам не потребуется, можно её не вводить.

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

После этого нажмите на кнопку "Просмотреть результат". Страница откроется в новом окне. При этом ссылка будет иметь вид index.php?id=1. В конец подставляется номер последнего введённого в инфоблок элемента, то есть если вы ввели после главной страницы ещё несколько страниц, то показана будет самая последняя. Для того, чтобы увидеть другую страницу данного инфоблока, в конце нужно подставить её номер.

Вы видите перед собой страницу с хедером, футером и данными. Теперь Вам следует привести её к виду, который Вам нужен. Обычно для этого нужно проделать три процедуры:
  1. Добавить запись о том, какая страница открывается по умолчанию. Для этого нужно открыть файл index.php для редактирования (скачайте его по ftp). Выглядит он следующим образом:
    <?
    include_once($_SERVER["DOCUMENT_ROOT"]."/root_dir.php");
    Эта строка отвечает за подключение корневого файла, в котором прописаны настройки. В частности, префикс таблиц. Она есть в любом файле, созданном через раздел "Страницы" админки.
    include_once($root_dir.$engine_path."engine/helper/header.php");
    Эта строка подключает стандартные функции. Она тоже есть в любом файле, созданном через раздел "Страницы" админки.
    include_once($root_dir.$engine_path."engine/gcomponents/news_detail/static_controller.php");
    Наша задача была - создать страницу, выводящую данные из инфоблока "Статические страницы". Для этого необходимо сначала обработать данные (т.е. получить их из админки, а также заполнить значения title, description и keywords для СЕО-оптимизации). При этом обработку данных необходимо производить до начала какого-либо вывода html-кода, иначе мы уже не сможем изменить title, description и keywords, и не сможем воспользоваться данными страницами для изменения каких-то данных в шаблоне. Поэтому в стандартный файл включаются два дополнительных файла: один файл - для обработки - называется контроллер, и находится по адресу engine/gcomponents/тИПсТРАНИЦЫ/нАЗВАНИЕшАБЛОНА_controller.php, второй - для вывода - называется темплейт, и находится по адресу engine/gcomponents/тИПсТРАНИЦЫ/нАЗВАНИЕшАБЛОНА_template.php. Данная строчка подключает как раз контроллер.
    include_once($root_dir.$engine_path."engine/templates/new/new_header.php");
    Эта строчка подключает хедер страницы.
    include_once($root_dir.$engine_path."engine/gcomponents/news_detail/static_template.php");
    Эта строчка подключает шаблон для вывода.
    include_once($root_dir.$engine_path."engine/templates/new/new_footer.php");
    Эта строчка подключает футер страницы.
    ?>
    Мы хотим добавить в этот файл запись о том, какая страница появляется по умолчанию, то есть когда пользователь заходит по ссылке http://нАШсАЙТ/, и, таким образом, параметр id не передаётся странице. Для этого после подключения стандартных функций:
    include_once($root_dir.$engine_path."engine/helper/header.php");
    нужно добавить строчку:
    if(!isset($_GET["id"])){$_GET["id"]=1;}
    Здесь 1 - номер той страницы, данные которой Вы хотите видеть по умолчанию.
  2. Обеспечить правильный вывод title, keywords и description.
    Для этого надо в конце файла-контроллера (engine/gcomponents/news_detail/static_controller.php) ввести следующие строчки php-кода (не забудьте, что php-код пишется внутри скобок <? ?>):
    $AllValues["page_title"]=$AllValues["static_detail"]["data"]["list"]["title"];
    $AllValues["page_keywords"][]=$AllValues["static_detail"]["data"]["list"]["keywords"];
    $AllValues["page_description"]=$AllValues["static_detail"]["data"]["list"]["description"];
    Поясним эти записи. Одна из строчек контроллера выглядит как
    $AllValues["static_detail"]["data"]=Get_News_By_Id(1,$_GET["id"]);
    Это означает, что в данный массив заносятся данные, полученные из админки. Подробнее структуру этого массива можно посмотреть в статье про функцию Get_News_By_Id. Вы можете распечатать этот массив и посмотреть на его структуру, воспользовавшись функцией print_r или preprint:
    preprint($AllValues["static_detail"]["data"]);
    Таким образом, мы видим, где находятся нужные нам данные. Они подставлены в правую часть присваиваний. Слева находятся три переменных, из которых потом генерируются title, keywords и description. Как именно они генерируются - можно посмотреть в файле engine/helper/title_data.php. Там также используется параметр $AllValues["this_site_info"]["title"], который можно поправить во вкладке "Настройки" по ссылке "Список сайтов" - там есть графа "Title":
    Если $AllValues["page_title"] определён в каком-то из контроллеров, то Title страницы формируется как $AllValues["page_title"] - $AllValues["this_site_info"]["title"]. Если не определён - то просто подставляется $AllValues["this_site_info"]["title"]. Внимание! Если $AllValues["page_title"] определён в двух контроллерах сразу, то title будет взят из того контроллера, который подключён позже.
    Также в списке сайтов есть ключевые слова. Они добавляются к тем ключевым словам, которые добавлены в КАЖДОМ из контроллеров. Обратите внимание, что $AllValues["page_keywords"] - это МАССИВ. Если Вы после редактирования файла видите ошибку вида:
    Fatal error: [] operator not supported for strings in Z:/home/localhost/www/engine/helper/title_data.php on line 27
    то это значит, что Вы забыли поставить пустые квадратные скобки [] после $AllValues["page_keywords"]:
    $AllValues["page_keywords"][]=$AllValues["static_detail"]["data"]["list"]["keywords"];
    Эти квадратные скобки означают, что ключевые слова нужно добавить в очередной элемент массива. Если Вы не хотите, чтобы ключевые слова собирались по всему сайту, то нужно перед этой строчкой добавить
    $AllValues["page_keywords"]=array();
    и массив очистится.
    С desrciption дело обстоит так: если $AllValues["page_description"] определено, то оно становится значением description. Иначе description принимает пустое значение.
    Впрочем, Вы можете самостоятельно переопределить title, keywords и description. Для этого Вам нужно в вашем хедере после подключение engine/helper/title_data.php определить три переменных: $AllValues["site_title"], $AllValues["site_keywords"], $AllValues["site_description"]. Обратите внимание, что $AllValues["site_keywords"] массивом не является и просто подставляется как строка в соответствующий meta-тэг.
  3. Необходимо организовать внешний вид страницы. Внешний вид можно менять в engine/gcomponents/news_detail/static_template.php. Часто делают, например, следующий вид:
    <div align="center"><?=$AllValues["static_detail"]["data"]["list"]["title"]?></div>
    <div><?if($AllValues["static_detail"]["data"]["list"]["picture"]>0){?>
    <img src="<?=photo::get_by_id($AllValues["static_detail"]["data"]["list"]["picture"])->get_html_path(0)?>" align="left"
     style="padding-right:10px;" alt="<?=$AllValues["static_detail"]["data"]["list"]["title"]?>" 
     title="<?=$AllValues["static_detail"]["data"]["list"]["title"]?>" /><?}?>
    <?=$AllValues["static_detail"]["data"]["list"]["text"]?></div>
    Это обеспечивает вывод заголовка посередине, вывод картинки, если она загружена (проверка $AllValues["static_detail"]["data"]["list"]["picture"]>0 как раз является проверкой загруженности картинки. Встроенная проверка в движок более сложная, но этой зачастую достаточно) и обтекание картинки текстом. При этом остальное (ключевые слова, описание, ссылку) можно удалить. Вообще, как файл controller, так и файл template, созданные Вами (и лежащие в папке gcomponents!!!), предназначены для изменения.
Итак, мы сделали внешний вид страницы. Проверив, что страница работает так, как мы хотим (подставляя разные номера существующих страниц; есть смысл протестировать на нескольких страницах), мы можем заняться остальным. А именно: нам необходимо проставить ссылки в хедере и футере (они лежат в папке engine/gcomponents/нАЗВАНИЕшАБЛОНА, в нашем случае это new), а также добавить те данные, которые мы хотим менять из админки и для которых сделаем второй инфоблок.
Создаём в админке во вкладке "Инфоблоки" инфоблок "Контактные данные" с полями "e-mail", "контактный телефон", "адрес", "карта проезда". Вводим туда один элемент с нужными данными. Запоминаем его номер, он нам понадобится.
Создаём страницу "элемент подробно" для инфоблока "Контактные данные". Название шаблона (например) contacts, название файла (например) test.php (он нам потом не понадобится, и мы его удалим), шаблон страницы new.
Дальше меняем имя массива на (например) contacts_detail, оставляем остальные параметры без изменения и нажимаем "Завершить создание".
Дальше скачиваем файл test.php и открываем. Допустим, нам нужно добавить контакты часть в шапку сайта, а часть в низ сайта, и ещё карту добавить на страницу Контакты, которая у нас под номером, допустим, 3 в инфоблоке "Статические страницы".
В файле test.php подключены два файла:
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_controller.php");
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_template.php");
Контроллер нам будет необходим во всех трёх случаях, поэтому разумно его подключить сразу в файл engine/templates/new/new_header.php в самом начале (то есть вставить в php-код строку
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_controller.php");
Дальше нам потребуются три разных темплейта, поэтому можно сделать копии contacts_template.php и назвать их contacts_header_template.php, contacts_footer_template.php и contacts_onpage_template.php (лучше не нумеровать, а называть мнемоническими названиями - потом легче будет искать и легче будет не перепутать). Соответственно, в том месте шапки (хедера), где нам нужно вывести контактные данные, мы вставляем строчку
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_header_template.php");
и редактируем этот темплейт нужным образом; в футер мы вставляем в нужное место строчку
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_footer_template.php");
и редактируем этот темплейт нужным образом; а в файл engine/gcomponents/news_detail/static_template.php вставляем в нужное место код
<?if($_GET["id"]==3){ //3 - страница "Контакты"
include($root_dir.$engine_path."engine/gcomponents/news_detail/contacts_onpage_template.php");
?>
Замечание. Поскольку мы уже подключили engine/gcomponents/news_detail/contacts_controller.php в начало файла engine/templates/new/new_header.php, то он доступен не только в этом файле, но и в файле engine/templates/new/new_footer.php, и во всех темплейтах, которые включены на страницах с шаблоном new. То есть можно не размножать файл contacts_template.php, а просто скопировать код из него в соответствующие места вместо include-директив и исправлять непосредственно там. Иногда это получается более наглядно, чем с такими вот включениями.
Таким образом, сайт-визитка с редактируемыми данными страниц и контактов из админки создан!

Кратко резюмируем этапы деятельности:
1) Разбиение свёрстанного шаблона на хедер и футер.
2) Создание блоков данных.
3) Создание стандартных страниц.
4) Включение стандартных страниц в нужное место.
5) Редактирование внешнего вида в стандартных темплейтах.

Valid HTML 4.01 Strict Valid CSS!