Класс Main
Объект $Main:
Объект с общими функциями системы управления
Базовый класс для объекта
$Main
class Main extends \Cms\Site\Base { … }
Свойства
$id
$Main->id = null;
ID текущей страницы
var $id = null;
$Page
$Main->Page = null;
Текущая страница
var $Page = null;
$lang
$Main->lang = 'ru';
Язык текущей страницы
var $lang = 'ru';
$default_lang
$Main->default_lang = 'ru';
Язык сайта по умолчанию
var $default_lang = 'ru';
$default_title
$Main->default_title = 'Новая страница';
Название страницы по умолчанию
var $default_title = 'Новая страница';
$entry_point
$Main->entry_point = 'cms';
Точка входа на сайт
var $entry_point = 'cms';
$admin_point
$Main->admin_point = 'admin';
var $admin_point = 'admin';
$default_acl
$Main->default_acl = array(
'-' => array(
'allow-view-login' => '*',
),
'admin' => array(
'deny-*-group' => '*',
),
);
Список прав доступа к страницам
var $default_acl = array( … );
$Cart
$Main->Cart
Объект
$Cart
var $Cart;
$Email
$Main->Email
Объект
$Email
var $Email;
$Redis
$Main->Redis
Объект
$Redis
var $Redis;
$Request
$Main->Request
Объект
$Request
var $Request;
$Storage
$Main->Storage
Объект
$Storage
var $Storage;
$Modules
$Main->Modules
Объект
$Modules
var $Modules;
$Display
$Main->Display
Объект
$Display
var $Display;
$date_weekdays
$Main->date_weekdays
var $date_weekdays;
$date_weekdays_lc
$Main->date_weekdays_lc
var $date_weekdays_lc;
$date_weekdays_brief
$Main->date_weekdays_brief
var $date_weekdays_brief;
$date_months_of
$Main->date_months_of
var $date_months_of;
$date_months
$Main->date_months
var $date_months;
$acl
$Main->acl = array();
var $acl = array();
$pager_count
$Main->pager_count
var $pager_count;
$pager_limit
$Main->pager_limit
var $pager_limit;
$pager_pages
$Main->pager_pages
var $pager_pages;
$pager_page
$Main->pager_page
var $pager_page;
$pager_skip
$Main->pager_skip
var $pager_skip;
$path
$Main->path
Путь к странице
var $path;
$_sort_array_by
$Main->_sort_array_by
var $_sort_array_by;
$_sort_array_desc
$Main->_sort_array_desc
var $_sort_array_desc;
Методы
__construct()
new Main($open=true);
Конструктор
Параметры:
Имя | Описание |
---|---|
$open |
|
function __construct($open = true) {
parent::__construct();
if ($open) $this->init();
}
Page()
$Main->Page();
Объект
$Page
Возвращает: Cms\Root\Page
Примеры:
$Page = $Main->Page();
function Page() {
return $this->Page;
}
Cart()
$Main->Cart();
Объект
$Cart
Возвращает: Cms\Root\Cart
Примеры:
$Cart = $Main->Cart();
$Cart = $App->get('cart');
function Cart() {
if (isset($this->Cart)) return $this->Cart;
return $this->Cart = $this->App()->get('cart');
}
Email()
$Main->Email();
Объект
$Email
Возвращает: Cms\Root\Email
Примеры:
$Email = $Main->Email();
$Email = $App->get('email');
function Email() {
if (isset($this->Email)) return $this->Email;
return $this->Email = $this->App()->get('email');
}
Redis()
$Main->Redis();
Объект
$Redis
Возвращает: Cms\Root\Redis
Примеры:
$Redis = $Main->Redis();
$Redis = $App->get('redis');
function Redis() {
if (isset($this->Redis)) return $this->Redis;
return $this->Redis = $this->App()->get('redis');
}
Request()
$Main->Request();
Объект
$Request
Возвращает: Cms\Root\Main\Request
Примеры:
$Request = $Main->Request();
$Request = $App->get('main_request');
function Request() {
if (isset($this->Request)) return $this->Request;
return $this->Request = $this->App()->get('main_request');
}
Storage()
$Main->Storage();
Объект
$Storage
Возвращает: Cms\Root\Main\Storage
Примеры:
$Storage = $Main->Storage();
$Storage = $App->get('main_storage');
function Storage() {
if (isset($this->Storage)) return $this->Storage;
return $this->Storage = $this->App()->get('main_storage');
}
Modules()
$Main->Modules();
Объект
$Modules
Возвращает: Cms\Root\Main\Modules
Примеры:
$Modules = $Main->Modules();
$Modules = $App->get('main_modules');
function Modules() {
if (isset($this->Modules)) return $this->Modules;
return $this->Modules = $this->App()->get('main_modules');
}
Display()
$Main->Display();
Объект
$Display
Возвращает: Cms\Root\Main\Display
Примеры:
$Display = $Main->Display();
$Display = $App->get('main_display');
function Display() {
if (isset($this->Display)) return $this->Display;
return $this->Display = $this->App()->get('main_display');
}
init()
$Main->init();
Создание объектов системы управления
function init() {
# Объекты
$Request = $this->Request();
$Request->init();
$Storage = $this->Storage();
$Storage->init();
$Modules = $this->Modules();
$Modules->init();
$Display = $this->Display();
$Display->init();
# Объект $Main->Page
if (strlen($this->id = $Request->getId())) {
$this->Page = $this->load($this->id);
if (!$this->Page) {
if (strlen($url = $Request->getPath())) {
$this->Page = $this->Storage()->loadUrl($url);
}
if (!$this->Page) {
$this->Page = $this->load(array(
'id' => $this->id,
'type' => $_REQUEST['type'],
'created' => true,
));
}
}
} else {
# 2013-07-30
if (isset($_GET['type']) && preg_match("~^\w+~", strval($_GET['type']), $m)) {
$this->Page = $this->create($m[0]);
} else {
$this->Page = $this->create("page");
}
if (isset($_GET['parent'])) {
$this->Page->parent = strval($_GET['parent']);
if ($Parent = $this->load($this->Page->parent)) $this->Page->lang = $Parent->lang;
}
}
if ($this->Page->lang) $this->lang = $this->Page->lang;
$this->Page->open();
$this->openDates();
}
route()
$Main->route($Request);
Обработка HTTP-запроса
Параметры:
Имя | Описание |
---|---|
$Request |
|
Возвращает: true
Всегда возвращает
true
, поэтому данная обработка всегда выполняется последней.
Смотрите описание $App->route()
function route($Request) {
$this->App()->init(true);
$html = $this->Display()->html();
if ($html !== true) print $html;
return true;
}
openDates()
$Main->openDates();
Загрузка системных дат
Смотрите описание $Main->formatDate()
function openDates() {
if ($this->lang == "ru") {
$this->date_weekdays = array( "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" );
$this->date_weekdays_lc = array( "воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье" );
$this->date_weekdays_brief = array( "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс" );
$this->date_months_of = array( "", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря" );
$this->date_months = array( "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" );
} else {
$this->date_weekdays = array( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" );
$this->date_weekdays_lc = array( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" );
$this->date_weekdays_brief = array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" );
$this->date_months_of = array( "", "of January", "of February", "of March", "of April", "of May", "of June", "of July", "of August", "of September", "of October", "of November", "of December" );
$this->date_months = array( "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" );
}
}
formatDate()
$Main->formatDate($format, $time);
Форматирование даты и времени
Параметры:
Имя | Описание |
---|---|
$format |
формат; соответствует формату функции date() |
$time |
время; соответствует первому параметру функции или результату вызова функции strtotime() |
Возвращает: string
дата в заданном формате
Примеры:
print $Main->formatDate('j M Y H:i', '2011-11-11 11:11:11');
function formatDate($format, $time) {
if (($x = intval($time)) && $x > 10 && $x < 1000000) $time = @strtotime($time);
if ($time === false || $time === null) return null;
if (strspn($format, " -./djNSwzWmntLoYyaABgGhHisueIOPTZcrU") == strlen($format)) return date($format, $time);
$r = "";
for ($i = 0; $i < strlen($format); $i ++) {
$c = $format[$i];
switch ($c) {
case "l":
$r .= $this->date_weekdays[(int) date("w", $time)];
break;
case "D":
$r .= $this->date_weekdays_brief[(int) date("w", $time)];
break;
case "F":
$r .= $this->date_months[(int) date("n", $time)];
break;
case "M":
$r .= $this->date_months_of[(int) date("n", $time)];
break;
default:
$r .= date($c, $time);
break;
}
}
return $r;
}
formatSize()
$Main->formatSize($size);
Форматирование объема данных
Параметры:
Имя | Описание |
---|---|
$size |
|
Возвращает: string
Примеры:
print $Main->formatSize(1000000);
function formatSize($size) {
if ($size < 1024) return $size . 'Б';
if ($size < 1024 * 1024) return number_format($size / 1024, 1, ',', '') . 'КБ';
return number_format($size / 1024 / 1024, 1, ',', '') . 'МБ';
}
formatPrice()
$Main->formatPrice($price, $digit=2);
Форматирование цены
Параметры:
Имя | Описание |
---|---|
$price |
|
$digit |
|
Возвращает: string
print $Main->formatPrice($price);
function formatPrice($price, $digit = 2) {
return str_replace(' ', ' ', number_format($price, $digit, ',', ' '));
}
formatPrice2()
$Main->formatPrice2($price);
Форматирование цены без обязательной дробной части
Параметры:
Имя | Описание |
---|---|
$price |
|
Возвращает: string
print $Main->formatPrice2($price);
function formatPrice2($price) {
return str_replace(' ', ' ', number_format(doubleval($price), (($price - floor($price)) > 0) ? 2 : 0, ',', ' '));
}
getVideo()
$Main->getVideo($video);
Получение ссылки на видео для размещения в коде страницы
Параметры:
Имя | Описание |
---|---|
$video |
|
Возвращает: string
ссылка на видео;
null
В настоящее время поддерживается только формат YouTube
Примеры:
if ($video = $Main->getVideo($Page->info['video'])) print '<iframe src="' . $video . '" frameborder="0"></iframe>';
function getVideo($video) {
if (!strlen($video)) return;
if (strpos($video, "youtu") !== false) {
$v = null;
if (preg_match("~\\bv=([-_a-zA-Z0-9]+)~", $video, $m)) $v = $m[1];
elseif (preg_match("~([-_a-zA-Z0-9]+)$~", $video, $m)) $v = $m[1];
if (isset($v)) return "https://www.youtube.com/embed/$v";
}
}
getTemplate()
$Main->getTemplate($prefix, $template=null);
Получение пути к файлу шаблона
Параметры:
Имя | Описание |
---|---|
$prefix |
|
$template |
|
Возвращает: string
путь к шаблону
Примеры:
$file = $Main->getTemplate('print');
$file = $Main->getTemplate('simple', 'news');
function getTemplate($prefix, $template = null) {
if (!isset($template)) return "cms/html/template.$prefix.php";
else return "cms/html/$prefix.$template.php";
}
getDefaultN()
$Main->getDefaultN();
Уникальное значение счетчика начиная с 1000.
Возвращает: int
Как правило, счетчик используется для генерации уникальных ID страниц. Текущее значение счетчика хранится в файле
cms/n.php
Примеры:
$Item->id = $Main->getDefaultN();
function getDefaultN() {
$root = $this->root();
$file = $root . '/cms/n.php';
if (!file_exists($file)) @touch($file);
if ($F = @fopen($file, 'r+')) {
flock($F, LOCK_EX);
$old = fgets($F);
$new = intval($old) > 1000 ? intval($old) + 1 : 1001;
fseek($F, 0);
fwrite($F, $new);
ftruncate($F, strlen($new));
fclose($F);
return $new;
} else {
return 1001;
}
}
getDefaultUuid()
$Main->getDefaultUuid();
Уникальное значение UUID.
Возвращает: string
function getDefaultUuid() {
$data = \random_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
getCount()
$Main->getCount($r, $form=null);
Форматирование количества элементов
Параметры:
Имя | Описание |
---|---|
$r |
|
$form |
|
Возвращает: string
Используется для отображения, например, количества товаров в корзине. При этом учитывается падеж слова. Например: 1 товар, 2 товара, 9 товаров
Примеры:
print $Main->getCount(1, array( 'элемент', 'элемент', 'элемента' ));
print $Main->getCount(1000, array( 'элемент', 'элемент', 'элемента' ));
function getCount($r, $form = null) {
if (!$form) return;
if (!$r) $r = "0 $form[0]";
elseif ($r % 100 >= 10 && $r % 100 <= 20) $r = "$r $form[0]";
elseif ($r % 10 == 0) $r = "$r $form[0]";
elseif ($r % 10 == 1) $r = "$r $form[1]";
elseif ($r % 10 <= 4) $r = "$r $form[2]";
else $r = "$r $form[0]";
return $r;
}
getSiteMap()
$Main->getSiteMap($parent='', $query=null, $limit=10);
Список страниц сайта. С сортировкой по разделам и с информацией о глубине вложенности страниц
Параметры:
Имя | Описание |
---|---|
$parent |
|
$query |
|
$limit |
|
Возвращает: array
– список массивов со свойствами страниц:
$row
function getSiteMap($parent = '', $query = null, $limit = 10) {
$Data = $this->Data();
if (!isset($query)) {
if ($this->Page->type === 'sitemap') {
$query = "SELECT * FROM `item` WHERE `menu`='Y' AND `id`<>'admin' AND `parent`<>'admin' ORDER BY `order`";
} else {
$query = "SELECT * FROM `item` ORDER BY `order`";
}
}
$list = array();
if (is_array($query)) $rows = $query;
else $rows = $Data->getRows($query);
if (!strlen($parent)) {
$found = false;
foreach ($rows as $row) if ($row['parent'] == "") {
$found = true;
break;
}
if (!$found) $rows[] = array( "id" => "-" );
}
foreach ($rows as $row) if ($row['parent'] == $parent) {
$row['level'] = 0;
$list[$row['id']] = $row;
$this->getSiteMapX($row['id'], 1, $limit, $list, $rows);
}
return $list;
}
getSiteMapX()
$Main->getSiteMapX($parent, $level, $limit, &$list, &$rows);
Сортировка списка страниц и добавление информации об уровне вложенности
Параметры:
Имя | Описание |
---|---|
$parent |
|
$level |
|
$limit |
|
$list |
|
$rows |
|
Возвращает: null
Смотрите описание $Main->getSiteMap()
function getSiteMapX($parent, $level, $limit, &$list, &$rows) {
$a = array();
foreach ($rows as $row) if ($row['parent'] == $parent) $a[] = $row;
foreach ($a as $row) {
$row['level'] = $level;
$list[$row['id']] = $row;
if ($level < $limit) $this->getSiteMapX($row['id'], $level + 1, $limit, $list, $rows);
}
}
can()
$Main->can($action, $Page);
Проверка прав доступа пользователя к странице
Параметры:
Имя | Описание |
---|---|
$action |
|
$Page |
|
Возвращает: boolean
;
true
– пользователь имеет права доступа;
false
– не имеет
Примеры:
if ($Main->can('edit', $Page)) $Page->save();
if ($Main->can('delete', $Page)) $Page->delete();
function can($action, $Page) {
static $can = array();
$Auth = $this->Auth();
if ($Auth->admin) return true;
if (!strlen($Page->id) && strlen($Page->parent)) if ($Parent = $this->load($Page->parent)) $Page = $Parent;
$r = $can[$Page->id][$action];
if (isset($r)) return $r;
$login = $Auth->login;
if (strlen($Auth->group)) $group = explode("|", $Auth->group);
else $group = array();
if ($Auth->login && ($Auth->login == $Page->login || $Auth->login == $Page->id)) $group[] = "author";
return $can[$Page->id][$action] = $this->checkAcl($Page->id, $action, $login, $group);
}
canDebug()
$Main->canDebug($action, $Page);
Проверка прав доступа пользователя к странице. С выводом отладочной информации
Параметры:
Имя | Описание |
---|---|
$action |
|
$Page |
|
Возвращает: boolean
;
true
– пользователь имеет права доступа;
false
– не имеет
Функция эквивалентна
$Main->can()
со следующими отличиями:
- Результаты проверки прав доступа не кэшируются
- Допускается использование подключение кода отладки с помощью функции
$Main->checkAclDebug()
function canDebug($action, $Page) {
$Auth = $this->Auth();
if ($Auth->admin) return true;
if (!strlen($Page->id) && strlen($Page->parent)) if ($Parent = $this->load($Page->parent)) $Page = $Parent;
$login = $Auth->login;
if (strlen($Auth->group)) $group = explode("|", $Auth->group);
else $group = array();
if ($Auth->login && ($Auth->login == $Page->login || $Auth->login == $Page->id)) $group[] = "author";
return $this->checkAclDebug($Page->id, $action, $login, $group);
}
addAcl()
$Main->addAcl($id, $acls);
Добавление правила доступа пользователя к странице
Параметры:
Имя | Описание |
---|---|
$id |
|
$acls |
|
Смотрите описание Проверка прав доступа
Примеры:
$Main->addAcl('-', array(
'allow-view-login' => '*',
));
$Main->addAcl('-', null);
function addAcl($id, $acls) {
if (is_array($acls)) {
foreach ($acls as $key => $value) {
if (strlen($value)) {
if (strlen($this->default_acl[$id][$key])) $this->default_acl[$id][$key] .= "|" . $value;
else $this->default_acl[$id][$key] = $value;
} else {
unset($this->default_acl[$id][$key]);
}
}
} else {
unset($this->default_acl[$id]);
}
}
checkAcl()
$Main->checkAcl($id, $action=' *', $login=null, $group=array());
Проверка прав доступа для указанного логина и списка групп пользователя к странице
Параметры:
Имя | Описание |
---|---|
$id |
|
$action |
|
$login |
|
$group |
|
Возвращает: boolean
;
true
– пользователь имеет права доступа;
false
– не имеет
Смотрите описание $Main->can()
function checkAcl($id, $action = '*', $login = null, $group = array()) {
if (!isset($this->acl[$id])) {
$this->acl[$id] = array();
$Data = $this->Data();
if ($acl = $this->default_acl[$id]) foreach ($acl as $key => $value) {
list($_allow_deny, $_action, $_login_group) = explode("-", $key);
foreach (explode("|", $value) as $value) {
$this->acl[$id][$_allow_deny][$_action][$_login_group][$value] = $value;
}
}
if (strlen($id)) foreach ($Data->getRows("SELECT * FROM `info` WHERE `id`=" . $Data->quote($id) . " AND `key` LIKE 'acl-%'") as $row) {
list($acl, $_allow_deny, $_action, $_login_group) = explode("-", $row['key']);
$this->acl[$id][$_allow_deny][$_action][$_login_group][$row['value']] = $row['value'];
}
}
$acl = $this->acl[$id];
if ($login) {
# deny - $action - login -> $login
if ($a = $acl['deny'][$action]['login']) if (in_array($login, $a)) return false;
# allow - $action - login -> $login
if ($a = $acl['allow'][$action]['login']) if (in_array($login, $a)) return true;
# deny - * - login -> $login
if ($a = $acl['deny']['*']['login']) if (in_array($login, $a)) return false;
# allow - * - login -> $login
if ($a = $acl['allow']['*']['login']) if (in_array($login, $a)) return true;
}
if ($group) {
# deny - $action - group -> $group
if ($a = $acl['deny'][$action]['group']) if (array_intersect($group, $a)) return false;
# allow - $action - group -> $group
if ($a = $acl['allow'][$action]['group']) if (array_intersect($group, $a)) return true;
# deny - * - group -> $group
if ($a = $acl['deny']['*']['group']) if (array_intersect($group, $a)) return false;
# allow - * - group -> $group
if ($a = $acl['allow']['*']['group']) if (array_intersect($group, $a)) return true;
}
if (true) {
# deny - $action - login -> *
if ($a = $acl['deny'][$action]['login']) if (in_array("*", $a)) return false;
# allow - $action - login -> *
if ($a = $acl['allow'][$action]['login']) if (in_array("*", $a)) return true;
# deny - * - login -> *
if ($a = $acl['deny']['*']['login']) if (in_array("*", $a)) return false;
# allow - * - login -> *
if ($a = $acl['allow']['*']['login']) if (in_array("*", $a)) return true;
}
if (true) {
# deny - $action - group -> *
if ($a = $acl['deny'][$action]['group']) if (in_array("*", $a)) return false;
# allow - $action - group -> *
if ($a = $acl['allow'][$action]['group']) if (in_array("*", $a)) return true;
# deny - * - group -> *
if ($a = $acl['deny']['*']['group']) if (in_array("*", $a)) return false;
# allow - * - group -> *
if ($a = $acl['allow']['*']['group']) if (in_array("*", $a)) return true;
}
if ($Page = $this->load($id)) {
if (strlen($Page->parent)) return $this->checkAcl($Page->parent, $action, $login, $group);
}
return false;
}
checkAclDebug()
$Main->checkAclDebug($id, $action="*", $login=null, $group=array());
Проверка прав доступа для указанного логина и списка групп пользователя к странице. С выводом отладочной информации
Параметры:
Имя | Описание |
---|---|
$id |
|
$action |
|
$login |
|
$group |
|
Возвращает: boolean
;
true
– пользователь имеет права доступа;
false
– не имеет
Смотрите описание $Main->canDebug()
function checkAclDebug($id, $action = "*", $login = null, $group = array()) {
print "check: id = $id, action = $action, login = " . var_export($login, true) . ", group = " . var_export($group, true) . "<br>\n";
if (!isset($this->acl[$id])) {
$this->acl[$id] = array();
$Data = $this->Data();
if ($acl = $this->default_acl[$id]) foreach ($acl as $key => $value) {
list($_allow_deny, $_action, $_login_group) = explode("-", $key);
foreach (explode("|", $value) as $value) {
$this->acl[$id][$_allow_deny][$_action][$_login_group][$value] = $value;
}
}
if (strlen($id)) foreach ($Data->getRows("SELECT * FROM `info` WHERE `id`=" . $Data->quote($id) . " AND `key` LIKE 'acl-%'") as $row) {
list($acl, $_allow_deny, $_action, $_login_group) = explode("-", $row['key']);
$this->acl[$id][$_allow_deny][$_action][$_login_group][$row['value']] = $row['value'];
}
}
$acl = $this->acl[$id];
print "acl: " . var_export($acl, true) . "\n";
if ($login) {
# deny - action - login
if ($a = $acl['deny'][$action]['login']) if (in_array($login, $a)) return false;
# allow - action - login
if ($a = $acl['allow'][$action]['login']) if (in_array($login, $a)) return true;
# deny - * - login
if ($a = $acl['deny']['*']['login']) if (in_array($login, $a)) return false;
# allow - * - login
if ($a = $acl['allow']['*']['login']) if (in_array($login, $a)) return true;
}
if ($group) {
# deny - action - group
if ($a = $acl['deny'][$action]['group']) if (array_intersect($group, $a)) return false;
# allow - action - group
if ($a = $acl['allow'][$action]['group']) if (array_intersect($group, $a)) return true;
# deny - * - group
if ($a = $acl['deny']['*']['group']) if (array_intersect($group, $a)) return false;
# allow - * - group
if ($a = $acl['allow']['*']['group']) if (array_intersect($group, $a)) return true;
}
if (true) {
# deny - action - *
if ($a = $acl['deny'][$action]['login']) if (in_array("*", $a)) return false;
# allow - action - *
if ($a = $acl['allow'][$action]['login']) if (in_array("*", $a)) return true;
# deny - * - *
if ($a = $acl['deny']['*']['login']) if (in_array("*", $a)) return false;
# allow - * - *
if ($a = $acl['allow']['*']['login']) if (in_array("*", $a)) return true;
}
if (true) {
# deny - action - *
if ($a = $acl['deny'][$action]['group']) if (in_array("*", $a)) return false;
# allow - action - *
if ($a = $acl['allow'][$action]['group']) if (in_array("*", $a)) return true;
# deny - * - *
if ($a = $acl['deny']['*']['group']) if (in_array("*", $a)) return false;
# allow - * - *
if ($a = $acl['allow']['*']['group']) if (in_array("*", $a)) return true;
}
if ($Page = $this->load($id)) {
if (strlen($Page->parent)) return $this->checkAclDebug($Page->parent, $action, $login, $group);
}
return false;
}
ru2en()
$Main->ru2en($string);
Транслитерация строки на английский для использования в ссылках
Параметры:
Имя | Описание |
---|---|
$string |
|
Возвращает: string
Русские буквы заменяются на английские аналоги. Сочетания остальных символов – на
-
. Начальные и конечные символы
-
отбрасываются. Результат возвращается в нижнем регистре.
Примеры:
$id = $Main->ru2en('Новая страница');
function ru2en($string) {
static $translit = array(
/* */"-", /*Ѓ*/"G", /*‚*/"-", /*ѓ*/"g", /*„*/"-", /*…*/"-", /*†*/"-", /*‡*/"-",
/*€*/"E", /*‰*/"-", /*Љ*/"L", /*‹*/"-", /*Њ*/"H", /*Ќ*/"K", /*Ћ*/"K", /*Џ*/"TS",
/*ђ*/"h", /*‘*/"-", /*’*/"-", /*“*/"-", /*”*/"-", /*•*/"-", /*–*/"-", /*—*/"-",
/*?*/"-", /*™*/"-tm-", /*љ*/"-", /*›*/"-", /*њ*/"x", /*ќ*/"k", /*ћ*/"h", /*џ*/"ts",
/* */"-", /*Ў*/"y", /*ў*/"y", /*Ј*/"J", /*¤*/"o", /*Ґ*/"G", /*¦*/"-", /*§*/"P",
/*Ё*/"E", /*©*/"-c-", /*Є*/"E", /*«*/"-", /*¬*/"-", /* */"-", /*®*/"-R-", /*Ї*/"I",
/*°*/"o", /*±*/"-", /*І*/"I", /*і*/"i", /*ґ*/"g", /*µ*/"m", /*¶*/"-", /*·*/"-",
/*ё*/"e", /*№*/"N", /*є*/"e", /*»*/"-", /*ј*/"j", /*Ѕ*/"S", /*ѕ*/"s", /*ї*/"i",
/*А*/"A", /*Б*/"B", /*В*/"V", /*Г*/"G", /*Д*/"D", /*Е*/"E", /*Ж*/"ZH", /*З*/"Z",
/*И*/"I", /*Й*/"Y", /*К*/"K", /*Л*/"L", /*М*/"M", /*Н*/"N", /*О*/"O", /*П*/"P",
/*Р*/"R", /*С*/"S", /*Т*/"T", /*У*/"U", /*Ф*/"F", /*Х*/"H", /*Ц*/"TS", /*Ч*/"CH",
/*Ш*/"SH", /*Щ*/"SCH", /*Ъ*/"", /*Ы*/"Y", /*Ь*/"", /*Э*/"E", /*Ю*/"YU", /*Я*/"YA",
/*а*/"a", /*б*/"b", /*в*/"v", /*г*/"g", /*д*/"d", /*е*/"e", /*ж*/"zh", /*з*/"z",
/*и*/"i", /*й*/"y", /*к*/"k", /*л*/"l", /*м*/"m", /*н*/"n", /*о*/"o", /*п*/"p",
/*р*/"r", /*с*/"s", /*т*/"t", /*у*/"u", /*ф*/"f", /*х*/"h", /*ц*/"ts", /*ч*/"ch",
/*ш*/"sh", /*щ*/"sch", /*ъ*/"", /*ы*/"y", /*ь*/"", /*э*/"e", /*ю*/"yu", /*я*/"ya",
);
$return = "";
$string1251 = mb_convert_encoding(trim($string), "cp1251", "UTF-8");
if ($string1251 != $string) {
$length = strlen($string1251);
for ($i = 0; $i < $length; $i ++) {
$c = $string1251[$i];
$n = ord($c);
if ($n >= 128) $c = $translit[$n - 128];
$return .= $c;
}
} else {
$return = $string;
}
$return = preg_replace("~[^-a-zA-Z0-9]+~", "-", $return);
$return = preg_replace("~--+~", "-", $return);
$return = trim($return, "-");
$return = strtolower($return);
return $return;
}
getPager()
$Main->getPager(&$result, $limit=null);
Получение списка постраничной разбивки
Параметры:
Имя | Описание |
---|---|
$result |
|
$limit |
|
Возвращает: array
– массив ссылок на страницы
Смотрите описание $Main->displayPager()
; $Display->pager()
function getPager(&$result, $limit = null) {
$r = array();
$Data = $this->Data();
$query_string = $_SERVER['QUERY_STRING'];
$query_string = preg_replace("'(^|&)page=[^&]*'", "", $query_string);
$query_string = strlen($query_string) ? "?$query_string&" : "?";
$number = $this->pager_count = $Data->numRows($result);
$limit = $this->pager_limit = isset($limit) ? $limit : 10;
$last = $this->pager_pages = ceil($number / $limit);
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
if (!$number) return;
if ($last > 1) {
if ($page == -1) $page = $last;
elseif ($page < 1) $page = 1;
elseif ($page > $last) $page = $last;
$this->pager_page = $page;
if ($page != 1) $r['<'] = array( "href" => "{$query_string}page=" . ($page - 1), "text" => "←" );
$page1 = 1;
$page2 = $last;
if ($page2 - $page1 > 9) {
if ($page < 5) {
$page2 = $page1 + 8;
} elseif ($page > $page2 - 5) {
$page1 = $page2 - 8;
} else {
$page1 = $page - 4;
$page2 = $page + 4;
}
}
if ($page1 != 1) {
$i = 1;
$r[$i] = array( "href" => "{$query_string}page=$i", "text" => "$i" );
if ($page1 > 2) {
$i = $page1 - 1;
$r[$i] = array( "href" => "{$query_string}page=$i", "text" => "..." );
}
}
for ($i = $page1; $i <= $page2; $i ++) {
$r[$i] = array( "href" => "{$query_string}page=$i", "text" => "$i" );
if ($i == $page) $r[$i]['active'] = true;
}
if ($page2 != $last) {
if ($page2 < $last - 1) {
$i = $page2 + 1;
$r[$i] = array( "href" => "{$query_string}page=$i", "text" => "..." );
}
$i = $last;
$r[$i] = array( "href" => "{$query_string}page=$i", "text" => "$i" );
}
if ($page != $last) $r['>'] = array( "href" => "{$query_string}page=" . ($page + 1), "text" => "→" );
$rows = array();
$this->pager_skip = $limit * ($page - 1);
for ($i = 0; $i < $limit * ($page - 1); $i ++) $Data->fetch($result);
for ($i = 0; ($row = $Data->fetch($result)) && $i < $limit; $i ++) $rows[] = $row;
$result = $rows;
}
return $r;
}
changeId()
$Main->changeId($old_id, $new_id);
Изменение ID страницы
Параметры:
Имя | Описание |
---|---|
$old_id |
|
$new_id |
|
Возвращает: true
Смотрите описание $Storage->changeId()
function changeId($old_id, $new_id) {
return $this->Storage()->changeId($old_id, $new_id);
}
openPath()
$Main->openPath();
Получение пути к странице
Возвращает: array
– путь к странице
Смотрите описание $Storage->getPath()
function openPath() {
if ($this->path) return $this->path;
else return $this->path = $this->Storage()->getPath();
}
inPath()
$Main->inPath($id);
Содержится ли страница в пути к текущей странице
Параметры:
Имя | Описание |
---|---|
$id |
|
Возвращает: boolean
;
true
– да;
false
– нет
function inPath($id) {
$this->openPath();
return $id == $this->id || ($id != "-" && isset($this->path[$id]));
}
getHost()
$Main->getHost();
Текущий хост
Возвращает: string
имя хоста
Смотрите описание $Request->getHost()
function getHost() {
return $this->Request()->getHost();
}
getId()
$Main->getId($href=null);
Преобразование ссылки в ID страницы
Параметры:
Имя | Описание |
---|---|
$href |
|
Возвращает: string
ID страницы
Смотрите описание $Request->getId()
function getId($href = null) {
return $this->Request()->getId($href);
}
href()
$Main->href($id=null);
Преобразование ID страницы в ссылку
Параметры:
Имя | Описание |
---|---|
$id |
|
Возвращает: string
ссылка на страницу
Смотрите описание $Request->href()
function href($id = null) {
return $this->Request()->href($id);
}
getHref()
$Main->getHref($id=null);
Преобразование ID страницы в ссылку
Параметры:
Имя | Описание |
---|---|
$id |
|
Возвращает: string
ссылка на страницу
Смотрите описание $Request->href()
function getHref($id = null) {
return $this->Request()->href($id);
}
load()
$Main->load($id, $type=null);
Получение объекта страницы по ID страницы
Параметры:
Имя | Описание |
---|---|
$id |
ID страницы |
$type |
тип страницы |
Возвращает: Cms\Root\Page
– объект страницы;
null
– страница не найдена
Смотрите описание $Storage->load()
function load($id, $type = null) {
return $this->Storage()->load($id, $type);
}
loadSafe()
$Main->loadSafe($id, $type=null);
Получение объекта страницы по ID страницы
Параметры:
Имя | Описание |
---|---|
$id |
ID страницы |
$type |
тип страницы |
Возвращает: Cms\Root\Page
– объект страницы
Смотрите описание $Storage->loadSafe()
function loadSafe($id, $type = null) {
return $this->Storage()->loadSafe($id, $type);
}
create()
$Main->create($type);
Создание нового объекта страницы
Параметры:
Имя | Описание |
---|---|
$type |
тип страницы |
Возвращает: Cms\Root\Page
– объект страницы
Смотрите описание $Storage->create()
function create($type) {
return $this->Storage()->create($type);
}
newObject()
$Main->newObject($type);
Создание нового объекта страницы
Параметры:
Имя | Описание |
---|---|
$type |
тип страницы |
Возвращает: Cms\Root\Page
– объект страницы
Смотрите описание $Storage->create()
function newObject($type) {
return $this->Storage()->create($type);
}
getRow()
$Main->getRow($id, $type=null);
Получение из базы данных массива со свойствами страницы
Параметры:
Имя | Описание |
---|---|
$id |
|
$type |
|
Возвращает: array|null
– массив со свойствами страницы:
"свойство" => "значение"
Смотрите описание $Storage->getRow()
function getRow($id, $type = null) {
return $this->Storage()->getRow($id, $type);
}
addType()
$Main->addType($type, $title);
Добавление нового элемента в список тип страниц
Параметры:
Имя | Описание |
---|---|
$type |
|
$title |
|
Смотрите описание $Modules->addType()
function addType($type, $title) {
return $this->Modules()->addType($type, $title);
}
addSelect()
$Main->addSelect($type, $title);
Добавление нового элемента в список тип страниц
Параметры:
Имя | Описание |
---|---|
$type |
|
$title |
|
Смотрите описание $Modules->addType()
function addSelect($type, $title) {
return $this->Modules()->addType($type, $title);
}
getTypes()
$Main->getTypes();
Получение списка типов страниц
Возвращает: array
– массив типов страниц:
"тип" => "название"
Смотрите описание $Modules->getTypes()
function getTypes() {
return $this->Modules()->getTypes();
}
openType()
$Main->openType($type);
Инициализация модуля
Параметры:
Имя | Описание |
---|---|
$type |
|
Смотрите описание $Modules->initModule()
function openType($type) {
return $this->Modules()->initModule($type);
}
openTypes()
$Main->openTypes();
Инициализация всех модулей
Смотрите описание $Modules->init()
function openTypes() {
return $this->Modules()->init();
}
getModule()
$Main->getModule($type);
Получение модуля
Параметры:
Имя | Описание |
---|---|
$type |
|
function getModule($type) {
return $this->Modules()->getModule($type);
}
isModule()
$Main->isModule($type);
Загружен ли указанный модуль
Параметры:
Имя | Описание |
---|---|
$type |
|
Возвращает: boolean
;
true
– да;
false
– нет
Смотрите описание $Modules->isModule()
function isModule($type) {
return $this->Modules()->isModule($type);
}
module()
$Main->module($type);
Загружен ли указанный модуль
Параметры:
Имя | Описание |
---|---|
$type |
|
Возвращает: boolean
true
– да;
false
– нет
Смотрите описание $Modules->isModule()
function module($type) {
return $this->Modules()->isModule($type);
}
displayGroup()
$Main->displayGroup($group);
Отображение названия группы пользователей
Параметры:
Имя | Описание |
---|---|
$group |
|
Возвращает: string
Смотрите описание $Display->group()
function displayGroup($group) {
return $this->Display()->group($group);
}
displayImage()
$Main->displayImage($src, $transform=null, $width=0, $height=0, $alt=null, $class=null, $style=null);
Отображение картинки
Параметры:
Имя | Описание |
---|---|
$src |
|
$transform |
|
$width |
|
$height |
|
$alt |
|
$class |
|
$style |
|
Возвращает: string
HTML
Смотрите описание $Display->image()
function displayImage($src, $transform = null, $width = 0, $height = 0, $alt = null, $class = null, $style = null) {
return $this->Display()->image(array(
'src' => $src,
'transform' => $transform,
'width' => $width,
'height' => $height,
'alt' => $alt,
'class' => $class,
'style' => $style,
));
}
watermark()
$Main->watermark($src, $param=array());
Ссылка на изображение с добавленным водным знаком
Параметры:
Имя | Описание |
---|---|
$src |
|
$param |
|
Возвращает: string
ссылка на изображение
Смотрите описание $Display->watermark()
function watermark($src, $param = array()) {
return $this->Display()->watermark($src, $param);
}
displayTitle()
$Main->displayTitle();
Отображение содержимого тэга
title
Возвращает: string
HTML
Смотрите описание $Display->title()
function displayTitle() {
return $this->Display()->title();
}
displayH1()
$Main->displayH1();
Отображение содержимого тэга
h1
Возвращает: string
HTML
Смотрите описание $Display->pageH1()
function displayH1() {
return $this->Display()->pageH1();
}
displayPath()
$Main->displayPath();
Отображение пути к странице
Возвращает: string
HTML
Смотрите описание $Display->pagePath()
function displayPath() {
return $this->Display()->pagePath();
}
displayScript()
$Main->displayScript();
Отображение скриптов и таблиц стилей
Возвращает: string
HTML
Смотрите описание $Display->script()
function displayScript() {
return $this->Display()->script();
}
addScript()
$Main->addScript($script);
Добавление скриптов или стилей
Параметры:
Имя | Описание |
---|---|
$script |
|
Возвращает: null
Смотрите описание $Display->addScript()
function addScript($script) {
return $this->Display()->addScript($script);
}
displayPage()
$Main->displayPage();
Отображение содержимого страницы
Возвращает: string
HTML
Смотрите описание $Display->page()
function displayPage() {
return $this->Display()->page();
}
displayDetail()
$Main->displayDetail($Page=null);
Отображение страницы в соответствии с детальным шаблоном
Возвращает: string
HTML
Смотрите описание $Display->detail()
function displayDetail($Page = null) {
return $this->Display()->detail($Page);
}
displayPanel()
$Main->displayPanel($panel=null);
Отображение панели администрирования
Параметры:
Имя | Описание |
---|---|
$panel |
|
Возвращает: string
HTML
Смотрите описание $Display->panel()
; $Display->pagePanel()
function displayPanel($panel = null) {
if (isset($panel)) return $this->Display()->panel($panel);
else return $this->Display()->pagePanel();
}
displayBlock()
$Main->displayBlock(&$Page, $block, $param=null);
Отображение списка вложенных страниц
Параметры:
Имя | Описание |
---|---|
$Page |
|
$block |
|
$param |
|
Возвращает: string
HTML
Смотрите описание $Display->block()
function displayBlock(&$Page, $block, $param = null) {
return $this->Display()->block($Page, $block, $param);
}
displayPager()
$Main->displayPager(&$result, $limit=null);
Отображение постраничной разбивки
Параметры:
Имя | Описание |
---|---|
$result |
|
$limit |
|
Возвращает: string
HTML
Смотрите описание $Display->pager()
function displayPager(&$result, $limit = null) {
return $this->Display()->pager($result, $limit);
}
displayPageMenu()
$Main->displayPageMenu();
Отображение списка вложенных страниц в виде меню
Возвращает: string
HTML
Смотрите описание $Display->pageMenu()
function displayPageMenu() {
return $this->Display()->pageMenu();
}
addTable()
$Main->addTable($table, $fields);
Добавление таблицы для загрузки данных из нее
Параметры:
Имя | Описание |
---|---|
$table |
|
$fields |
|
Смотрите описание $Storage->addTable()
function addTable($table, $fields) {
return $this->Storage()->addTable($table, $fields);
}
addDefault()
$Main->addDefault($id, $row);
Добавление данных о странице по умолчанию
Параметры:
Имя | Описание |
---|---|
$id |
|
$row |
|
Смотрите описание $Storage->addDefault()
function addDefault($id, $row) {
return $this->Storage()->addDefault($id, $row);
}
getPageMenu()
$Main->getPageMenu($id=null);
Получение списка вложенных страниц для отображения в качестве меню
Параметры:
Имя | Описание |
---|---|
$id |
|
Возвращает: array
– список свойств страниц:
$row
Смотрите описание $Storage->getPageMenu()
function getPageMenu($id = null) {
return $this->Storage()->getPageMenu($id);
}
getPath()
$Main->getPath();
Получение пути к странице
Возвращает: array
путь к странице:
"ID" => "Название"
Смотрите описание $Storage->getPath()
function getPath() {
return $this->Storage()->getPath();
}
displayError()
$Main->displayError($error=null);
Отображение ошибок
Параметры:
Имя | Описание |
---|---|
$error |
Список ошибок |
Возвращает: string
HTML
Смотрите описание $Display->error()
function displayError($error = null) {
if (func_num_args()) return $this->Display()->error($error);
else return $this->Display()->error();
}
header()
$Main->header($header);
Добавление HTTP-заголовка
Параметры:
Имя | Описание |
---|---|
$header |
|
Возвращает: null
Смотрите описание $Request->addHeader()
function header($header) {
return $this->Request()->addHeader($header);
}
displayMenu()
$Main->displayMenu($menu, $level=0, $style=null, $query=null);
Отображение меню
Параметры:
Имя | Описание |
---|---|
$menu |
меню |
$level |
уровень вложенности |
$style |
стиль меню |
$query |
SQL-запрос |
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayMenu($menu, $level = 0, $style = null, $query = null) {
return $this->Display->menu(array(
'menu' => $menu,
'level' => $level,
'style' => $style,
'query' => $query,
'rows' => $this->Conf()->get('menu-' . $menu),
));
}
getTitle()
$Main->getTitle($id=null, $type=null);
Получение заголовка страницы
Параметры:
Имя | Описание |
---|---|
$id |
|
$type |
|
Возвращает: string
заголовок страницы
Смотрите описание $Storage->getTitle()
function getTitle($id = null, $type = null) {
return $this->Storage()->getTitle($id, $type);
}
getList()
$Main->getList($id, $key);
Получение свойства страницы в виде списка
Параметры:
Имя | Описание |
---|---|
$id |
|
$key |
|
Возвращает: array
список
Смотрите описание $Storage->getList()
function getList($id, $key) {
return $this->Storage()->getList($id, $key);
}
redirect()
$Main->redirect($location, $status=null);
Перенаправление на другую страницу
Параметры:
Имя | Описание |
---|---|
$location |
|
$status |
|
Смотрите описание $Request->redirect()
function redirect($location, $status = null) {
return $this->Request()->redirect($location, $status);
}
isUnique()
$Main->isUnique($id);
Является ли ID страницы уникальным
Параметры:
Имя | Описание |
---|---|
$id |
|
Возвращает: boolean
;
true
– да;
false
– нет
Смотрите описание $Storage->isUnique()
function isUnique($id) {
return $this->Storage()->isUnique($id);
}
displayMenuLeft()
$Main->displayMenuLeft($level=0, $style=null, $query=null);
Отображение меню слева
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayMenuLeft($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
'menu' => 'left',
'level' => $level,
'style' => $style,
'query' => $query,
'rows' => $this->Conf()->get('menu-left'),
));
}
displayLeftMenu()
$Main->displayLeftMenu($level=0, $style=null, $query=null);
Отображение меню слева
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayLeftMenu($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
'menu' => 'left',
'level' => $level,
'style' => $style,
'query' => $query,
'rows' => $this->Conf()->get('menu-left'),
));
}
displayMenuHead()
$Main->displayMenuHead($level=0, $style=null, $query=null);
Отображение меню сверху
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayMenuHead($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "head",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-head"),
));
}
displayHeadMenu()
$Main->displayHeadMenu($level=0, $style=null, $query=null);
Отображение меню сверху
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayHeadMenu($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "head",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-head"),
));
}
displayMenuFoot()
$Main->displayMenuFoot($level=0, $style=null, $query=null);
Отображение меню снизу
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayMenuFoot($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "foot",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-foot"),
));
}
displayFootMenu()
$Main->displayFootMenu($level=0, $style=null, $query=null);
Отображение меню снизу
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayFootMenu($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "foot",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-foot"),
));
}
displayMenuInfo()
$Main->displayMenuInfo($level=0, $style=null, $query=null);
Отображение меню справа
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayMenuInfo($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "info",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-info"),
));
}
displayInfoMenu()
$Main->displayInfoMenu($level=0, $style=null, $query=null);
Отображение меню справа
Параметры:
Имя | Описание |
---|---|
$level |
|
$style |
|
$query |
|
Возвращает: string
HTML
Смотрите описание $Display->menu()
function displayInfoMenu($level = 0, $style = null, $query = null) {
return $this->Display()->menu(array(
"menu" => "info",
"level" => $level,
"style" => $style,
"query" => $query,
"rows" => $this->Conf()->get("menu-info"),
));
}
getDefaultId()
$Main->getDefaultId($Page);
Генерация ID страницы по умолчанию
Параметры:
Имя | Описание |
---|---|
$Page |
|
Возвращает: string
ID страницы
Данная функция анализирует следующую информацию:
- ID страницы:
$Page->id
- Заголовок страницы:
$Page->title
- ID родительского раздела:
$Page->parent
- ID родительского раздела из HTTP-запроса:
$_REQUEST[parent]
- Язык страницы:
$Page->lang
Из этих данных создается уникальный ID страницы
Примеры:
if (!strlen($Page->id)) $Page->id = $Main->getDefaultId($Page);
function getDefaultId($Page) {
$Data = $this->Data();
$Main = $this->Main();
if (strlen($Page->id)) return $Page->id;
if (strlen($Page->default_id)) {
$id = $Page->default_id;
if ($a = parse_url($id)) if ($a['path']) {
$id = $a['path'];
if (substr($id, -5) === '.html') $id = substr($id, 0, -5);
}
$id = rtrim(preg_replace("~//+~", "/", $id), "/");
if ($id[0] == "/") if (preg_match("~^/[-/a-z0-9]+$~", $id)) {
if (strpos(substr($id, 1), "/") === false) $id = ltrim($id, "/");
if ($Main->isUnique($id)) return $id;
}
} elseif (strlen($Page->title)) {
$id = $Page->title;
} else {
$id = $Main->getDefaultN();
}
if (strlen($Page->parent) && $Page->parent != "-") {
$parent = trim($Page->parent, "/");
} elseif (strlen($_REQUEST['parent']) && $_REQUEST['parent'] != "-") {
$parent = trim($_REQUEST['parent'], "/");
} else {
$parent = "";
}
$id = strtr($Main->ru2en($id), "/.", "--");
$id = trim(preg_replace("~--+~", "-", $id), "-");
$words = 9;
if (substr_count($id, "-") > $words - 1) $id = preg_replace("~^([^-]+" . str_repeat("-[^-]+", $words - 1) . ").*$~", "\$1", $id);
if (strlen($id) > 250) {
$id = substr($id, 0, 250);
$id = preg_replace("~-[^-]*$~", "", $id);
} elseif (!strlen($id)) {
$id = $Main->getDefaultN();
}
if (strlen($parent)) $id = "/$parent/$id";
if (strlen($Page->lang) && $Page->lang != $Main->default_lang && substr($id, 0, 4) != "/{$Page->lang}/") $id = "/{$Page->lang}/" . trim($id, "/");
$id = rtrim(preg_replace("~//+~", "/", $id), "/");
if (strpos(substr($id, 1), "/") === false) $id = ltrim($id, "/");
if ($Main->isUnique($id)) return $id;
if (preg_match("~-(\d+)$~", $id, $m)) {
$n = intval($m[1]);
$b = substr($id, 0, strlen($id) - strlen($m[0]));
} else {
$b = $id;
$n = 0;
}
$j = 0;
while ((++ $j) < 1000) {
$n ++;
$id = "$b-$n";
if ($Main->isUnique($id)) return $id;
}
return $Main->getDefaultN();
}
callTemplate()
$Main->callTemplate($prefix, $template=null, $Page=null, $param=null);
Вызов файла с шаблоном
Параметры:
Имя | Описание |
---|---|
$prefix |
префикс для шаблона |
$template |
имя шаблона |
$Page |
страница |
$param |
|
Возвращает: string
HTML
Смотрите описание $Display->callTemplate()
function callTemplate($prefix, $template = null, $Page = null, $param = null) {
return $this->Display()->callTemplate($prefix, $template, $Page, $param);
}
translate()
$Main->translate($text);
Перевод текста на другой язык
Параметры:
Имя | Описание |
---|---|
$text |
|
Возвращает: string
перевод текста
По умолчанию: перевод не осуществляется. Возвращается оригинальная строка
function translate($text) {
return $text;
}
addCanonicalTitle()
$Main->addCanonicalTitle($key, $value, $title);
Добавление параметра в каноническую ссылку на страницу и фрагмента в заголовок страницы
Параметры:
Имя | Описание |
---|---|
$key |
|
$value |
|
$title |
|
Смотрите описание $Request->addCanonicalParam()
; $Display->addTitleFragment()
Примеры:
$Main->addCanonicalTitle('page', '2', 'Страница 2');
function addCanonicalTitle($key, $value, $title) {
$this->Request()->addCanonicalParam($key, $value);
$this->Display()->addTitleFragment($title, $key);
}
sortArray()
$Main->sortArray(&$list, $by, $desc=false);
Сортировка списка массивов или объектов по одному из элементов или свойтсв
Параметры:
Имя | Описание |
---|---|
$list |
|
$by |
|
$desc |
|
Примеры:
$list = array();
$list[] = array( 'key' => 1 );
$list[] = array( 'key' => 2 );
$Main->sortArray($list, 'key');
$list = $Data->getRows("SELECT * FROM `item`");
$Main->sortArray($list, 'order', true);
function sortArray(&$list, $by, $desc = false) {
$this->_sort_array_by = $by;
$this->_sort_array_desc = $desc;
uasort($list, array($this, "sortArrayCmp"));
}
sortArrayCmp()
$Main->sortArrayCmp($a1, $a2);
Сравнение двух массивов или объектов по одному из элементов или свойств
Параметры:
Имя | Описание |
---|---|
$a1 |
|
$a2 |
|
Возвращает: int
eger
0
– одинаковые элементы или свойства;
1
– элемент или свойство первого больше при сортировке по возрастанию;
-1
– элемент или свойство второго больше при сортировке по возрастанию
Смотрите описание $Main->sortArray()
function sortArrayCmp($a1, $a2) {
$by = $this->_sort_array_by;
$desc = $this->_sort_array_desc;
$v1 = is_object($a1) ? $a1->$by : $a1[$by];
$v2 = is_object($a2) ? $a2->$by : $a2[$by];
if ($v1 == $v2) return 0;
if ($v1 < $v2) return $desc ? 1 : -1;
if ($v1 > $v2) return $desc ? -1 : 1;
}
fastLoad()
$Main->fastLoad($url);
Быстрая загрузка URL.
Параметры:
Имя | Описание |
---|---|
$url |
|
Возвращает: string
function fastLoad($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($curl, CURLOPT_REFERER, $this->Request()->absoluteUrl('/'));
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['SERVER_SOFTWARE']);
ob_start();
curl_exec($curl);
$r = ob_get_clean();
curl_close($curl);
return $r;
}
isEmptyHtml()
$Main->isEmptyHtml($html);
Является ли HTML пустым
Параметры:
Имя | Описание |
---|---|
$html |
|
Возвращает: boolean
function isEmptyHtml($html) {
if (!$html) return true;
if (!$html = trim($html)) return true;
if ($html === '<p><br></p>') return true;
return false;
}