Быстрый старт
Предполагается, что вы уже успешно установили и запустили движок, изучив соответствующий раздел.
Чтобы с ходу начать использовать Микрон, достаточно знать следующее:
Компоненты
Любая страница сайта, является компонентом и состоит из двух частей:
- 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(); // можно не вызывать, тогда сработает в деструкторе
Если Вы хотите увидеть весь получившийся код, то нажмите здесь.