This repository has been archived by the owner on Jun 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
Core_Controller_Action_Scaffold
Nikolay Galkin edited this page Jun 7, 2013
·
2 revisions
В модели должны быть описаны следующие методы (если используете Core_Model_Table?, то они уже будут в вашей моделе):
<?php
/**
* create
*
* create entity
*
* @param array $data
* @return Core_Model_Abstract
*/
public function create($data = array());
/**
* find
*
* @param integer $id
* @return Core_Db_Table_Row_Abstract
*/
public function find($id);
/**
* setFromArray
*
* @param array $data
* @return Core_Model_Abstract
*/
public function setFromArray($data = array());
/**
* save
*
* call save method
*
* @return Core_Model_Abstract
*/
public function save();
/**
* deleteById
*
* delete item by id
*
* @param int $id primary key
* @return int The number of rows deleted.
*/
public function deleteById($id);
Приведу пример реализации Page контроллера:
<?php
// мы должны наследовать абстрактный класс Core_Controller_Action_Scaffold
class Admin_PagesController extends Core_Controller_Action_Scaffold
{
public function indexAction()
{
// see view script
// use dojox.grid.DataGrid
}
/**
* _getModel
*
* return model for scaffolding
*
* @return Core_Model_Abstract
*/
public function _getModel()
{
return new Model_Page();
}
/**
* _getDbTable
*
* return DBTable for scaffolding
*
* @return Core_Db_Table_Abstract
*/
public function _getDbTable()
{
return new Model_DbTable_Page();
}
/**
* _getCreateForm
*
* return create form for scaffolding
*
* @return Zend_Dojo_Form
*/
public function _getCreateForm()
{
return new Model_Form_Page_Edit();
}
/**
* _getEditForm
*
* return edit form for scaffolding
*
* @return Zend_Dojo_Form
*/
public function _getEditForm()
{
$form = new Model_Form_Page_Edit();
$form->addElement(new Zend_Form_Element_Hidden('id'));
return $form;
}
}
Scaffold имеет два встроенных шаблона:
- /views/scripts/scaffold/create.phtml
- /views/scripts/scaffold/edit.phtml
Если вы не собираетесь их использовать переопределите соответствующие методы в контроллере:
<?php
public function createAction()
{
parent::createAction();
$this->_setDefaultScriptPath();
}
Шаблон для index надо будет создавать по образу и подобию:
<?php
// подключаем dojo
$this->dojo()->enable();
// добавляем функцию, которая будет вызвана по окончанию загрузки DOM'а
$this->dojo()->addOnLoad('onLoad');
// шкурка для дадагрида
$this->headLink()->appendStylesheet('/scripts/dojox/grid/resources/tundraGrid.css');
// тут пишем javascript
$this->headScript()->captureStart();
?>
// описываем поля датагрида
var cells = [
{
name: "Title",
field: "title",
width:'100px'
},
{
name: "Alias",
field: "alias",
width:'120px',
},
{
name: "Description",
field: "description",
width:'226px'
},
{
name: "Date create",
field: "date_create",
width:'124px'
},
{
name: "Date update",
field: "date_update",
width:'124px'
}
];
// инициализируем датагрид
function onLoad() {
dojo.require('core.scaffold');
/**
* @param Array cells
* @param String id of container
* @param String url of controller
*/
var datagrid = new core.scaffold(cells, 'gridContainer', '/admin/pages');
}
<?php
$this->headScript()->captureEnd();
?>
<div class="gridControl">
<?php
// добавляем фильтры для грида
echo $this->comboBox('grid-field',
'title',
array('jsid'=>'grid-field','autocomplete' => false),
array(),
// описываем поля
array('title'=>'Title',
'alias'=>'Alias',
'description'=>'Description')
);
// текстовое поле фильтра
echo $this->validationTextBox('grid-filter',
'*',
array('jsid'=>'grid-filter',
'regExp'=> '\S{1,}',
'required'=> 'true'),
array('style'=>'padding:2px 1px 1px')
);
// кнопки фильтрации и отмены
echo $this->button('grid-search', 'Filter', array('jsid'=>'grid-search','baseClass'=>'gridButton'));
echo $this->button('grid-undo', 'Undo', array('jsid'=>'grid-undo','baseClass'=>'gridButton'));
?>
</div>
<!-- контейнер датагрида -->
<div class="gridContainer" id="gridContainer" style="height:300px"></div>
<div class="gridControl">
<?php
// кнопка создания новых элементов
echo $this->button('grid-new', 'Create New Page', array('jsid'=>'grid-new','baseClass'=>'gridButton'));
// кнопка удаления выделенных строк
echo $this->button('grid-del', 'Delete Selected Pages', array('jsid'=>'grid-del','baseClass'=>'gridButton'));
?>
</div>