Класс Page
Объект $Page:
Объект «Страница»
class Page extends \Cms\Site\Base { … }
Свойства
$id
$Page->id
ID страницы
var $id;
$type
$Page->type
Тип страницы
var $type;
$parent
$Page->parent
Родитель страницы
var $parent;
$title
$Page->title
Заголовок страницы
var $title;
$order
$Page->order
Порядковый номер
var $order;
$brief
$Page->brief
Анонс страницы
var $brief;
$image
$Page->image
Изображение
var $image;
$date
$Page->date
Дата
var $date;
$list
$Page->list
Тип дочерних страниц: все дочерние страницы должны иметь этот тип
var $list;
$lang
$Page->lang
Язык страницы
var $lang;
$table
$Page->table
Таблица, в которой хранится страница
var $table;
$html
$Page->html
HTML-код
var $html;
$_open_html
$Page->_open_html
Загружен ли HTML-код
var $_open_html;
$info
$Page->info
Дополнительная информация в виде массива «ключ-значение», значение может быть строкой или списком
var $info;
$_open_info
$Page->_open_info
Загружена ли дополнительная информация
var $_open_info;
$tags
$Page->tags
Тэги
var $tags;
$change_id
$Page->change_id
Изменение ID страницы
var $change_id;
$url
$Page->url
URL страницы
var $url;
Методы
route()
$Page->route($Request);
Обработка HTTP-запроса
Параметры:
Имя | Описание |
---|---|
$Request |
Возвращает: true
– запрос обработан;
null
– запрос не обработан
function route($Request) {
if (preg_match('~[?&]page=1$~', $_SERVER['REQUEST_URI'], $m)) {
$href = substr($_SERVER['REQUEST_URI'], 0, -strlen($m[0]));
$Request->redirect($href, 301);
$Request->sendHeader();
return true;
}
}
getPanel()
$Page->getPanel();
Список элементов в панели администрирования
Возвращает: array
Панель
function getPanel() {
$Main = $this->Main();
if (!strlen($this->id)) return array();
if ($this->id === $Main->entry_point || $this->type === 'login') {
$Item = $Main->load('-');
return $Item->getPanel();
}
$panel = array(
'-' => array(
'href' => '?a=page&p=&parent=' . urlencode($this->id),
'title' => 'Создать страницу',
'image' => 'add',
'can' => 'add|edit',
),
'page' => array(
'href' => '?a=page&p=' . urlencode($this->id),
'title' => 'Редактировать страницу',
'image' => 'edit',
'can' => 'page|edit',
),
'sort' => array(
'href' => '?a=sort&p=' . urlencode($this->id),
'title' => 'Сортировка подразделов',
'image' => 'sort',
'can' => 'sort|edit',
),
'delete' => array(
'href' => '?a=delete&p=' . urlencode($this->id),
'title' => 'Удалить страницу',
'image' => 'delete',
'can' => 'delete',
),
);
if (!$this->hasChildren()) unset($panel['sort']);
if (!strlen($this->parent)) unset($panel['move']);
if ($this->isMain()) unset($panel['delete']);
if (($list = $this->list) || ($list = $Main->Modules->modules[$this->type]['list'])) {
$panel['-']['href'] = '?a=page&type=' . $list . '&p=&parent=' . urlencode($this->id);
if ($title = $Main->Modules->modules[$list]['create']) $panel['-']['title'] = $title;
}
return $panel;
}
getFull()
$Page->getFull($full=null);
Получение полного текста для поисковой индексации
Параметры:
Имя | Описание |
---|---|
$full |
Полный текст |
Возвращает: string
function getFull($full = null) {
if (isset($full)) {
$r = $full;
} elseif ($this->id === 'admin' || substr($this->id, 0, 7) === '/admin/') {
return;
} else {
$this->openHtml();
$r = htmlspecialchars($this->title) . "\n" . htmlspecialchars($this->brief) . "\n" . $this->html;
}
$r = preg_replace('~<((/(p|div|ul|ol|li|table|tr))|(br))[^>]*>~', "\n", $r);
$r = preg_replace('~<[^>]+>~', ' ', $r);
$r = strip_tags(html_entity_decode($r, ENT_QUOTES | ENT_HTML5, 'UTF-8'));
$r = preg_replace('~&#?\\w+;~', ' ', $r);
$r = preg_replace('~^\\s+~m', '', $r);
$r = preg_replace('~\\s+$~m', '', $r);
$r = preg_replace("~\n\n+~s", "\n", $r);
$r = preg_replace('~[ \t]+~s', ' ', $r);
return $r;
}
openAll()
$Page->openAll();
Загрузка всех данных о странице
Возвращает: null
function openAll() {
$this->openHtml();
$this->openInfo();
$this->openMenu();
$this->openTags();
}
saveAll()
$Page->saveAll($transaction=true);
Сохранение всех данных о странице
Возвращает: true|null
function saveAll($transaction = true) {
$Data = $this->Data();
if ($transaction) if (!$Data->beginTransaction()) return false;
$r = $this->save()
&& $this->saveHtml()
&& $this->saveFull()
&& $this->saveInfo()
&& $this->saveMenu()
&& $this->saveTags()
&& $this->savePath()
;
if ($r) {
$this->changeAll();
if ($transaction) $Data->commit();
} else {
if ($transaction) $Data->rollback();
}
return $r;
}
get()
$Page->get($key, $default=null);
Получение значения
Параметры:
Имя | Описание |
---|---|
$key |
|
$default |
|
Возвращает: any
function get($key, $default = null) {
if (substr($key, 0, 5) === 'info-') return $this->getInfo(substr($key, 5), $default);
return isset($this->$key) ? $this->$key : $default;
}
set()
$Page->set($key, $value);
Установка значения
Параметры:
Имя | Описание |
---|---|
$key |
|
$value |
|
function set($key, $value) {
if (substr($key, 0, 5) === 'info-') return $this->setInfo(substr($key, 5), $value);
$this->$key = $value;
}
getInfo()
$Page->getInfo($key, $default=null);
Получение дополнительного значения
Параметры:
Имя | Описание |
---|---|
$key |
|
$default |
|
Возвращает: any
function getInfo($key, $default = null) {
if (!$this->_open_info) $this->openInfo();
return isset($this->info[$key]) ? $this->info[$key] : $default;
}
setInfo()
$Page->setInfo($key, $value);
Установка дополнительного значения
Параметры:
Имя | Описание |
---|---|
$key |
|
$value |
|
function setInfo($key, $value) {
if (!$this->_open_info) $this->openInfo();
$this->info[$key] = $value;
}
getInfoP()
$Page->getInfoP($key);
Получение дополнительного значения у ближайшего из родителей
Параметры:
Имя | Описание |
---|---|
$key |
|
Возвращает: any
function getInfoP($key) {
$path = $this->_path;
$Main = $this->Main();
if (!isset($path)) $path = $this->_path = array_reverse($this->getPath(), true);
foreach ($path as $id => $title) if (strlen($id)) if ($Item = $Main->load($id)) {
if (strlen($value = $Item->getInfo($key))) return $value;
}
}
getInfoR()
$Page->getInfoR($key);
Получение дополнительного значения у объекта или ближайшего из родителей
Параметры:
Имя | Описание |
---|---|
$key |
|
Возвращает: any
function getInfoR($key) {
$value = $this->getInfo($key);
if (strval($value) !== '') return $value;
return $this->getInfoP($key);
}
changeAll()
$Page->changeAll();
Вызов функции
Cms\Root\Page\change()
для каждого из изменённых через форму значений
function changeAll() {
foreach ($this as $key => $old) {
if (substr($key, 0, 5) === '_old_') {
$key = substr($key, 5);
$new = $this->get($key);
if ($old != $new) {
$this->change($key, $old, $new);
}
}
}
}
change()
$Page->change($key, $old, $new);
Значение изменено через форму
Параметры:
Имя | Описание |
---|---|
$key |
|
$old |
|
$new |
|
function change($key, $old, $new) {
return;
}
display()
$Page->display();
Отображение страницы
Смотрите описание Cms\Root\Main\Display\page()
function display() {
return $this->Main()->Display->page($this);
}
displayDetail()
$Page->displayDetail();
Детальное отображение страницы
Смотрите описание Cms\Root\Main\Display\detail()
function displayDetail() {
return $this->Main()->Display->detail($this);
}
displaySimple()
$Page->displaySimple();
Отображение страницы в списке
Смотрите описание Cms\Root\Main\Display\simple()
function displaySimple() {
return $this->Main()->Display->simple($this);
}
displaySearch()
$Page->displaySearch();
Отображение страницы в результатах поиска
Смотрите описание Cms\Root\Main\Display\search()
function displaySearch() {
return $this->Main()->Display->search($this);
}
displayPanel()
$Page->displayPanel($panel=null);
Отображение панели
Параметры:
Имя | Описание |
---|---|
$panel |
Массив с описанием панели |
Смотрите описание Cms\Root\Main\Display\pagePanel()
function displayPanel($panel = null) {
if (isset($panel)) return $this->Main()->Display->panel($panel);
else return $this->Main()->Display->pagePanel($this);
}
displayError()
$Page->displayError();
Отображение всех ошибок
Смотрите описание Cms\Root\Main\Display\error()
function displayError() {
return $this->Main()->Display->error($this->getError());
}
displayMenu()
$Page->displayMenu();
Отображение меню страниц
Смотрите описание Cms\Root\Main\Display\pageMenu()
function displayMenu() {
return $this->Main()->Display->pageMenu($this);
}
displayHtml()
$Page->displayHtml();
Отображение контента страницы
Смотрите описание Cms\Root\Main\Display\pageHtml()
function displayHtml() {
return $this->Main()->Display->pageHtml($this);
}
displayCode()
$Page->displayCode();
Подключение кода
Смотрите описание Cms\Root\Main\Display\pageCode()
function displayCode() {
return $this->Main()->Display->pageCode($this);
}
displayBlock()
$Page->displayBlock($block=null, $a=null);
Отображение блока объектов
Параметры:
Имя | Описание |
---|---|
$block |
Блок объектов |
$a |
Массив с дополнительными параметрами |
Смотрите описание Cms\Root\Main\Display\block()
function displayBlock($block = null, $a = null) {
return $this->Main()->Display->block($this, isset($block) ? $block : $this->list, $a);
}
displayTags()
$Page->displayTags();
Отображение тэгов
Смотрите описание Cms\Root\Main\Display\pageTags()
function displayTags() {
return $this->Main()->Display->pageTags($this);
}
displayImage()
$Page->displayImage($transform=null, $width=0, $height=0, $default=null, $alt=null);
Отображение изображения
Параметры:
Имя | Описание |
---|---|
$transform |
|
$width |
|
$height |
|
$default |
|
$alt |
|
Возвращает: string
Смотрите описание Cms\Root\Main\Display\image()
function displayImage($transform = null, $width = 0, $height = 0, $default = null, $alt = null) {
return $this->Main()->Display->image(array(
'src' => $this->image,
'default' => $default,
'transform' => $transform,
'width' => $width,
'height' => $height,
'alt' => isset($alt) ? $alt : $this->title,
));
}
displayPicture()
$Page->displayPicture(array $transform);
Отображение адаптивного изображения
Параметры:
Имя | Описание |
---|---|
$transform |
|
Смотрите описание Cms\Root\Main\Display\picture()
function displayPicture(array $transform) {
if (!isset($transform['src'])) $transform['src'] = $this->image;
if (!isset($transform['alt'])) $transform['alt'] = $this->title;
return $this->Main()->Display->picture($transform);
}
displayDate()
$Page->displayDate($format='j M Y');
Отображение даты
Параметры:
Имя | Описание |
---|---|
$format |
|
Смотрите описание Cms::Root::Main::Display::date()
function displayDate($format = 'j M Y') {
return $this->Main()->formatDate($format, $this->date);
}
displayTitle()
$Page->displayTitle();
Отображение заголовка страницы
Смотрите описание Cms\Root\Main\Display\pageTitle()
function displayTitle() {
return $this->Main()->Display->pageTitle($this);
}
displayH1()
$Page->displayH1();
Отображение заголовка H1.
function displayH1() {
return $this->Main()->Display->pageH1($this);
}
displayBrief()
$Page->displayBrief($brief=null);
Отображение многострочного текста без использования HTML.
Параметры:
Имя | Описание |
---|---|
$brief |
|
Возвращает: string
Смотрите описание Cms\Root\Main\Display\brief()
function displayBrief($brief = null) {
if (!func_num_args()) $brief = $this->brief;
return $this->Main()->Display->brief($brief);
}
open()
$Page->open();
Загрузка всех данных о странице
Возвращает: null
function open() {
return $this->openAll();
}
getTitle()
$Page->getTitle($id=null);
Заголовок страницы
Возвращает: string
function getTitle($id = null) {
return $this->title;
}
href()
$Page->href();
Ссылка на страницу
Смотрите описание Cms\Root\Main\Request\href()
function href() {
if (isset($this->url) && strlen($this->url)) return $this->url;
return $this->Main()->Request->href($this->id);
}
getHref()
$Page->getHref();
Ссылка на страницу
Смотрите описание Cms\Root\Main\Request\href()
function getHref() {
return $this->Main()->Request->href($this->id);
}
getPath()
$Page->getPath();
Получение пути к странице
Смотрите описание Cms\Root\Main\Storage\getPath()
function getPath() {
return $this->Main()->Storage->getPath($this);
}
getDefaultId()
$Page->getDefaultId();
ID страницы по умолчанию
Смотрите описание Cms::Root::Main::getDefaultId()
function getDefaultId() {
return $this->Main()->getDefaultId($this);
}
getMenu()
$Page->getMenu();
Меню страницы
Смотрите описание Cms\Root\Main\Storage\getPageMenu()
function getMenu() {
return $this->Main()->Storage->getPageMenu($this->id);
}
getTags()
$Page->getTags();
Получение тэгов
Возвращает: array
function getTags() {
$this->openTags();
$tags = array();
foreach (explode(', ', $this->tags) as $tag) if (strlen($tag = trim($tag))) $tags[$tag] = $tag;
return $tags;
}
can()
$Page->can($access);
Проверка прав доступа к странице
Параметры:
Имя | Описание |
---|---|
$access |
Необходимый уровень доступа |
Смотрите описание Cms\Root\Main\can()
function can($access) {
return $this->Main()->can($access, $this);
}
openHtml()
$Page->openHtml();
Загрузка HTML.
Смотрите описание Cms\Root\Main\Storage\openHtml()
function openHtml() {
return $this->Main()->Storage->openHtml($this);
}
openMenu()
$Page->openMenu();
Загрузка данных о меню
Смотрите описание Cms\Root\Main\Storage\openMenu()
function openMenu() {
return $this->Main()->Storage->openMenu($this);
}
openInfo()
$Page->openInfo();
Загрузка дополнительных данных
Смотрите описание Cms\Root\Main\Storage\openInfo()
function openInfo() {
return $this->Main()->Storage->openInfo($this);
}
openTags()
$Page->openTags();
Загрузка данных о тэгах
Смотрите описание Cms\Root\Main\Storage\openTags()
function openTags() {
return $this->Main()->Storage->openTags($this);
}
save()
$Page->save();
Сохранение страницы
Смотрите описание Cms::Root::Main::Storage::save()
function save() {
return $this->Main()->Storage->savePage($this);
}
saveHtml()
$Page->saveHtml();
Сохранение HTML.
Смотрите описание Cms\Root\Main\Storage\saveHtml()
function saveHtml() {
return $this->Main()->Storage->saveHtml($this);
}
saveFull()
$Page->saveFull();
Сохранение полного текста для поиска
Смотрите описание Cms\Root\Main\Storage\saveFull()
function saveFull() {
return $this->Main()->Storage->saveFull($this);
}
saveInfo()
$Page->saveInfo();
Сохранение дополнительной информации
Смотрите описание Cms\Root\Main\Storage\saveInfo()
function saveInfo() {
return $this->Main()->Storage->saveInfo($this);
}
saveMenu()
$Page->saveMenu();
Сохранение меню
Смотрите описание Cms\Root\Main\Storage\saveMenu()
function saveMenu() {
return $this->Main()->Storage->saveMenu($this);
}
saveTags()
$Page->saveTags();
Сохранение тэгов
Смотрите описание Cms\Root\Main\Storage\saveTags()
function saveTags() {
return $this->Main()->Storage->saveTags($this);
}
savePath()
$Page->savePath();
Сохранение пути к странице
Смотрите описание Cms\Root\Main\Storage\savePath()
function savePath() {
return $this->Main()->Storage->savePath($this);
}
delete()
$Page->delete();
Удаление страницы
Смотрите описание Cms\Root\Main\Storage\delete()
function delete() {
return $this->Main()->Storage->delete($this);
}
displayDefaultForm()
$Page->displayDefaultForm($form=null);
Произвольная форма
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayDefaultForm($form = null) {
if (!isset($form)) return;
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
$document = $Form->load($form, $Page);
if ($Form->store($document)) {
if ($Page->saveAll()) {
$this->App()->get('file')->updateFileListItem($Page);
return $Page->href();
}
}
return $document;
}
displayPageForm()
$Page->displayPageForm($form='page');
Форма редактирования
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayPageForm($form = 'page') {
$root = $this->root();
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
if ($form === 'page' && $Page->type !== 'page') {
if (file_exists($root . '/cms/form/' . $Page->type . '.xml')) {
$form = $Page->type;
} elseif (file_exists($root . '/cms/html/form.' . $Page->type . '.php')) {
$form = $Page->type;
}
}
if (!strlen($Page->id) && $_GET['copy']) {
if ($Copy = $Main->load($_GET['copy'])) {
$Copy->open();
foreach ($Copy as $k => $v) if ($k !== 'id') $Page->$k = $v;
}
}
$id = $Page->id; $Page->change_id = $Page->id ? $Page->href() : '';
$type = $Page->type = $Page->type . ($Page->list ? ':' . $Page->list : '');
$document = $Form->load($form, $Page);
if ((strlen($Page->id) || $Page->isMain()) && isset($document->fields['default_id'])) {
$Field = $document->fields['default_id'];
if (is_object($Field) && $Field->node && $Field->node->field) {
unset($Field->node->field);
}
unset($document->fields['default_id']);
}
if ((!strlen($Page->id) || $Page->isMain()) && isset($document->fields['change_id'])) {
$Field = $document->fields['change_id'];
if (is_object($Field) && $Field->node && $Field->node->field) {
unset($Field->node->field);
}
unset($document->fields['change_id']);
}
if ($Form->store($document)) {
if (strpos($Page->type, ':') !== false) {
list($Page->type, $Page->list) = explode(':', $Page->type);
} elseif ((!$Page->type || $Page->type === 'page') && $type !== 'page' && isset($document->fields['type']->options) && !isset($document->fields['type']->options[$type])) {
if (strpos($type, ':') !== false) {
list($Page->type, $Page->list) = explode(':', $type);
} else {
$Page->type = $type;
$Page->list = '';
}
} else {
$Page->list = '';
}
if ($Page->saveAll()) {
$this->App()->get('file')->updateFileListItem($Page);
if (isset($document->fields['change_id']))
if (strlen($change_id = $Page->change_id)) if (strlen($change_id = $Main->Request()->getId($change_id))) if ($change_id != $id) {
$Main->changeId($id, $change_id);
return $Main->href($change_id);
}
return $Page->href();
}
}
return $document;
}
displayHtmlForm()
$Page->displayHtmlForm($form='html');
Форма редактирования HTML.
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayHtmlForm($form = 'html') {
$document = $this->displayDefaultForm($form);
return $document;
}
displayMenuForm()
$Page->displayMenuForm($form='menu');
Форма редактирования меню
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayMenuForm($form = 'menu') {
$Form = $this->Form();
return $Form->displayMenuForm($this, $form);
}
displaySeoForm()
$Page->displaySeoForm($form='seo');
Форма редактирования SEO.
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displaySeoForm($form = 'seo') {
$document = $this->displayDefaultForm($form);
return $document;
}
displayConfForm()
$Page->displayConfForm($form='conf');
Форма редактирования настроек
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayConfForm($form = 'conf') {
return $this->Form()->displayConfForm($this, $form);
}
displayDeleteForm()
$Page->displayDeleteForm($form='delete');
Форма удаления
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayDeleteForm($form = 'delete') {
if (!isset($form)) return;
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
$document = $Form->load($form, $Page);
if ($Form->store($document)) {
if ($Page->delete()) {
if ($Page->hasChildren()) {
if (is_string($_POST['confirm']) && $_POST['confirm'] !== '' && $_POST['confirm'] !== 'Y') {
foreach (explode('|', $_POST['confirm']) as $id) {
if ($Item = $Main->load($id)) {
$Item->delete();
}
}
}
}
return $Main->href($Page->parent);
}
}
return $document;
}
displaySortForm()
$Page->displaySortForm($form='sort', $a=null);
Форма сортировки
Параметры:
Имя | Описание |
---|---|
$form |
|
$a |
Возвращает: Cms\Root\Form\Document
|string|null
function displaySortForm($form = 'sort', $a = null) {
if (!isset($form)) return;
$Conf = $this->Conf();
$Data = $this->Data();
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
if (!isset($a)) {
$a = array();
if (is_string($_GET['parent'])) $a['parent'] = $_GET['parent'];
}
$document = $Form->loadDocumentXML(''
. '<form>'
. '<group>'
. '<field name="order" type="sort" />'
. '</group>'
. '<field name="submit" />'
. '</form>'
);
if ($field = $document->fields['order']) {
$field->list = $Main->Storage->loadSortList($Page, $a);
}
if ($_POST && is_array($_POST['order'])) {
$list = array();
if (is_array($field->list)) foreach ($field->list as $item) {
$list[$item['table']][$item['id']] = false;
}
foreach ($_POST['order'] as $table => $sort) if (is_array($sort)) {
foreach ($sort as $order => $id) {
if (isset($list[$table][$id])) $list[$table][$id] = $order;
}
}
foreach ($list as $table => $sort) {
if (is_array($sort)) {
foreach ($sort as $id => $order) if ($order === false) unset($sort[$id]);
}
if (is_array($sort) && count($sort)) $list[$table] = $sort;
else unset($list[$table]);
}
if ($Main->Storage->saveSortList($Page, $list)) {
return $Page->href();
}
}
return $document;
}
displayPagesForm()
$Page->displayPagesForm($form='page');
Форма редактирования дочерних страниц
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: array|string|null
function displayPagesForm($form = 'page') {
$Data = $this->Data();
$Main = $this->Main();
$Form = $this->Form();
$r = array();
$data = array();
$Page = $this;
$type = $Page->list ? $Page->list : $Main->Modules->modules[$Page->type]['list'];
if (!$type) $type = 'page';
$table = $Main->Modules->modules[$type]['table'];
if (!$table) $table = 'item';
$query = "SELECT * FROM `$table` WHERE `parent`=" . $Data->quote($Page->id) . " ORDER BY `order`";
if ($form === 'page' && $type !== 'page' && file_exists($Main->getTemplate('form', $type))) $form = $type;
$document = $Form->load($form, $data);
$document->fields['id'] = $Form->loadField(array( 'type' => 'hidden', 'name' => 'id' ));
if ($_POST) {
if (is_array($_POST['id'])) foreach ($_POST['id'] as $position => $id) if ($Item = $Main->load($id, $type)) {
$Item->open();
if ($form == "delete") {
if ($_POST['confirm'][$position]) {
$Item->delete();
}
} else {
foreach ($document->fields as $name => $field) if ($name !== 'submit') {
$Item->set($name, $_POST[$name][$position]);
}
if ($Item->saveAll()) {
$this->App()->get('file')->updateFileListItem($Item);
}
}
}
return $Page->href();
}
$position = 0;
if ($result = $Data->query($query)) while ($row = $Data->fetch($result)) {
$position ++;
$Item = $Main->load($row);
$Item->open();
$title = trim($Main->Modules->modules[$type]['title'] . (strlen($Item->title) ? ' «' . htmlspecialchars($Item->title) . '»' : ' №' . $position));
$r[] = "<h3>$title</h3>";
if ($Item->image) {
$r[] = $Main->displayImage($Item->image, 'rf100x100', 100, 100);
}
foreach ($document->fields as $name => $field) if ($name !== 'submit') {
$field->name = "{$name}[{$position}]";
$field->value = $Item->get($name);
$r[] = $field->display();
}
$r[] = '<hr>';
}
if ($document->fields['submit']) $r[] = $document->fields['submit'];
return $r;
}
displayDeletesForm()
$Page->displayDeletesForm($form='delete');
Форма удаления дочерних страниц
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: array|string|null
function displayDeletesForm($form = 'delete') {
return $this->displayPagesForm($form);
}
displayMoveForm()
$Page->displayMoveForm($form='move');
Форма перемещения
Параметры:
Имя | Описание |
---|---|
$form |
|
Возвращает: Cms\Root\Form\Document
|string|null
function displayMoveForm($form = 'move') {
if (!isset($form)) return;
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
$document = $Form->load($form, $Page);
if ($Form->store($document)) {
$Page->order = 0;
if ($Page->saveAll()) {
return $Page->href();
}
}
return $document;
}
displayBlockForm()
$Page->displayBlockForm();
Форма редактирования блока
Возвращает: Cms\Root\Form\Document
|string|null
function displayBlockForm() {
$App = $this->App();
$Main = $this->Main();
$Form = $this->Form();
$Page = $this;
$Block = $App->get('block');
if (!$blockItem = $Block->getBlockItem($Page, $_GET)) $blockItem = $Block->createBlockItem($Page, $_GET);
if ($blockItem) {
if (!$form = $App->getAbsolutePath($Block->getBlockEditForm($Page, $blockItem))) return;
if (!is_array($blockItem['data'])) $blockItem['data'] = array();
$blockItem['data']['block-active'] = isset($blockItem['active']) ? ($blockItem['active'] ? 'Y' : '') : 'Y';
$data = new \Cms\Site\Form\Wrapper($blockItem['data']);
$data->Page = $Page;
if ($document = $Form->loadDocumentXml($form, $data)) {
if ($blockItem['block'] === 'html' && $blockItem['n'] == 1) $blockItem['data']['html'] = $Page->html;
foreach ($document->fields as $name => $field) {
if ($field->json) if (is_array($value = $blockItem['data'][$field->name])) $blockItem['data'][$field->name] = json_encode($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$field->request();
}
}
if ($Form->store($document)) {
foreach ($document->fields as $name => $field) {
if ($field->type === 'files') {
if (is_array($field->value)) {
$files = array();
foreach ($field->value as $value) {
if (is_string($value)) {
if ($value[0] === '{' && $value[strlen($value) - 1] === '}') {
$files[] = json_decode($value, true);
}
}
}
$blockItem['data'][$field->name] = $files;
}
} elseif ($field->json) {
if (is_string($field->value) && strlen($field->value)) {
$blockItem['data'][$field->name] = json_decode($field->value, true);
}
}
}
if ($field = $document->fields['menu']) {
if ($field->type === 'sort') {
$sortList = array();
if (is_array($field->list)) foreach ($field->list as $item) $sortList[$item['id']] = $item;
$menu = array();
if (is_array($blockItem['data']['menu'])) foreach ($blockItem['data']['menu'] as $id) if ($sortItem = $sortList[$id]) {
$sortItem['menu'] = $_POST['menu-menu'][$id] ? 'Y' : '';
if (!$sortItem['id'] && !$sortItem['menu']) continue;
$menu[] = $sortItem;
}
$blockItem['data']['menu'] = $menu;
}
if ($field->type === 'menu') {
$menu = $blockItem['data']['menu'];
if (is_string($menu) && $menu[0] === '[') $menu = json_decode($menu, true);
elseif (!is_array($menu)) $menu = array();
if ($menu) $blockItem['data']['menu'] = $menu;
else unset($blockItem['data']['menu']);
}
}
if (isset($blockItem['data']['block-active'])) {
$blockItem['active'] = $blockItem['data']['block-active'] ? 'Y' : '';
unset($blockItem['data']['block-active']);
}
if ($Block->saveBlockItem($Page, $blockItem)) {
global $_RESULT; if (!is_array($_RESULT)) $_RESULT = array();
if ($blockItem = $Block->getBlockItem($Page, $_GET)) $_RESULT['block'] = $blockItem;
return $Page->href();
}
}
return $document;
}
}
qId()
$Page->qId();
Получение экранированного ID для SQL.
Возвращает: string
function qId() {
return $this->Data()->quote($this->id);
}
isMain()
$Page->isMain();
Является ли страница Главной
Возвращает: boolean
function isMain() {
return $this->id === '-' || (isset($this->lang) && $this->id === $this->lang) || $this->id === $this->Main()->lang;
}
hasChildren()
$Page->hasChildren();
Есть ли дочерние страницы
Возвращает: boolean
function hasChildren() {
return $this->Main()->Storage->hasChildren($this);
}
table()
$Page->table();
Таблица для сохранения
Возвращает: string
function table() {
if (isset($this->table) && $this->table) {
return $this->table;
}
if ($this->type) {
$Modules = $this->Main()->Modules;
if ($Type = $Modules->getModule($this->type)) {
return $Type->getTable();
}
}
return 'item';
}
getList()
$Page->getList();
Тип дочерних элементов
Возвращает: string|null
function getList() {
if (isset($this->list) && $this->list) return $this->list;
if ($this->type) {
$Modules = $this->Main()->Modules;
if ($Type = $Modules->getModule($this->type)) {
return $Type->list;
}
}
}