Класс wPrototype - базовый класс системы, который является надстройкой над ADOdb и служит для работы с базой данных (БД).
Возможности класса:
Основные параметры класса
Параметр | Значение по умолчанию | Описание |
conn | null | Объект соединения с БД. |
explorerid | sys_pages_hiddens_explorer | Выбор объектов в проводнике. |
table | Название таблицы БД, с которой будет работать объект класса wPrototype. | |
objtype | Тип объекта (ссылка на таблицу БД – п.Создание таблицы) | |
keyfield | id | Ключевое поле таблицы. |
namefield | Поле названия объекта в таблице. | |
namefield_lang | 0 | Мультиязычное поле названия объекта в таблице. |
id | Значение для ключевого поля таблицы для редактирования или удаления. | |
moduleid | 0 | Код (Id) модуля, к которому принадлежит объект. |
container | Контейнер для showForm(). | |
buttonpanel | buttonpanel | CSS-класс для панели кнопок. |
buttonpanelm | buttonpanelm | CSS-класс для панели кнопок - 2. |
_fields | array() | Набор полей таблицы. |
fields | null | Объект поля БД. |
_indexes | array() | Индексы таблицы. |
_tabs | Вкладки таблицы. | |
selected_tab | 0 | Выбранная вкладка. |
tab_select_func | Callback-функция, которая вызывается при выборе вкладки. | |
iframe_width | 700 | Ширина Iframe при отображении формы объекта. |
iframe_height | 400 | Высота Iframe при отображении формы объекта. |
textarea_rows | 20 | Количество строк в текстовой области (textarea). |
richedit_width | 100% | Ширина wysywig-редактора. |
richedit_height | 400 | Высота wysywig-редактора. |
showlangswitch | false | Отображение переключателя языков в заголовке страницы. |
showformTinymceScript | false | Печать Tinymce скрипта в форме. Если нет – в заголовке. |
extendedTinymce | false | Подключение расширенного режима Tinymce. |
wysiwygEditor | 0 | Тип wysywig-редактора: 1 – Tinymce 2 – Ckeditor |
only_card | false | Если true, в карточке объекта возможно отображение дополнительных вкладок. |
error_mess | Сообщение об ошибке в случае некорректной работы формы. | |
avatar_width | 100 | Ширина аватара. |
en_upload | true | Возможность загрузки файла изображения для аватара. |
en_log_update | true | Запись сообщения в лог при обновлении записи в БД. |
en_log_insert | true | Запись сообщения в лог при создании записи в БД. |
en_log_delete | true | Запись сообщения в лог при удалении записи в БД. |
extra_deleteAll_sql | Часть условия WHERE в sql-запросе при удалении всех записей в таблице. | |
en_autocomplete | false | Возможность autocomplete полей. |
en_selectbuttons | true | Возможность выбора кнопок в панели кнопок. |
onBeforeShowForm | sys_onBeforeShowForm | Событие по умолчанию. Перед отображением формы объекта. |
onShowForm | sys_onShowForm | Событие по умолчанию. При отображении формы объекта. |
onBeforeUpdateObject | sys_onBeforeUpdateObject | Событие по умолчанию. Перед обновлением формы объекта. |
onUpdateObject | sys_onUpdateObject | Событие по умолчанию. При обновлении формы объекта. |
onBeforeInsertObject | sys_onBeforeInsertObject | Событие по умолчанию. Перед созданием нового объекта. |
onInsertObject | sys_onInsertObject | Событие по умолчанию. При создании нового объекта. |
onBeforeDeleteObject | sys_onBeforeDeleteObject | Событие по умолчанию. Перед удалением объекта. |
onDeleteObject | sys_onDeleteObject | Событие по умолчанию. При удалении объекта. |
ro_form | false | Создании формы с полями «только для чтения». |
debug | false | Дебаг-режим. Сохранение sql-выражения в файл (по умолчанию в /userdata/mess.txt). |
enctype | Значение для аттрибута enctype в форме объекта. | |
all_chg_fields | array() | Все поля для обновления в методе update(). |
Описание методов
insert()
public function insert($posted_data = false, $record_limit = 0)
Создание новой записи в БД. Создадим запись в системной таблице sys_comments:
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->fields->id->val = '1000'; $f->fields->objid->val = 'sys_pages_main'; $f->fields->username->val = 'admin'; $f->fields->comments->val = 'Text comment'; $f->fields->userip->val = '127.0.0.1'; $s = $f->insert(); //если при создании записи произошла ошибка, выводим сообщение об ошибке. if($s) print $s;
create()
public function create($posted_data = false, $record_limit = 0)
Создание новой записи в БД. Обертка для insert().
update()
public function update($posted_data = false)
Обновление записи в БД. Обновим запись в системной таблице sys_comments с Кодом (Id) равным 1000:
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $f->read(); $f->fields->comments->val = 'Text comment_2'; $f->fields->userip->val = '127.0.0.1'; $s = $f->update(); //если при обновлении записи произошла ошибка, выводим сообщение об ошибке. if($s) print $s;
read()
public function read($read_refs = true)
Чтение записи из БД. Прочитаем запись в системной таблице sys_comments с Кодом (Id) равным 1000 и получим значение поля comments:
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $f->read(); print $f->fields->comments->val;
delete()
public function delete()
Удаление записи.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $s = $f->delete(); //если при удалении произошла ошибка, выводим сообщение об ошибке. if($s) print $s;
tryDelete()
public function tryDelete($do_delete = false, $excluded_sbobjects = '')
Проверяет, возможно ли удаление объекта. При удалении обеспечивается проверка ссылочной целостности с учетом заданного типа связи между полями родительской и подчиненных таблиц:
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $s = $f-> tryDelete (true); //если при удалении произошла ошибка, выводим сообщение об ошибке. if($s) print $s;
deleteAll()
public function deleteAll($where = '', $sel = '')
Удаление всех записей в таблице.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->deleteAll();
canDelete()
public function canDelete($id = 0)
Служебный метод. Используется в showForm(). Проверяет, можно ли удалить запись с определенным Кодом (Id).
showForm()
public function showForm()
Отображение формы объекта.
_setObjType()
public function _setObjType()
Служебный метод. Устанавливает тип объекта по названию таблицы в БД. Используется внутри метода showForm().
resetObject()
public function resetObject()
Устанавливает значения по умолчанию для полей таблицы. Метод полезен при циклическом переборе нескольких объектов.
_onBeforeShowForm()
Protected метод. Может переопределяться в дочернем классе. Вызов метода происходит до формирования значений полей формы. Используется для установки новых значений полей.
Например, одному из полей формы можно добавить новое свойство – «только для чтения»:
protected function _onBeforeShowForm() { global $parser; $this->fields->state->ro = 1; return ''; }
_onShowForm()
protected function _onShowForm()
Protected метод. Может переопределяться в дочернем классе. Вызов метода происходит до формирования html-кода формы перед отображением формы объекта. Используется для изменения внешнего вида формы.
Например, можно добавить скрытое поле к стандартной форме объекта:
protected function _onShowForm() { global $parser; $this->_output = "_fields['objtype']['val']."' />\n"; return ''; }
_onBeforeInsert()
protected function _onBeforeInsert()
Protected метод. Может переопределяться в дочернем классе. Используется до добавления записи в БД.
Например, до добавления записи в БД можно установить для поля другое значение:
protected function _onBeforeInsert() { global $parser; $this->setFieldNewVal('creatby', $parser->getUserId()); return ''; }
_onInsert()
protected function _onInsert()
Protected метод. Может переопределяться в дочернем классе. Используется после добавления записи в БД.
Например, после добавления нового пользователя можно присвоить ему роль по умолчанию:
protected function _onInsert() { global $parser; switch($this->objtype) { case 'sys_users': // Give to user default role // Add default role to a new user $role = $parser->gs('sys_settings_newrole'); if($role) $parser->addRole($this->id, $role); break; } return ''; }
_onBeforeUpdate()
protected function _onBeforeUpdate()
Protected метод. Может переопределяться в дочернем классе. Используется до обновления записи в БД во время формирования sql-выражения и установки значений полей таблицы.
protected function _onBeforeUpdate() { global $parser; $this->setFieldNewVal('updateon', $parser->utils->toDate('', true)); $this->setFieldAttr('updateon', 'ro', 0); return ''; }
_onUpdate()
protected function _onUpdate()
Protected метод. Может переопределяться в дочернем классе. Используется после обновления записи в БД.
protected function _onUpdate() { global $parser; $this->setFieldAttr('updateon', 'ro', 1); return ''; }
_onBeforeDelete()
protected function _onBeforeDelete()
Protected метод. Может переопределяться в дочернем классе. Используется до удаления записи в БД для дополнительных проверок или дополнительных действий перед удалением.
Например, перед удалением записи в БД необходимо удалить файл на сервере:
protected function _onBeforeDelete() { global $parser; if(file_exists($filepath)) unlink($filepath); return ''; }
_onDelete()
protected function _onDelete()
Protected метод. Может переопределяться в дочернем классе. Используется после удаления записи в БД. Удаление директории после удаления записи в БД:
protected function _onDelete() { global $parser; if(file_exists($filepath)) $parser->utils->removeDir($filepath, true); return ''; }
_onBeforeDeleteAll()
protected function _onBeforeDeleteAll()
Protected метод. Может переопределяться в дочернем классе. Используется до удаления всех записей в БД.
protected function _onBeforeDeleteAll () { global $parser; if(file_exists($filepath)) unlink($filepath); return ''; }
_onDeleteAll()
protected function _onDeleteAll()
Protected метод. Может переопределяться в дочернем классе. Используется после удаления всех записей в БД.
protected function _onDelete() { global $parser; if(file_exists($filepath)) $parser->utils->removeDir($filepath, true); return ''; }
onBeforeCopy()
public function onBeforeCopy($id = 0)
Protected метод. Может переопределяться в дочернем классе. Используется перед копированием объекта для установки новых значений полей. Например, обнулим значения полей при копировании объекта:
public function onBeforeCopy($id = 0) { parent::onBeforeCopy($id); $this->fields->creatby->val = 0; $this->fields->creatby->refval = ''; $this->fields->creaton->val = ''; return ''; }
onCopy()
public function onCopy($id = 0)
Protected метод. Может переопределяться в дочернем классе. Используется при копировании объекта для проведения дополнительных действий.
public function onCopy($id = 0) { global $parser; parent:: onCopy ($id); $this->fields->creatby->val = 0; $this->fields->creatby->refval = ''; $this->fields->creaton->val = ''; return ''; }
fieldExists()
public function fieldExists($field = '')
Проверка, существует ли поле в таблице в БД.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $f->read(); if($f->fieldExists('comments')) print $f->fields->comments->val;
extraPopupScript()
public function extraPopupScript($scr = '')
Дополнительный скрипт, который срабатывает после выбора элемента в проводнике.
extraFormHtml()
public function extraFormHtml($html = '')
Добавляет дополнительный код в html-код формы перед закрывающим тегом формы ().
protected function _onBeforeShowForm() { global $parser; $this->extraFormHtml("
"); }
extraClearScript()
public function extraClearScript($scr = '')
Устанавливает дополнительный javasript-код, который вызывается после нажатия на кнопку Очистить.
extraSelectScript()
public function extraSelectScript($scr = '')
Устанавливает дополнительный javasript-код, который вызывается при наступлении события onchange в списке выбора (select) формы.
addField()
public function addField($name = '', $label = '', $pars = '')
Добавление поля в набор полей. Служебный метод. Используется в методе _setFieldsFromSchema().
addTab()
public function addTab($label = '', $pars = 1)
Добавление вкладки. Служебный метод. Используется при отображении формы объекта (в методе showForm()).
addHidden()
public function addHidden($name = '', $val = '')
Добавляет скрытое поле к форме.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $ f ->addHidden('name_hidden','value_hidden');
В результате работы этого примера в форме появляется дополнительный html-код:
addButton()
public function addButton($name = '', $onclick = '', $id = '', $type = 'submit', $class = '', $title = '')
Добавляет кнопку к форме.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $ f ->addButton($parser->gt('save'), 'form_submit()', 'submitbutton', 'button');
getPopupScript()
public function getPopupScript($reload_grid = false)
Добавляет к форме скрипт отображения popup-окна. Используется при отображении формы объекта (в методе showForm()).
addTinymceScript()
public function addTinymceScript($to_header = true)
Добавляет к форме отображения объекта скрипт подключения Tinymce-редактора.
updateBlobs()
public function updateBlobs($blobs = array(), $id = '')
Обновление всех полей типа blob в зависимости от типа sql-сервера.
updateBlob()
public function updateBlob($table = '', $field = '', $val = '', $keyfield = '', $id = '')
Обновление одного поля типа blob в зависимости от типа sql-сервера.
$table = 'sys_objects'; //таблица $field = 'extradescr'; //поле, которое необходимо обновить $value = "String"; //значение для поля $keyfield = 'objid'; //ключевое поле таблицы $id = ' forum/index'; //значение ключевого поля таблицы include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->updateBlob($table, $field, $value, $keyfield, $id);
setFieldVal()
public function setFieldVal($field = '', $val = '')
Устанавливает значения для поля.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->setFieldVal('forumid', 'forum_val');
getFieldVal()
public function getFieldVal($field = '')
Получает значение поля.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->getFieldVal('forumid');
setFieldNewVal()
public function getFieldNewVal($field = '')
Устанавливает новое значения для поля.
Например, перед добавлением записи в базу устанавливаем модератором пользователя, который добавил запись:
protected function _onBeforeInsert() { global $parser; $this->setFieldNewVal('creatby', $parser->getUserId()); $this->setFieldNewVal('creaton', $parser->utils->toDate('', true)); if(!$this->getFieldNewVal('moderator')) $this->setFieldNewVal('moderator', $parser->getUserId()); return ''; }
getFieldNewVal()
public function getFieldNewVal($field = '')
Получает новое значение поля (после обновления).
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $f->read(); $f->fields->comments->val = 'Text comment_2'; $f->fields->userip->val = '127.0.0.1'; $s = $f->update(); if($s) print $s; print $f->getFieldNewVal('comments');
getFieldAttr()
public function getFieldAttr($field = '', $attr = '')
Получает аттрибут (свойство) поля.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f->id = '1000'; $f->read(); print $f->getFieldAttr('comments','val');
setFieldRefVal()
public function setFieldRefVal($field = '', $val = '')
Устанавливает значение для ссылочного поля.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f-> setFieldRefVal ('comments','val');
delsuff()
public function delsuff($field = '')
Удаляет языковый суффикс в названии поля.
translateLabels()
public function translateLabels($fn = '')
Перевод надписей возле полей в форме.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f-> translateLabels ();
_setFieldsFromSchema()
public function _setFieldsFromSchema($one_lang = true, $translate_label = false, $lang_file = '')
Устанавливает поля из xml-схемы таблицы. Служебный метод. Используется при отображении формы и основных операциях с формой (создание, обновление, удаление объектов).
formField()
public function formField($pars = array())
Отображение поля формы. Служебный метод, используется для отображения формы объекта.
uploadAvatar()
public function uploadAvatar($table = '', $id = '')
Загрузка аватара пользователя. Файл аватара загружается по адресу: userdata/avatars/$table/, где $table – таблица в БД, куда пишутся данные про аватар. Если скрипт, в котором происходит вызов метода uploadAvatar(), относится к модулю, путь загрузки файла будет следующий: userdata/modules/$moduleid/avatars/$table/, где $moduleid – код (Id) модуля.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $table = 'wforum_forums';//таблица БД, по умолчанию sys_objects $id = 'test_foto'; //Код (id) фото для аватара $f->uploadAvatar($table, $id);
deleteAvatar()
public function deleteAvatar($table = '', $id = '')
Удаление аватара пользователя.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $table = 'wforum_forums';//таблица БД, по умолчанию sys_objects $id = 'test_foto'; //Код (id) фото для аватара $f-> deleteAvatar($table, $id);
clearTabs()
public function clearTabs()
Очищает набор вкладок в форме объекта.
include_once(SYS_BASE_PATH.'main/classes/wprototype.class.php'); $f = new wPrototype('sys_comments'); $f-> clearTabs ();
showExtraFields()
public function showExtraFields($pars = array())
Отображение дополнительных полей в краточке объекта.
insertExtraFields()
public function insertExtraFields($pars = array())
Добавление дополнительных полей в карточке объекта.