Класс 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())
Добавление дополнительных полей в карточке объекта.