Быстрый старт

Предполагается, что вы уже успешно установили и запустили движок, изучив соответствующий раздел.
Чтобы с ходу начать использовать Микрон, достаточно знать следующее:

Компоненты

Любая страница сайта, является компонентом и состоит из двух частей:

  • 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(); // можно не вызывать, тогда сработает в деструкторе
    

Если Вы хотите увидеть весь получившийся код, то нажмите здесь.