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

Класс Type

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

Объект «Тип страницы»

Исходный код
class Type extends \Cms\Site\Base implements \ArrayAccess { … }

Свойства

$name

$Type->name

Имя типа

Исходный код
    var $name;

$title

$Type->title

Название типа

Исходный код
    var $title;

$plural

$Type->plural

Название во множественном числе

Исходный код
    var $plural;

$create

$Type->create

Название действия создания

Исходный код
    var $create;

$public

$Type->public

Страницы типа являются публичными

Исходный код
    var $public;

$enable

$Type->enable

Тип включен

Исходный код
    var $enable;

$sitemap

$Type->sitemap

Данные отображаются в карте сайта

Исходный код
    var $sitemap;

$select

$Type->select

Тип виден в выпадающем списке

Исходный код
    var $select;

$order

$Type->order

Сортировка страниц

Исходный код
    var $order;

$sort

$Type->sort

Глобальная сортировка

Исходный код
    var $sort;

$propertyList

$Type->propertyList = array();

Список свойств

Исходный код
    var $propertyList = array();

$table

$Type->table

Таблица

Исходный код
    var $table;

$list

$Type->list

Тип дочерних объектов

Исходный код
    var $list;

$root

$Type->root

Тип является системным

Исходный код
    var $root;

$site

$Type->site

Тип является локальным

Исходный код
    var $site;

$class

$Type->class

Класс для создания страницы

Исходный код
    var $class;

$object

$Type->object

Объект страницы

Исходный код
    var $object;

$register

$Type->register

Тип зарегистрирован в модулях

Исходный код
    var $register;

$data

$Type->data = array();

Информация о типе

Исходный код
    var $data = array();

Методы

__construct()

new Type($name=null);
Исходный код
    function __construct($name = null) {
        $this->name = $this->data['name'] = $name;
    }

get()

$Type->get($key, $default=null);
Исходный код
    function get($key, $default = null) {
        return isset($this->$key) ? $this->$key : $default;
    }

set()

$Type->set($key, $value);
Исходный код
    function set($key, $value) {
        if ($key[0] === '_' || $key === 'root' || $key === 'site' || $key === 'class' || $key === 'object' || $key === 'register') $this->$key = $value;
        else $this->$key = $this->data[$key] = $value;
        if ($key === 'enabled') {
            $this->Main()->Modules()->resetEnabledModuleList();
        }
    }

offsetGet()

$Type->offsetGet($key);
Исходный код
    function offsetGet($key) {
        return $this->$key;
    }

offsetSet()

$Type->offsetSet($key, $value);
Исходный код
    function offsetSet($key, $value) {
        $this->set($key, $value);
    }

offsetExists()

$Type->offsetExists($key);
Исходный код
    function offsetExists($key) {
        return isset($this->$key);
    }

offsetUnset()

$Type->offsetUnset($key);
Исходный код
    function offsetUnset($key) {
        unset($this->$key);
    }

getName()

$Type->getName();
Исходный код
    function getName() {
        return $this->name;
    }

getTitle()

$Type->getTitle();
Исходный код
    function getTitle() {
        if (!$this->title) {
            if (mb_strlen($this->name) > 1) {
                return strtr(mb_strtoupper(mb_substr($this->name, 0, 1)) . mb_substr($this->name, 1, mb_strlen($this->name) - 1), '_', ' ');
            } else {
                return mb_strtoupper($this->name);
            }
        }
        return $this->title;
    }

displayTitle()

$Type->displayTitle();
Исходный код
    function displayTitle() {
        return htmlspecialchars($this->getTitle());
    }

getPlural()

$Type->getPlural();
Исходный код
    function getPlural() {
        return $this->plural;
    }

getCreate()

$Type->getCreate();
Исходный код
    function getCreate() {
        return $this->create;
    }

isPublic()

$Type->isPublic();
Исходный код
    function isPublic() {
        return $this->public ? true : false;
    }

isEnabled()

$Type->isEnabled();
Исходный код
    function isEnabled() {
        return $this->enable ? true : false;
    }

isSitemap()

$Type->isSitemap();
Исходный код
    function isSitemap() {
        return $this->sitemap ? true : false;
    }

isSelect()

$Type->isSelect();
Исходный код
    function isSelect() {
        return $this->select ? true : false;
    }

getOrder()

$Type->getOrder();
Исходный код
    function getOrder() {
        return $this->order;
    }

getOrderList()

$Type->getOrderList();
Исходный код
    function getOrderList() {
        if (is_string($this->order) && strlen($this->order)) {
            $r = array();
            foreach (explode(',', $this->order) as $order) if (strlen($order = trim($order))) {
                if ($order[0] !== '-') $r[$order] = 'ASC';
                else $r[substr($order, 1)] = 'DESC';
            }
            return $r;
        } elseif (is_array($this->order)) {
            return $this->order;
        } elseif ($Table = $this->loadTable()) {
            return $Table->getOrderList();
        }
        if ($Field = $this->getField('order')) if ($Field->isEnabled()) return array( 'order' => 'ASC' );
        return array();
    }

getSort()

$Type->getSort();
Исходный код
    function getSort() {
        return $this->sort;
    }

getSortList()

$Type->getSortList();
Исходный код
    function getSortList() {
        if (is_string($this->sort) && strlen($this->sort)) {
            $r = array();
            foreach (explode('|', strtr($this->sort, ',', '|')) as $order) if (strlen($order = trim($order))) {
                if ($order[0] !== '-') $r[$order] = 'ASC';
                else $r[substr($order, 1)] = 'DESC';
            }
            return $r;
        } elseif (is_array($this->sort)) {
            return $this->sort;
        } elseif ($Table = $this->loadTable()) {
            return $Table->getSortList();
        }
        if ($Field = $this->getField('title')) if ($Field->isEnabled()) return array( 'title' => 'ASC' );
        return array();
    }

addProperty()

$Type->addProperty(Property $Property);
Исходный код
    function addProperty(Property $Property) {
        $this->propertyList[$Property->getName()] = $Property;
    }

getProperty()

$Type->getProperty($property);
Исходный код
    function getProperty($property) {
        return $this->propertyList[$property];
    }

getPropertyList()

$Type->getPropertyList();
Исходный код
    function getPropertyList() {
        return $this->propertyList;
    }

getTable()

$Type->getTable();
Исходный код
    function getTable() {
        return $this->table ? $this->table : 'item';
    }

loadTable()

$Type->loadTable();
Исходный код
    function loadTable() {
        if ($table = $this->getTable()) {
            return $this->Main()->Storage()->getTable($table);
        }
    }

getField()

$Type->getField($field);
Исходный код
    function getField($field) {
        if ($Table = $this->loadTable()) {
            return $Table->getField($field);
        }
    }

getEnabledField()

$Type->getEnabledField($field);
Исходный код
    function getEnabledField($field) {
        if ($Field = $this->getField($field)) if ($Field->isEnabled()) return $Field;
    }

getFieldList()

$Type->getFieldList();
Исходный код
    function getFieldList() {
        if ($Table = $this->loadTable()) {
            return $Table->getFieldList();
        }
    }

getEnabledFieldList()

$Type->getEnabledFieldList();
Исходный код
    function getEnabledFieldList() {
        if ($Table = $this->loadTable()) {
            return $Table->getFieldList();
        }
    }

resetEnabledFieldList()

$Type->resetEnabledFieldList();
Исходный код
    function resetEnabledFieldList() {
        if ($Table = $this->loadTable()) {
            return $Table->resetEnabledFieldList();
        }
    }

getList()

$Type->getList();
Исходный код
    function getList() {
        return $this->list;
    }

isRoot()

$Type->isRoot();
Исходный код
    function isRoot() {
        return $this->root ? true : false;
    }

isSite()

$Type->isSite();
Исходный код
    function isSite() {
        return $this->site ? true : false;
    }

getClass()

$Type->getClass();
Исходный код
    function getClass() {
        return $this->class;
    }

getObject()

$Type->getObject();
Исходный код
    function getObject() {
        return $this->object;
    }

addTypeData()

$Type->addTypeData(array $typeData, $override=true);
Исходный код
    function addTypeData(array $typeData, $override = true) {
        foreach ($typeData as $k => $v) {
            if ($k === 'props') {
                if (is_array($v)) {
                    $propertyClass = $this->App()->getClass('data_property');
                    foreach ($v as $propertyData) {
                        if (is_string($propertyData)) {
                            if (!$Property = $this->getProperty($propertyData)) $Property = new $propertyClass($this->getName(), $propertyData['name']);
                            $propertyData = array( 'enable' => 'Y' );
                            $Property->addPropertyData($propertyData, $override);
                        } elseif (is_array($propertyData)) {
                            if (!$Property = $this->getProperty($propertyData['name'])) $Property = new $propertyClass($this->getName(), $propertyData['name']);
                            $Property->addPropertyData($propertyData, $override);
                        }
                        $this->addProperty($Property);
                    }
                }
            } elseif ($override || !isset($this->$k)) {
                $this->set($k, $v);
            }
        }
    }

addPropertyFieldList()

$Type->addPropertyFieldList();
Исходный код
    function addPropertyFieldList() {
        if (!is_array($fieldList = $this->getFieldList())) return;
        if (!is_array($propertyList = $this->getPropertyList())) return;
        $done = true;
        foreach ($fieldList as $fieldName => $Field) if (!isset($propertyList[$fieldName])) {
            $done = false;
            break;
        }
        if ($done) return;
        $newPropertyList = array();
        $propertyClass = $this->App()->getClass('data_property');
        foreach ($fieldList as $fieldName => $Field) if (!isset($propertyList[$fieldName])) {
            $Property = new $propertyClass($this->getName(), $Field->getName());
            $propertyData = array(
                'title' => $Field->getTitle(),
                'enable' => $Field->isEnabled() ? 'Y' : '',
            );
            $Property->addPropertyData($propertyData);
            $newPropertyList[$Property->getName()] = $Property;
        }
        foreach ($propertyList as $propertyName => $Property) $newPropertyList[$propertyName] = $Property;
        $this->propertyList = $newPropertyList;
    }

getTypeData()

$Type->getTypeData();
Исходный код
    function getTypeData() {
        $r = $this->data;
        $r['site'] = 'Y';
        $r['props'] = array();
        foreach ($this->getPropertyList() as $Property) if ($Property->isSite()) {
            $r['props'][$Property->getName()] = $Property->getPropertyData();
        }
        return $r;
    }

getPanel()

$Type->getPanel();
Исходный код
    function getPanel() {
        return array(
            'edit' => array(
                'href' => $this->Main()->href('/admin/modules') . '?a=module&module=' . rawurldecode($this->getName()),
                'image' => 'edit',
            ),
            'open' => array(
                'href' => $this->Main()->href('/admin/modules') . '?module=' . rawurlencode($this->getName()),
                'image' => 'angle-right',
                'modal' => false,
            ),
        );
    }

displayPageForm()

$Type->displayPageForm($form='data_type');
Исходный код
    function displayPageForm($form = 'data_type') {
        if (!isset($form)) return;
        $Main = $this->Main();
        $Form = $this->Form();
        $Type = $this;
        $document = $Form->load($form, $Type);
        if ($Form->store($document)) {
            if ($Type->save()) {
                return $Type->href();
            }
        }
        return $document;
    }

href()

$Type->href();
Исходный код
    function href() {
        return $this->Main()->href('/admin/modules') . '?module=' . rawurlencode($this->getName());
    }

save()

$Type->save();
Исходный код
    function save() {
        $this->set('site', 'Y');
        return $this->Main()->Modules()->saveData();
    }