Skip to content
Vladimir edited this page Nov 10, 2017 · 28 revisions

Создание страниц - дополнений

Рекомендуется создавать новые php - файлы вывода в папке location, а не делать их независимыми

К таким файлам можно получить доступ по ссылке - www.example.com/?mode=название_файла_без_формата (в случае если включен mode_rewrite также www.example.com/go/название_файла_без_формата)

Встроеный таким образом файл имеет доступ ко всем переменным движка ($user, $config, $bd_names ...) без подключения системных файлов (system.php и user.class.php) и выполнения инициализации вручную ( фактически эти файлы встраиваются через index.php и формируют вывод страницы )

Пример минимального содержания для файла:

<?php if (!defined('MCR')) exit;

$page = 'Название страницы';
$content_main .= Manager::ShowStaticPage(STYLE_URL . 'start-game.html'); // 2.0 - 2.15
$content_main .= View::ShowStaticPage('start-game.html'); // 2.3 +

Где start-game.html - файл в папке стилей, с содержимым основного информационного блока.

В большинстве случаев для взаимодействия с БД используются отдельные классы и файлы вывода страницы содержат лишь логику вывода ( например location/news.php ), но есть и исключения, например location/admin.php

Файл инициализации

Файл инициализации system.php ( 2.0-2.3 ) или instruments/base.group.php ( 2.35 + ). Содержит основные функции для работы с БД, основные константы и классы.

Константы

  • MCR - версия движка ( для версии 2.0-2.15 значение всегда 1 )
  • MCR_ROOT - путь до корневой папки webMCR ( для подключения дополнительных библиотек ), т.е. все файлы движка в дальнейшем подключаются с использованием этой константы ( например require(MCR_ROOT.'instruments/user.class.php') )
  • MCRAFT - путь до папки игровых скриптов авторизации, папок скинов, плащей, обновлений
  • MCR_STYLE - путь до папки стилей
  • STYLE_URL - ссылка для формирования пути до файла из папки стилей. Т.е. любая ссылка на файл из папки стилей в шаблоне прописывается например как href="img/edit.png"
  • DEF_STYLE_URL - ссылка на папку темы оформления по умлочанию ( Default )

Работа с БД

Функции BD(), BDConnect() и TextBase::Safe() устарели и работают только в режиме использования php модуля mysql.

function getDB() - возвращает объект-драйвер для работы с БД (интерфейс instruments/database/databaseInterface, методы описаны phpDoc)

instruments/database/databaseInterface - интерфейс драйвера; список аналогов методов класса PDO:

  • public function query($query);
  • public function quote($var);
  • public function prepare($queryTpl);
  • public function lastInsertId();

Работу с дополнительными методами можно посмотреть в любом файле проекта, т.к. зачастую для выполнения запросов используется метод ask (функционал prepare -> execute), а для получения одной строки из результирующего набора fetchRow (по сути prepare->execute->fetch)

instruments/database/statementInterface - интерфейс подготовленного запроса к базе данных; список аналогов методов класса PDOStatement:

  • public function setFetchMode($mode = 'assoc'); // доступны режимы выборки assoc, num, both
  • public function fetch($mode = null); // доступны режимы выборки assoc, num, both
  • public function rowCount();
  • public function execute($data = null);
  • public function bindValue($index, $data, $type = 'string'); // явно заданный тип данных ($type) параметра соответствует функции settype

Отладка

vtxtlog($string) - записать информацию в лог-файл ( если выставлена опция в конфиге ). Максимальный размер файла 50мб, затем перезапись.

Дополнительный конфиг

Задумывался для хранения второстепенных настроек, не требующих инициализации в ходе установки

Список доступных опций

  • rcon-port - последние настройки подключения по RCON
  • rcon-serv
  • rcon-pass
  • next-reg-time - время следующей регистрации
  • email-verification - подтверждение регистрации по почте
  • email-verification-salt - соль для генератора строки подтверждения
  • launcher-version - версия лаунчера
  • latest-game-build - билд игры

sqlConfigGet($type) - получить значение опции $type

sqlConfigSet($type,$value) - задать значение опции $type равным $value

Классы base.class.php

Подключается автоматически вместе с system.php

TextBase - статический класс. Работа со строками с учетом кодировки ( у нас UTF-8, так что например для вычесления длинны строки стандартный strlen не подойдет )

TextBase::HTMLDestruct($text) - замена всех HTML тегов на HTML сущности
TextBase::HTMLRestore($text) - обратно HTMLDestruct
TextBase::StringLen($text) - длинна строки
TextBase::CutString($text, $from = 0, $to = 255) - вырезать строку
TextBase::CutWordWrap($text) - вырезать переносы строки
TextBase::WordWrap($text, $width = 60, $break = "\n") - разбить длинные слова пробелами через каждые $width - символов

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

View($style_sd) - создает объект View, $style_sd - базовая поддиректория в папки стилей
View->arrowsGenerator($link, $curpage, $itemsnum, $per_page, $prefix = false) - генерация кнопок многостраничного листинга

$link - общая ссылка
$curpage - текущая страница
$itemsnum - количество объектов всего
$per_page - количество объектов выводимых на одну страницу
$prefix - формирует название файлов оформления ( если не задавать будет использоваться оформление по умолчанию из папки темы оформления other/common )

Пример:

$arrGen = new View();
$html = $arrGen->arrowsGenerator('index.php?mode=control&do=log&', 1, 30, 5);

где $html содержит HTML код кнопок перехода по страницам с текущей страницей - 1, общим числом страниц 6

View::ShowStaticPage($page) - возвращает текст статической страницы $page .

Класс пользователя

Файл instruments/user.class.php

User

User($input, $method) - создает объект User, ищет пользователя в БД по заданым критериям $input - значение поля в БД, а $method - название поля

Если пользователь не найден по заданому критерию User->id() - возвратит false

User->id() - ID пользователя
User->ip() - IP адресс последней авторизации
User->name() - логин пользователя
User->group() - ID группы пользователя | User->getGroupName() - название группы
User->lvl() - уровень доступа ( зависит от группы )
User->getPermission($param) - значение для разрешения $param

Список доступных разрешений

  • change_skin - true \ false - разрешение на смену скина
  • change_pass - true \ false - разрешение на смену пароля
  • lvl - integer - уровень доступа ( аналог User->lvl() )
  • change_cloak - true \ false - разрешение на смену плаща
  • change_login - true \ false - разрешение на смену логина
  • max_fsize - integer - максимальный размер файла (кб)
  • max_ratio - integer - максимальное соотношение строн
  • add_news - true \ false - разрешение на добавление новостей
  • adm_comm - true \ false - разрешение на удаление чужих комментариев
  • add_comm - true \ false - разрешение на добавление комментариев

User->isFemale() - true \ false - пользователь женского пола

User->authenticate($pass) - проверка правильности введенного пароля

Текущий пользователь ( восстановление \ создание сессии в независимом файле )

User->login($tmp, $ip, $save = false) - авторизация и создание сессии, временных файлов на стороне клиента в случае если авторизационные данные нужно запомнить

$tmp - ID сессии ( рекомендуется использовать randString( 15 ) для генерации уникального идентификатора )
$ip - IP адресс
$save - запомнить авторизацию

MCRAuth::userLoad() - восстановление сессии пользователя - если пройдет успешно то $user != false

Так например, в случае если пользователь авторизован выведет соответствующее сообщение

require('./system.php');
require(MCR_ROOT.'instruments/user.class.php');
BDConnect('login'); MCRAuth::userLoad(); if (empty($user)) exit('Please login before go to this page');
if ($user->lvl() < 1) exit('You dont have permission for that');
exit($user->name().' was here.');