Фреймворк создан специально для того, чтобы упростить создание html-страниц, но при этом сохранить максимальную гибкость и настраиваемость.
Большинство рутинных операций LPF выполняет автоматически. Например подключение css-стилей, js-скриптов не требуют правки исходного кода: достаточно разместить файлы в соответствующих каталогах.
С помощью настроек можно добиться самого разного поведения. Например можно переопределять файлы, управлять кешированием, скриптами, стилями, сжатием, парсингом кода и т.д., и т.п.
Чтобы следить за новостями, подписывайтесь на твиттер автора @maxsite.
В LPF применяется простая структура каталогов:
При первом обращении к LPF будет автоматически создан файл .htaccess с нужными настройками. Если вы переносите сайт на другой адрес, то просто удалите .htaccess, LPF создаст его заново.
При необходимости можно переопределить любые каталоги LPF.
Админ-панель — это обыкновенная страница и может быть размещена по любому адресу. В базовом варианте она доступна по адресу http://ваш_сайт/lpf-admin.
Для доступа к админ-панели, предварительно следует определить логин и пароль. Это нужно сделать в файле lpf-content/pages/lpf-admin/auth/auth-options.php.
С помощью админ-панели можно
Все страницы размещаются в каталоге lpf-content/pages.
Имя адреса страницы совпадает с её каталогом. Например страница с адресом http://сайт/contact будет располагаться в /pages/contact/. Можно создавать вложенные страницы. Например адрес http://сайт/contact/map будет располагаться в /pages/contact/map.
Текст страницы размещается в обязательном файле index.php. По сути это то, что выводится между BODY.
Главная страница размещается в каталоге home, а 404-я в каталоге 404.
При желании можно сменить каталог страниц на любой другой. Для этого в конфигурационном файле lpf-content/config/config.php
нужно задать опции PAGES_DIR и PAGES_URL. Например вот так страницы будут находиться в lpf-pages
корня вашего сайта:
// путь к каталогу на сервере define("PAGES_DIR", BASE_DIR . 'lpf-pages' . DIRECTORY_SEPARATOR); // url-адрес define("PAGES_URL", BASE_URL . 'lpf-pages/');
Примечание. Аналогичным образом можно задать каталоги (и их url-адреса) для: assets, set, components, snippets и других.
Настройки указываются в файле variables.php.
В переменной $TITLE задаётся title страницы. В $META можно задать разные значения meta для секции HEAD. Остальные основные настройки задаются в $VAR.
Файл assets/images/favicon.png задаёт иконку сайта. Просто замените этот файл на свой. Если нужно отключить код для фавиконки, то укажите $VAR['nofavicon'] = true;
Полный список настроек вы можете посмотреть в файле lpf-core/engine/engine.php в массиве $VAR
Если страница использует простые настройки, то можно не создавая variables.php, размещать их прямо в тексте в файле index.php. Делается это в верхней части текста/файла:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /* === TITLE: Landing Page Framework META: description: Landing Page Framework keywords: Landing page, php-framework viewport: width=device-width, initial-scale=1.0 generator: Landing Page Framework (lpf.maxsite.com.ua) 1: property: og:title content: Landing Page Framework 2: property: og:description content: Landing Page Framework 3: property: og:url content: http://mysyte.com/ META_LINK: 1: rel: canonical href: http://mysyte.com/ 2: rel: dns-prefetch href: //fonts.gstatic.com/ VAR: simple: true compress_text: true === */ ?> Текст страницы
Блок /* === ... === */
служит ограничителем данных, которые описываются в формате YAML
В каталоге assets следует располагать общие для всех страниц «оформительские» файлы (css, js, fonts, images, less, sass и т.п.).
CSS-файлы автоматически подключаются из каталога assets/css в алфавитном порядке. Если важен порядок подключения, то именуйте файлы с префиксами «1-», «2-» и т.д.
JS-скрипты размещаются в одноименном каталоге. Если js-файл нужно автоматически подключить в секцию HEAD, то его следует разместить в assets/js/autoload.
Если js-файл нужно загрузить перед закрывающим /BODY, то его следует разместить в assets/js/lazy.
Если js-скрипт должен быть загружен как async или defer, то его следует переименовать:
Подключаемые js-скрипты проверяются на дубли (по адресу), что исключает их повторную загрузку.
Скрипты подключаются также в алфавитном порядке. Используйте префиксы, чтобы управлять их порядком.
Вы можете размещаться css-файлы и js-скрипты на уровне страницы. Создайте каталоги css и js в каталоге страницы.
Если стоит задача отключить css и js-файлов из assets, то используйте настройки $VAR['nocss'] = true и $VAR['nojs'] = true.
Если файл начинается с «-» или «_», то его подключение игнорируется.
LPF расчитан на вебмастеров, поэтому фреймворк по-умолчанию не делает какую-либо обработку HTML-кода. Он выводит ровно то, что задано. Вместе с тем, в зависимости от задачи, можно подключить различные парсинги текста.
BBCode подключается через параметр $VAR['bbcode'] = true;. Описание возможностей этого парсинга см. в engine/bbcode.
Markdown подключается через $VAR['markdown'] = true;
Textile подключается через $VAR['textile'] = true;
Simple — это уникальный парсер, который упрощает написание HTML-кода, при этом не создающим сложностей с запоминанием всех вариантов, как в Markdown или Textile. Для включения укажите $VAR['simple'] = true;
Парсер maxsite (от MaxSite CMS) используется для полной авторасстановки абзацев, совмещенным с произвольным html-кодом. Для его включения укажите $VAR['autotag_my'] = 'maxsite';
Параметр $VAR['autopre'] = true; разрешает преобразовать содержимое тэга PRE в html-спецсимволы. Данная возможность пригодится тем, кто часто использует примеры программного кода.
Параметр $VAR['autoremove'] = true; разрешает LPF удалять весь текст внутри спецкода [remove] ... [/remove].
Для того, чтобы сжать результирующий HTML, используйте $VAR['compress_text'] = true;. Желательно проверять результат сжатия на ошибки.
Если вы используете рекомендации гугла, то можно заменить протокол http и https на универсальный «//». Для этого используйте параметр $VAR['remove_protocol'] = true;. При использовании этой возможности рекомендуется проверять конечный результат.
LPF позволяет использовать HTML-шаблонизатор равный мощности PHP. Для того, чтобы его использовать, в variables.php задайте $VAR['tmpl'] = true;
Шаблонизатор использует две конструкции, позволяющие выполнять произвольный php-код.
{{ $hello }}
— эквивалентно <?= $hello ?>
{% my_func() %}
— эквивалентно <?php my_func() ?>
Для лучшей читабельности кода используйте альтернативный синтаксис PHP для if, while, for, foreach и switch.
Шаблонизатор позволяет использовать любой php-код без ограничений. Например:
<?php $hello = 'Привет!'; $descr = 'Это мой сайт'; ?> <h1>{{ $hello }}</h1> <h3>{{ $desc }}</h3>
Пример с использованием if
.
{% $theme = 1; // or 2, 3 %} {% if ($theme == 1) : %} <div class="t-red">This red</div> {% endif %} {% if ($theme == 2) : %} <div class="t-green">This green</div> {% endif %} {% if ($theme == 3) : %} <div class="t-blue">This blue</div> {% endif %}
Сниппеты — это код или текст, пригодный для повторного использования и вынесеный для удобства в отдельный файл. Например счетчик, кнопки Твиттера или код google analytics. Сниппеты размещаются в отдельных файлах в каталоге lpf-content/snippets.
Подключение сниппета в тексте страницы осуществляется с помощью функции mso_snippet('сниппет')
, например:
<?= mso_snippet('twitter') ?>
— выведет сниппет из файла twitter.php.
Если на странице используются одинаковые фрагменты текста, то их можно оформить с помощью set-блоков. Каждый такой блок именуется и выводится в произвольном месте на странице. Для включения этой возможности укажите в конфигурации $VAR['set_text'] = true;
[set=1]текст1[/set] [set=2]текст2[/set] <h1>[set_out=1]</h1> <h2>[set_out=2]</h2> <b>[set_out=1]</b> <u>[set_out=2]</u> <i>[set_out=1]</i> <s>[set_out=2]</s>
Результат:
текст1 текст2 <h1>текст1</h1> <h2>текст2</h2> <b>текст1</b> <u>текст2</u> <i>текст1</i> <s>текст2</s>
Компоненты — это дополнительные модули, которые позволяют подключить к странице произвольные сторонние библиотеки, jQuery-плагины и т.п. Компоненты могут иметь собственные опции.
См. статью Создание компонентов LPF
Данное тестирование позволяет выявить наиболее эффективную страницу или блок из нескольких. То есть подготавливаются страницы с небольшими отличиями и посетителям они показываются случайным образом. Та страница, которая окажется более эффективной (отследить это можно с помощью Google Analytics) и считается «победителем».
Создайте файл lpf-content/config/config.php
, где разместите php-код:
define("HOME_PAGE", mso_ab(array('home1', 'home2', 'home3')));
— где «home1», «home2», «home3» — страницы, участвующие в A/B-тестировании. Количество страниц может быть произвольным.
Функцию mso_ab()
можно использовать когда нужно случайным образом получить один элемент из указанных. Например случайным образом выводить один из блоков.
$theme = mso_ab(array(1, 2, 3)); if ($theme === 1) { echo 'BLOCK 1'; } elseif ($theme === 2) { echo 'BLOCK 2'; } else { echo 'BLOCK 3'; }
Landing Page Framework позволяет создавать статичные html-страницы. Создается готовый html-файл, который может быть скопирован на сервер.
Для создания статичной страницы следует использовать параметр $VAR['generate_static_page'].
$VAR['generate_static_page'] = BASE_DIR . 'static/my_page.html'
Этот код укажет LPF создать файл my_page.html в каталоге static.
В результирующем html-файле можно автоматически заменить URL-адреса основного сайта. Для этого используется параметр $VAR['generate_static_page_base_url'].
$VAR['generate_static_page_base_url'] = '/assets/';
Это заменит все вхождения адреса BASE_URL (это адрес главной страницы сайта) на «/assets/».
Можно задать призвольную php-функцию, которая будет обрабатывать текст страницы.
$VAR['generate_static_page_function'] = 'имя функции';
Статические страницы создаются с учетом их вложенности.
Если в шаблоне страницы можно выделить шапку и подвал, то используются файлы header.php и footer.php.
Если требуется разместить какой-то код в секцию HEAD, то разместите его в файле head.php
Если шапка и подвал используются для разных страниц, то их можно перенести в каталог set, а в настройках страницы указать:
$VAR['start_file'] = SET_DIR . 'header.php'; $VAR['end_file'] = SET_DIR . 'footer.php';
LPF легко справляется со сложными задачами, требующими перехвата POST/GET/AJAX-запросов. Для этого используется несколько предопределенных файлов.
Файл _post.php перехватывает post/ajax-запрос. В этом файле можно разместить свой обработчик входящих данных, после которого работа LPF будет прекращена.
Если нужно управлять загрузкой данных после POST-обработчика, то используется файл _post2.php. Если этот файл завершается как return 'STOP';
, то дальнейшая работа LPF будет прекращена. Во всех других случаях — продолжена (загрузка страницы и т.д.)
Если требуется перехватить управление не только POST, но и любых других данных (например SERVER), то используется файл _server.php. Если он также завершается через STOP
, то LPF прекратит дальнейшую загрузку.
См. статью Отправка произвольной формы без перезагрузки страницы
Продуманная архитектура кэширования позволяет сайтам на LPF достичь очень высоких скоростных показателей. Сайт на LPF по скорости можно сравнить разве что с обычным статичным html-сайтом.
В файле .htaccess LPF автоматически прописывает т.н. браузерное кэширование: управление временем кэша и gz-сжатием трафика.