Система управления «Сайт PRO»
Версия 20240107

Класс Main

Объект $Main: Cms\Root\Main наследует Cms\Site\Base

Объект с общими функциями системы управления

Базовый класс для объекта $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

boolean необходимо ли создать объекты системы управления

Исходный код
    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

Cms\Root\Main\Request HTTP-запрос

Возвращает: 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

int размер в байтах

Возвращает: 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

float цена

$digit

int количество знаков после запятой

Возвращает: string

print $Main->formatPrice($price);

Исходный код
    function formatPrice($price, $digit = 2) {
        return str_replace(' ', '&nbsp;', number_format($price, $digit, ',', ' '));
    }

formatPrice2()

$Main->formatPrice2($price);

Форматирование цены без обязательной дробной части

Параметры:

ИмяОписание
$price

float цена

Возвращает: string

print $Main->formatPrice2($price);

Исходный код
    function formatPrice2($price) {
        return str_replace(' ', '&nbsp;', number_format(doubleval($price), (($price - floor($price)) > 0) ? 2 : 0, ',', ' '));
    }

getVideo()

$Main->getVideo($video);

Получение ссылки на видео для размещения в коде страницы

Параметры:

ИмяОписание
$video

string ссылка на видео в произвольном формате

Возвращает: 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

string префикс для шаблона

$template

string имя шаблона

Возвращает: 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

int количество элементов

$form

array массив словоформ для 0, 1, 2 элементов

Возвращает: 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

string раздел сайта, для которого производится операция

$query

string запрос на выборку страниц

$limit

int максимальный уровень вложенности

Возвращает: 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

string раздел сайта, для которого производится операция

$level

int уровень вложенности раздела сайта

$limit

int максимальный уровень вложенности

$list

array преобразованный список

$rows

array список страниц

Возвращает: 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

string наименование уровня доступа

$Page

Cms\Root\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

string наименование уровня доступа

$Page

Cms\Root\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

string ID страницы

$acls

array; null массив со списком прав доступа или null

Смотрите описание Проверка прав доступа

Примеры:

$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

string ID страницы

$action

string наименование уровня доступа

$login

string логин пользователя

$group

array список групп пользователя

Возвращает: 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

string ID страницы

$action

string наименование уровня доступа

$login

string логин пользователя

$group

array список групп пользователя

Возвращает: 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 строка

Возвращает: 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

object; array результат запроса или массив

$limit

int; null количество элементов на странице

Возвращает: 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" => "&#x2190;" );
            $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" => "&#x2192;" );
            $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

string старый ID страницы

$new_id

string новый 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

string 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; null абсолютная или относительная ссылка на страницу

Возвращает: string ID страницы

Смотрите описание $Request->getId()

Исходный код
    function getId($href = null) {
        return $this->Request()->getId($href);
    }

href()

$Main->href($id=null);

Преобразование ID страницы в ссылку

Параметры:

ИмяОписание
$id

string; null ID страницы

Возвращает: string ссылка на страницу

Смотрите описание $Request->href()

Исходный код
    function href($id = null) {
        return $this->Request()->href($id);
    }

getHref()

$Main->getHref($id=null);

Преобразование ID страницы в ссылку

Параметры:

ИмяОписание
$id

string; null 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

string ID страницы

$type

string; null тип страницы

Возвращает: array|null – массив со свойствами страницы: "свойство" => "значение"

Смотрите описание $Storage->getRow()

Исходный код
    function getRow($id, $type = null) {
        return $this->Storage()->getRow($id, $type);
    }

addType()

$Main->addType($type, $title);

Добавление нового элемента в список тип страниц

Параметры:

ИмяОписание
$type

string тип страницы

$title

string отображаемое название

Смотрите описание $Modules->addType()

Исходный код
    function addType($type, $title) {
        return $this->Modules()->addType($type, $title);
    }

addSelect()

$Main->addSelect($type, $title);

Добавление нового элемента в список тип страниц

Параметры:

ИмяОписание
$type

string тип страницы

$title

string отображаемое название

Смотрите описание $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

string тип страницы, определяемый модулем

Смотрите описание $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

Cms\Root\Data\Type |null

Исходный код
    function getModule($type) {
        return $this->Modules()->getModule($type);
    }

isModule()

$Main->isModule($type);

Загружен ли указанный модуль

Параметры:

ИмяОписание
$type

string тип страницы, определяемый модулем

Возвращает: boolean; true – да; false – нет

Смотрите описание $Modules->isModule()

Исходный код
    function isModule($type) {
        return $this->Modules()->isModule($type);
    }

module()

$Main->module($type);

Загружен ли указанный модуль

Параметры:

ИмяОписание
$type

string тип страницы, определяемый модулем

Возвращает: boolean true – да; false – нет

Смотрите описание $Modules->isModule()

Исходный код
    function module($type) {
        return $this->Modules()->isModule($type);
    }

displayGroup()

$Main->displayGroup($group);

Отображение названия группы пользователей

Параметры:

ИмяОписание
$group

string группа пользователей

Возвращает: 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

string ссылка на изображение

$transform

string; null трансформация

$width

int ширина

$height

int высота

$alt

string; null альтернативный текст

$class

string; null класс CSS

$style

string; null стиль CSS

Возвращает: 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

string ссылка на оригинальное изображение

$param

array массив параметров

Возвращает: 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

string ссылка на скрипт или таблицу стилей или текст скрипта

Возвращает: 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

array; null массив с описанием панели

Возвращает: 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

Cms\Root\Page страница, являющаяся родительской для списка

$block

string тип страниц в блоке

$param

array; null параметры отображения

Возвращает: string HTML

Смотрите описание $Display->block()

Исходный код
    function displayBlock(&$Page, $block, $param = null) {
        return $this->Display()->block($Page, $block, $param);
    }

displayPager()

$Main->displayPager(&$result, $limit=null);

Отображение постраничной разбивки

Параметры:

ИмяОписание
$result

object; array Результат запроса или массив

$limit

int; null Количество элементов на странице

Возвращает: 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

string Таблица

$fields

array Список полей

Смотрите описание $Storage->addTable()

Исходный код
    function addTable($table, $fields) {
        return $this->Storage()->addTable($table, $fields);
    }

addDefault()

$Main->addDefault($id, $row);

Добавление данных о странице по умолчанию

Параметры:

ИмяОписание
$id

string ID страницы

$row

array свойства страницы

Смотрите описание $Storage->addDefault()

Исходный код
    function addDefault($id, $row) {
        return $this->Storage()->addDefault($id, $row);
    }

getPageMenu()

$Main->getPageMenu($id=null);

Получение списка вложенных страниц для отображения в качестве меню

Параметры:

ИмяОписание
$id

string 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

string Заголовок

Возвращает: 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

string; null ID страницы

$type

string; null тип страницы

Возвращает: string заголовок страницы

Смотрите описание $Storage->getTitle()

Исходный код
    function getTitle($id = null, $type = null) {
        return $this->Storage()->getTitle($id, $type);
    }

getList()

$Main->getList($id, $key);

Получение свойства страницы в виде списка

Параметры:

ИмяОписание
$id

string ID страницы

$key

string Имя свойства

Возвращает: array список

Смотрите описание $Storage->getList()

Исходный код
    function getList($id, $key) {
        return $this->Storage()->getList($id, $key);
    }

redirect()

$Main->redirect($location, $status=null);

Перенаправление на другую страницу

Параметры:

ИмяОписание
$location

string URL

$status

int; null HTTP-статус

Смотрите описание $Request->redirect()

Исходный код
    function redirect($location, $status = null) {
        return $this->Request()->redirect($location, $status);
    }

isUnique()

$Main->isUnique($id);

Является ли ID страницы уникальным

Параметры:

ИмяОписание
$id

string ID страницы

Возвращает: boolean; true – да; false – нет

Смотрите описание $Storage->isUnique()

Исходный код
    function isUnique($id) {
        return $this->Storage()->isUnique($id);
    }

displayMenuLeft()

$Main->displayMenuLeft($level=0, $style=null, $query=null);

Отображение меню слева

Параметры:

ИмяОписание
$level

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

int уровень вложенности

$style

string; null стиль меню

$query

string; null SQL-запрос

Возвращает: 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

Cms\Root\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

array; null массив параметров

Возвращает: 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 текст

Возвращает: string перевод текста

По умолчанию: перевод не осуществляется. Возвращается оригинальная строка

Исходный код
    function translate($text) {
        return $text;
    }

addCanonicalTitle()

$Main->addCanonicalTitle($key, $value, $title);

Добавление параметра в каноническую ссылку на страницу и фрагмента в заголовок страницы

Параметры:

ИмяОписание
$key

string название параметра

$value

string значение параметра

$title

string фрагмент заголовка страницы

Смотрите описание $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

array список массивов или объектов

$by

int; string элемент массива или свойство объекта

$desc

boolean сортировать по убыванию

Примеры:

$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

array; object первый массив или объект

$a2

array; object второй массив или объект

Возвращает: integer 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

Возвращает: 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

string строка HTML

Возвращает: boolean

Исходный код
    function isEmptyHtml($html) {
        if (!$html) return true;
        if (!$html = trim($html)) return true;
        if ($html === '<p><br></p>') return true;
        return false;
    }