1 Регистрация Логин – имя которое Вы будете использовать для входа в админку. Хост – IP хостинга к базе данных (например 91.200.41.106) Имя базы – имя базы данных. Пользователь – пользователь для работы с базой данных. Пароль – пароль доступа пользователя к базе данных. Порт – порт к базе данных (например 3306). После регистрации и авторизации на сайте, Вы попадаете в административную часть для работы с Вашей базой данных. Для начала работы с таблицами Вашей базы данных, необходимо сгенерировать модели для их работы, а так же по моделям описать схему, по которой будут строится контроллеры, шаблоны и формы для работы. Что бы проделать все эти этапы , необходимо зайти в пункт меню Генерация: И в верхнем меню нажать Генерировать модели: 2 После этого модели и стандартные схемы (схемы спроектированные по базе данных), будут созданы и Вы увидите примерно следующую страничку в вкладке Генерация: Можно просмотреть, а также изменить, схемы, которые были созданы при нажатии кнопки Редактировать: Форма редактирования схемы будет иметь вид: 3 На этой форме можно изменять схему Вашего объекта. Для того чтобы при сохранение Файл был сгенерирован, необходимо поставить галочку напротив Сгенерировать файл и сохранить схему. Для Генерации файлов предоставляющих работу с Вашим объектом необходимо во вкладке Генерация проставить галочки напротив тех объектов, которые вы хотите сгенерировать и внизу формы нажать кнопку Ок: После этого Вы сможете удаленно работать с данными Вашей базы данных, используя наш сервис. Для вступления изменений в силу необходимо перезагрузить страницу. После перезагрузки в списке меню, в папке Объекты, добавятся элементы, которые Вы сгенерировали: 4 При заходе в любой с пунктов меню, мы заходим на главную страницу объекта, где отображается полный список всех записей таблицы: В данном окне можно изменять количество выводимых объектов на страницу: Осуществлять переход по страницам: Можно фильтровать таблицу по любому с полей, для этого необходимо нажать на заголовок любой с колонки таблицы. Так же присутствует поиск: При нажатии на него, выпадает окно: Где можно указать практически любое условие для поиска необходимой записи. В каждой строке таблицы мы имеем панель управления записью: Первый элемент – редактирование записи. При нажатии на него вы попадаете на форму редактирования данной записи. Второй – удаление (объект удаляется и вы возвращаетесь на 5 страницу со списком записей). Третий – создание записи с такими же параметрами. При нажатии вы попадаете на редактирование созданной записи. Для множественного удаления записей, необходимо выделить галочками в последней колонки, записи, которые хотим удалить и нажать кнопку удалить в панели управления таблицы: В верхнем меню Вы можете обновить фрейм со списком записей или же добавить новую запись. Перейдем к редактированию записи: Мы видим перед собой форму созданную автоматически, без каких либо настроек. В верхней панели управления мы можем вернуться к предыдущей страницы (список записей), сохранить изменения, обновить страницу, а так же удалить объект. Система имеет большое количество полей, которые предоставляет удобное управление Вашими данными, но для этого необходимо правильно описать поля в схеме объекта. Поэтому перейдем к правилам описания схемы объекта. 6 Как видим описание нашей схемы лежит в массиве $arr = array(). Опишем детальней все возможные поля. 'name' => 'Song', название объекта (латинские буквы) 'submit' => 'Save', имя кнопки при редактирование/добавление 'tableName' => 'TablenameAlbum', имя таблицы всех объектов (по умолч. имя модели) 'model' => 'Newadmin_Model_Song', модель для работы с объектом Модель для работы с объектом строится по такому правилу – с начала идет приставка Newadmin_Model_, а потом имя таблицы в Вашей базе данных для данного объекта. Например: users - Newadmin_Model_Users users_info - 'Newadmin_Model_UsersInfo users_photos_comments - Newadmin_Model_UsersPhotosComments 'key' => 'song_id', ключевое поле (PRIMARY KEY) Описание пункта меню, для данного объекта имеет следующий вид: 'menu' => array( 'visibly' => true, 'name' => 'Песни', описание пункта меню видимость имя пункта меню ), Так же можно добавить подключение каких-то своих скриптов: 'js' => '<script></script>', 'css' => '<script></script>', Можно указать какие поля показывать в главной таблице объектов с их списком, для этого необходимо использовать такую структуру: 'tableColumn' => array( описание полей таблицы '0' => array( 'COLUMN_NAME' => 'name', имя поля ), '1' => array( 'COLUMN_NAME' => 'description', ), ) Поддерживается разделение на табы в формах редактирования и добавление – это присутствует для того что бы отделать логически не связанные элементы объекта: 7 Для этого в схеме необходимо описать массив со списком табов: 'tabs' => array( описание табов '0' => array( 'type' => 'action', таб типа екшен 'name' => 'tab3', имя таба 'label' => 'Tab3', название 'module' => 'newadmin', модуль 'controller' => 'index', 'action' => 'some', 'params' => "array('key1' => 'value1')" параметры для екшена ), '1' => array( 'type' => 'form', тип форма 'name' => 'tab1', имя таба 'label' => 'Tab1', название ), '2' => array( 'type' => 'form', 'name' => 'tab2', 'label' => 'Tab2', ), ), Существует 2 типа табов: - форма – таб в который можно добавлять элементы формы (полей) нашего объекта; - екшен – в описание этого таба больше параметров, он служит для вызова определенного действия в теле таба формы. 8 Для того что бы указать что определенный элемент будет принадлежать какому-то табу, необходимо в описание поля добавить параметр 'tab' => 'tab1', где 'tab1' – имя таба, описанного в списке табов. В большинстве случаев в проектах используется связь через промежуточную таблицу, для этой ситуации наша система имеет специальный элемент. Для того чтобы описать таблицы которые связаны через промежуточную таблицу, и Вы хотите чтобы они редактировались именно в данном объекте, используется элемент связь. Например: есть 3 объекта песни, артисты и связь между ними создана через промежуточную таблицу, то в данном случае целесообразно редактировать эту связь в объекте песни. Описание связи имеет следующий вид: 'relation' => array( массив связей '0' => array( 'name' => 'artistalbum', имя связи 'tableName' => 'TableNameArtistAlbum', название таблицы (по умолч. имя) 'modelLink' => array( модель с которой соединяется 'model' => 'Newadmin_Model_Album', модель 'key' => 'id', ключевое поле 'name' => 'name', поле с именем 'fields' => 'id,name,description' поля в таблице ), 'modelConect' => array( связная модель 'model' => 'Newadmin_Model_Artistalbum', модель связной таблицы 'key' => 'artist_id', ключевое поле в таблице 'conn_key' => 'album_id' связное поле в таблице ), ), '1' => array( 'name' => 'artistsong', 'modelLink' => array( 'model' => 'Newadmin_Model_Song', 'key' => 'song_id', 'name' => 'name', 'fields' => 'song_id,name' ), 'modelConect' => array( 'model' => 'Newadmin_Model_Artistsong', 9 'key' => 'artist_id', 'conn_key' => 'song_id' ), ), ), Сам элемент имеет вид (например при редактирование новости, связь через промежуточную таблицу с тэгами новости): Для того что бы удалить не нужные записи, мы используем тот же инструмент, что и для обычного списка записей. Для того что бы добавить новый элемент не обходимо нажать Добавить в нижней панели управления: После чего на экране увидим: 10 Это таблица со списком всех тэгов, для добавление необходимо выделить необходимые записи и нажать кнопку Добавить, после чего мы получим сообщение о успешном добавление. Данная таблице так же имеет поиск по записям, пейджинг и выбор количества выводимых объектов на страницу. Перейдем к описанию полей таблицы. Все поля таблицы описываются в массиве 'metadata'=> array(); Типы существующих элементов: 'text' => 'Textarea', текстовое поле 'password' => 'Password', пароль 'int' => 'Text', целое число 'varchar' => 'Text', поле для ввода 'tinyint' => 'Checkbox', чекбокс 'date' => 'Text', дата 'datepicker' => 'Text', поле выбора даты 'float' => 'Text', 'mediumint' => 'Text', 'select' => 'Select', 'radio' => 'Radio', 'multicheckbox' => 'MultiCheckbox', 'multiselect' => 'Multiselect', 'edittext' => 'Textarea', поле текстовый редактор 'relation' => 'Text', поле связи с другой таблицы 'file' => 'File', Некоторые поля которые схожи по своему описанию задаются одинаково, поэтому опишем некоторые с полей: 1. Текстовое поле 1 => array( 'COLUMN_NAME' => 'name', имя элемента 'DATA_TYPE' => 'text', тип элемента 'label' => 'Name', подпись поля 'decorators' => array('rows' => '4', 'cols' => '3'), декораторы 'attr' => array( атрибуты array( 'name' => 'maxlength', 'params' => array('80') ) 11 ), 'jsvalidators' => array( яваскрипт валидаторы 'maxlength' => 5, 'minlength' => 4, 'nowhitespace' => true, 'alphanumeric' => true ), ), Как Вы видите через описание поля, можно указать почти все возможные атрибуты к полям. Массив атрибуты имеет синтаксис: array( 'name' => 'maxlength', имя атрибута 'params' => array('80') параметры в виде списка в массиве (например: array(‘80’, false) ) ) 2. Varchar 2 => array( 'COLUMN_NAME' => 'description', 'DATA_TYPE' => 'varchar', 'label' => 'DESC', 'required' => 'true', 'attr' => array( признак обязательного поля атрибуты array( 'name' => 'maxlength', 'params' => array('80') ) ), 'jsvalidators' => array( 'maxlength' => 5, 'minlength' => 2, 'nowhitespace' => true, 'alphanumeric' => true ), ), Как видим описание мало чем отличается от обычного текстового поля. 12 3. HTML WYSIWYG редактор 2 => array( 'COLUMN_NAME' => 'description', имя поля 'DATA_TYPE' => 'edittext', тип поля 'tab' => 'tab1', принадлежность табу 'label' => 'DESC', подпись элемента 'required' => 'true', признак обязательного поля 'hidden' => 'true', признак невидимости 'attr' => array( атрибуты array( 'name' => 'maxlength', название атрибута 'params' => array('280') значения атрибута ), атрибут для невидимости array( 'name' => 'disabled', название атрибута 'params' => array('disabled') значения атрибута ) ), ), Описанное поле будет иметь вид: 4. Дата 2 => array( 'COLUMN_NAME' => 'date', 'DATA_TYPE' => 'date', 'required' => 'true', 13 'format' => 'dd.MM.yyyyy' формат даты ), 5. Выбор даты 0 => array( 'COLUMN_NAME' => 'n_date', 'DATA_TYPE' => 'datepicker', 'label' => 'Дата', 'format' => 'yy-mm-dd 00:00:00', 'tab' => 'tab1', 'editable' => false, 'attr' => array( array( 'name' => 'maxlength', 'params' => array('25') ) ), ), Получим такой элемент: 6. Checkbox 1 => array( 'COLUMN_NAME' => 'n_show', 'DATA_TYPE' => 'tinyint', 'label' => 'Показывать', 'editable' => false, 'tab' => 'tab1', 'required' => 'true', 14 'attr' => array( array( 'name' => 'maxlength', 'params' => array('1') ) ), ), Элемент будет иметь вид: 7. Выбор со списка 9 => array( поле радиобатон с 3 значениями вместо значений можно передавать функцию, которая будет возвращать массив значений 'COLUMN_NAME' => 'radio3', 'DATA_TYPE' => 'radio', 'required' => 'true', 'values' => array( значения радио 0 => array( "id" => "", "value" => "1" ), 1 => array( "id" => "", "value" => "2" ), 2 => array( "id" => "", "value" => "3" ) ) ), Вместо значений можно передавать функцию, которая будет возвращать массив значений, например: 'values' => Newadmin_Model_News::getCategories() Для этого существует специальная функция "Newadmin_Model_CmsNaBase :: getMultioptions( 'Newadmin_Model_Song', 'song_id', 'name')", 15 получение значений елемента: 1 - с какой таблицы 2 - key 3 - value 8. Выбор со списка (Select) 24 => array( 'COLUMN_NAME' => 'n_spec_section_type', 'DATA_TYPE' => 'select', 'label' => 'n_spec_section_type', 'editable' => false, 'required' => 'true', 'tab' => 'tab1', 'attr' => array( array( 'name' => 'maxlength', 'params' => array('8') ) ), 'values' => array( 0 => array( 'id' => 'general', 'value' => 'general', ), 1 => array( 'id' => 'tetrapak', 'value' => 'tetrapak', ), 2 => array( 'id' => 'organic', 'value' => 'organic', ), ), 9. Поле выбора с другой таблицы. Часто у нас возникает ситуация, когда в таблице имеется поле, которое отвечает за элемент с другой таблицы. Например у нас есть таблица news и 16 в ней есть поле тип новости (n_tn_id) , которое берется с таблицы типы новостей, для того чтобы облегчить выбор этого параметра, мы используем специальное поле: 9 => array( 'COLUMN_NAME' => 'n_tn_id', 'DATA_TYPE' => 'relation', 'label' => 'n_tn_id', 'tab' => 'tab1', 'editable' => false, 'attr' => array( array( 'name' => 'maxlength', 'params' => array('1') ) ), 'link' => array( 'model' => 'Newadmin_Model_News', модель данного объекта 'key' => 'tn_id', 'connmodel' => 'Newadmin_Model_TypeNews', модель таблицы с которой соединяемся 'conn_key' => 'tn_id', 'fields' => 'tn_id,tn_name_ru' ключевое поле с соединяемой таблицы поля с соединяемой таблицы ), ), После описания получим такое поле: При нажатии на стрелку с лева от поля, получим: 17 Тут можно выбрать тип материала, выделить его галочкой и нажать Добавить в нижней панели управления. 10. MultyCheckbox 3 => array( 'COLUMN_NAME' => 'test', 'DATA_TYPE' => 'multicheckbox', 'label' => 'TEST', 'values' => "Newadmin_Model_CmsNaBase::getMultioptions ('Newadmin_Model_Song','song_id','name')", ), Так же значения можно задавать массивом: 'values' => array( значения радио 0 => array( "id" => "1", "value" => "1" ), 1 => array( "id" => "2", "value" => "2" ), 18 2 => array( "id" => "3", "value" => "3" ) ) Мы получим поле для выбора одного из значений. 11. MultySelect 5 => array( 'COLUMN_NAME' => 'test', 'DATA_TYPE' => 'multiselect', 'label' => 'TEST', 'values' => "Newadmin_Model_CmsNaBase::getMultioptions ('Newadmin_Model_Song','song_id','name')", ), Поле идентично предыдущему. 12. Поле (multycheckbox) для выбора с другой таблицей с возможностью ее наполнения. Иногда у нас возникает ситуация, когда у нас есть поле, которое выбирается с другой таблицы и для удобства наш сервис добавляет возможность наполнять вспомогательную таблицу: 3 => array( 'COLUMN_NAME' => 'test', 'DATA_TYPE' => 'multicheckbox', 'label' => 'TEST', 'addValues' => 'song', 'manual' => '1', признак использования значений с другой таблицы (справочник) 'link' => '/newadmin/song/add', ссылка на добавление элементов в справочник (обязательное, если заполнено предыдущее поле) 'values' => "Newadmin_Model_CmsNaBase::getMultioptions('Newadmin_Model_Song', 'song_id','name')", получение значений елемента: 1 - с какой таблицы 2 - key 3 - value 'relation' => array( 19 'name' => 'albumsong', имя связи 'modelLink' => array( таблица с которой связано 'model' => 'Newadmin_Model_Song', имя модели 'key' => 'song_id', 'name' => 'name', ключевое поле значение ), 'modelConect' => array( промежуточная таблица 'model' => 'Newadmin_Model_Albumsong', 'key' => 'album_id', модель имя поля в промежуточной таблицы для значений данного поля 'conn_key' => 'song_id' имя поля в пром. табл. для значений выбранных в поле ), ), ), При описание данного поля, оно будет иметь вид: При нажатии на добавление значений, мы получим выпадающие окно с формой добавление значения в таблицу-справочник, после добавление необходимо закрыть окно и нажать кнопку обновления списка. 13. Поле (multyselect) для выбора с другой таблицей с возможностью ее наполнения. 4 => array( 'COLUMN_NAME' => 'reltest', 'DATA_TYPE' => 'multiselect', 20 'label' => 'TEST', 'manual' => '1', 'values' => "Newadmin_Model_CmsNaBase :: getMultioptions ('Newadmin_Model_Song' ,'song_id', 'name')", 'relation' => array( 'name' => 'albumsong', 'modelLink' => array( 'model' => 'Newadmin_Model_Song', 'key' => 'song_id', 'name' => 'name', ), 'modelConect' => array( 'model' => 'Newadmin_Model_Albumsong', 'key' => 'song_id', 'conn_key' => 'album_id' ), ), ), Описание похоже на предыдущее поле. В итоге получим: Поведение так же аналогично предыдущему объекту. 14. Поле (select) для выбора с другой таблицей с возможностью ее наполнения. 3 => array( 'COLUMN_NAME' => 'song_id', 'DATA_TYPE' => 'select', 'label' => 'SONG', 'addValues' => 'song', 'manual' => '1', 'editable' => true, 'link' => '/newadmin/song/add', 'values' => "Newadmin_Model_CmsNaBase::getMultioptions('Newadmin_Model_Song','song_id','name')", 21 'relation' => array( 'name' => 'albumsong', 'modelLink' => array( 'model' => 'Newadmin_Model_Song', 'key' => 'song_id', 'name' => 'name', ), ), ), Поле будет иметь вид: 15. Пользовательский select. 5 => array( 'COLUMN_NAME' => 'sel', 'DATA_TYPE' => 'userselect', 'label' => 'TEST', 'description' => 'dfdsfsdfsdf', 'relation' => array( 'name' => 'albumsong', 'modelLink' => array( 'model' => 'Newadmin_Model_Song', 'key' => 'song_id', 'name' => 'name', ), 'modelConect' => array( 'model' => 'Newadmin_Model_Albumsong', 'key' => 'song_id', 'conn_key' => 'album_id' ), ), ), Описание так же схоже к предыдущему, но после описания этого поля мы получаем: 22 В правом поле мы видим выбранные объекты, для того чтобы выбирать объекты необходимо воспользоваться кнопками управления (стрелками). 16. Файл 4 => array( 'COLUMN_NAME' => 'name', 'DATA_TYPE' => 'file', 'tab' => 'tab1', поле файл принадлежность табу 'label' => 'FILE', 'newname' => "date()", 'destination' => '', новое имя файла путь к файлу 'required' => 'true', 'validators' => array( 0 => array( 'name' => 'Size', 'params' => array("false", "10240000") ), 1 => array( 'name' => 'Extension', 'params' => array("false", "'jpg,png,gif'") ), 2 => array( пользовательский валидатор 'name' => 'new MyValid_NumericBetween()', 'params' => array("true"), 'uservalidator' => true валидатора ), ), признак пользовательского 23 превью для файла 'preview' => array( '0' => array( 'width' => '100', 'height' => '100' ), ), ), Это поле одно из самых сложных, поэтому требует правок в коде, для работы под определённый объект. При изменение схем, старые схемы сохраняются и к ним можно откатиться с помощью элемента в Пункте меню Генерация – Редактирование объекта: Тут можно получить схему за определенную дату и откатиться к ней и перегенерировать все файлы для работы с Вашим объектом. При генерации файлы, который были сгенерированы по старой схеме так же сохраняются. На этом мы закончим описание схем таблиц и перейдем к администрированию ресурса под Вашу базу данных (пункт меню Администрирование). 1. Ресурсы. В этой вкладке содержаться все ресурсы (действия) для работы с Вашей базой данных. Их можно добавлять, редактировать и удалять (не рекомендуется). При удаление ресурс может работать не корректно. При правильной генерации объектов Вашей базы ресурсы создаются автоматически и их работа корректна. 24 2. Роли. Этот пункт отвечает за роли доступа к нашему ресурсу по Вашей базе данных. Для того чтобы запретить какой-то роле доступ к определенным ресурсам необходим зайти в редактирование роли и в добавить необходимые ресурсы в таблицу Правила: 3. Пользователи. Этот пункт меню отвечает за редактирование, добавление и удаление пользователей, которые могут иметь доступ к Вашей базе данных через наш ресурс. 4. Меню. Меню отвечает за формирование структуры меню, а так же его содержимого.