Быстрый старт
Предполагается, что вы уже успешно установили и запустили движок, изучив соответствующий раздел.
Чтобы с ходу начать использовать Микрон, достаточно знать следующее:
Компоненты
Любая страница сайта, является компонентом и состоит из двух частей:
- php-код, который помещается в src файл;
- html-шаблон, который помещается в tpl файл.
У них одинаковое имя и расширение (.php), но первый файл находится в папке src, а второй в папке tpl. Пример:
src/example.php
tpl/example.php
В src файле мы выполняем вычисления, запросы к БД и т.п., готовим переменные для в ставки в tpl файл.
В tpl файле мы вставляем эти переменные простыми php вставками. Пример:
src/rand.php:
<?php
$rand = mt_rand();
?>
tpl/rand.php:
<p>
Случайное число: <?= $rand?>
</p>
Теперь, обратившись к странице нашего сайта http://example.com/?q=example, мы получим следующий контент:
<p>
Случайное число: 7692038751
</p>
Главный шаблон
У нашего сайта есть главный шаблон, который находится в файле tpl/main_template.php.
Все страницы, которые запрашивает пользователь, выводятся в нём в том месте, где находится вставка:
<?= $content?>То есть главное меню, шапка сайта, футер и все остальные общие части дизайна должны находиться в этом главном шаблоне.
index.php
Все запросы сайта идут через index.php. Другие php файлы никогда не вызываются напрямую.
При этом, чтобы иметь красивый URL, у вас в корне должен быть .htaccess файл (появляется после распаковки в корень unzipme.zip).
После этого все ссылки преваратятся из таких:
http://example.com/?q=test_page&a=1&b=2
в такие:
http://example.com/test_page?a=1&b=2
Компонент в компоненте
Компоненты могут включать другие компоненты. Это делается функцией IncludeCom(). Если привести грубый пример, то у нас есть файл tpl/wrapper.php с содержимым:
<p>Содержимое компонента inner: <?php IncludeCom("inner")?></p>
И файл tpl/inner.php с содержимым:
<strong>Inner Test</strong>
То когда пользователь будет обращаться к странице http://mysite.com/?q=wrapper то он получит страницу с содержимым:
<p>Содержимое компонента inner: <strong>Inner Test</strong></p>
Подробнее об этом можно почитать в соответсвтвующем разделе.
Ссылки на страницы
Все ссылки на страницы сайта задаются через функцию SiteRoot(). Например, для меню сайта это делается так:
<ul>
<li>
<a href="<?= SiteRoot('main')?>">Главная</a>
<a href="<?= SiteRoot('about_us')?>">О нас</a>
</li>
</ul>
В данном случае main и about это другие страницы/компоненты сайта со своими src и tpl файлами.
URL-адрес текущей страницы можно получить функцией GetCurUrl(). Она позволяет переопределять и убирать из текущего URL необходимые параметры. Об этом можно почитать в соответсвтвующем разделе.
Ресурсы
Все изображения сайта помещаются в папку i/image/, все javascript-файлы в i/js/, все css-файлы в i/css/. При вставке этих файлов в шаблон, нужно обязательно использовать php функцию Root(), пример:
<img src="<?= Root('i/image/logo.png')?>" alt="logo">
<link rel="stylesheet" type="text/css" href="<?= Root('i/css/reset.css')?>" />
<script type="text/javascript" src="<?= Root('i/js/dev/jquery.easing.js')?>"></script>
js и css файлы дожны находиться в блоке <head></head>. Это нужно чтобы корректно отработал Extrapacker.
Входные данные
Вместо прямого обращения к массивам $_GET и $_POST, следует использовать функции Get() и Post() соответственно. Пример:
$name = Get("name"); // аналог $name = @$_GET["name"];
$name = Post("name"); // аналог $name = @$_POST["name"];
$name = Get("name", "Alex"); // аналог $name = empty($_GET["name"]) ? "Alex" : $_GET["name"];
$name = Post("name", "Alex"); // аналог $name = empty($_POST["name"]) ? "Alex" : $_POST["name"];
LessCss синтаксис
Css-файлы можно (но не обязательно) писать используя LessCss синтаксис. Он позволяет делать следующие замечательные вещи:
.def-back
{
background: #000;
}
.wrapper
{
.inner
{
.m-border-radius(5px);
color: #fff;
.def-back;
}
}
Подробнее о LessCss можно почитать здесь.
Работа с БД
Чтобы начать работу с Базами Данных, нужно выполнить следующие шаги:
Для настройки коннекта, открыть core/config/db.php и вписать в переменную $g_config['dbSimple']['databases'] данные для доступа к бд, например:
$g_config['dbSimple']['databases'] = array
(
'db' => array
(
'dsn' => DEBUG_MODE ?
'mysql://root:@localhost/test_db?charset=UTF8' : // Если локалка
'mysql://user_name:user_password@localhost/real_db?charset=UTF8'
)
);
Лучше сразу вписать два соединения - для теста на локальной машине (когда DEBUG_MODE равен true) и для production версии на сервере.
В данном случае user_name - имя пользователя БД, user_password его пароль, а real_db имя базы данных на сервере.
Мы не должны работать с базой данных напрямую, поэтому далее мы пишем модель для работы с нужной таблицей. Допустим мы хотим создать базу пользователей и организовать работу с ней.
Для этого мы создаём файл UserModel.php в папке model.
В этом файле объявляем класс UserModel унаследованный от Model.
Теперь нужно обязательно добавить туда два метода: конструктор и CreateTable():
public function CreateTable()
{
$this->db->query("CREATE TABLE IF NOT EXISTS ?#
(
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(256) CHARACTER SET utf8 NOT NULL,
`name` varchar(256) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1",
$this->table);
}
public function __construct($user_id = NULL, $onlyShow = false)
{
global $g_databases;
parent::__construct($g_databases->db, 'user', 'user_id', $user_id, $onlyShow);
}
В конструкторе мы вызываем конструктор родителя и передаём туда имя таблицы (вторым параметром) и имя ключевого поля (третим параметром).
По сути класс готов, но было бы удобно добавить и вспомогательные методы для получения списка пользователей, общего количества пользователей и поиска пользователя по логину:
public function List($page = 0, $perPage = 0)
{
$page = intval($page);
$limit = $perPage;
$from = ($page - 1) * $limit;
return $this->db->select("SELECT * FROM ?# LIMIT ?d, ?d",
$this->table, $from, $limit);
return $ret;
}
public function Total($showHidden = false)
{
return $this->db->selectCell("SELECT COUNT(*) FROM ?#", $this->table);
}
public function Find($login)
{
return $this->db->selectCell("SELECT `user_id` FROM ?# WHERE `login` = ?", $this->table, $login);
}
Заметьте, что мы никогда не всталяем данные в строку запроса напрямую. Мы всегда используем placeholder-ы.
Теперь у нас готов простейший класс для работы с пользователями. Добавление пользователя будет происходить так:
$user = new UserModel();
$user->login = "SomeLogin";
$user->name = "Some Name";
$user->Flush(); // можно не вызывать, тогда сработает в деструкторе
Редактирование пользователя по его id будет происходить так:
$user = new UserModel($user_id);
$user->name = "Some Name2";
$user->Flush(); // можно не вызывать, тогда сработает в деструкторе
Удаление пользователя по его id будет происходить так:
$user = new UserModel($user_id);
$user->Delete();
$user->Flush(); // можно не вызывать, тогда сработает в деструкторе
Если Вы хотите увидеть весь получившийся код, то нажмите здесь.