Para ello añadiremos el fichero /application/forms/Doc.php:
<?php
class Form_Doc extends Zend_Form
{
public function init ()
{
$this->setMethod('post');
// Nou element id (hidden)
$id = $this->createElement('hidden', 'id');
// Opcions de l'element
$id->setDecorators(array(
'ViewHelper'
));
$this->addElement($id);
// Nou element Títol
$titol = $this->createElement('text', 'titol')
->setLabel('Títol: ')
->setRequired(TRUE)
->setAttrib('size', 40)
->addFilter('StripTags');
$this->addElement($titol);
// Nou element descripció
$descripcio = $this->createElement('text', 'descripcio')
->setLabel('Descripció: ')
->setRequired(FALSE)
->addFilter('StripTags');
$this->addElement($descripcio);
// Nou element Autors
$autors = $this->createElement('multiselect', 'lst_autors')
->setLabel('Author: ')
->setRequired(TRUE)
->setAttrib('class', 'form-field')
->setRegisterInArrayValidator(false)
->setAttrib('multiple', 'multiple');
$this->addElement($autors);
// Nou element submit
$submit = $this->createElement('submit', 'submit')->setLabel('Submit');
$this->addElement($submit);
}
}
En el modelo de datos será necesario incluir la función miembro para la creación del documento. Para ello editaremos el fichero /application/models/Docs.php y añadiremos las siguientes funciones:
public function createDocs ($titol, $descripcio, $lst_autors)
{
// Creació d'un nou registre
$row = $this->createRow();
if ($row) {
// actualitzem valors
$row->titol = $titol;
$row->descripcio = $descripcio;
if ($row->save()) {
// $id_document = $this->_db->lastInsertId();
$id_document = $row->id_document;
$this->salvaAutors($id_document, $lst_autors);
}
return true;
} else {
throw new Zend_Exception("El document no s'ha pogut crear!");
}
}
private function salvaAutors ($id_document, $lst_autors)
{
$db = Zend_Db_Table::getDefaultAdapter();
foreach ($lst_autors as $id_autor) {
$data = array(
'id_document' => $id_document,
'id_autor' => $id_autor
);
$rows_affected = $db->insert('autors_documents', $data);
}
}
En el controlador añadiremos la acción create para que responda a la petición de creación de nuevo documento, para ello editaremos el fichero /application/controllers/DocsController.php y incluiremos la siguiente función miembro:
public function createAction ()
{
$frm = new Form_Doc();
if ($this->getRequest()->isPost()) {
if ($frm->isValid($_POST)) {
$titol = $frm->getValue('titol');
$descripcio = $frm->getValue('descripcio');
$lst_autors = $frm->getValue('lst_autors');
$mdl = new Model_Docs();
$result = $mdl->createDocs($titol, $descripcio, $lst_autors);
if ($result) {
// redirecció a l'acció index
return $this->_redirect('/docs/index');
}
}
}
$frm->setAction('/docs/create');
$this->view->form = $frm;
}
Antes de finalizar hemos de crear una vista para la acción que acabamos de definir, para ello añadiremos el siguiente fichero /application/views/scripts/docs/create.phtml con el contenido:
<h2><?php echo $this->translate('Creació d\' un nou document'); ?></h2>
<p><?php echo $this->translate('Per crear un nou document complementi aquest formulari i polsi acceptar...'); ?></p>
<?php echo $this->form; ?>
Ahora ya podemos ejecutar nuestro formulario para ver que pinta tiene:
Como podemos observar el acabado del multiselección es bastante pobre. Vamos a incluir el plugin de jQuery, a ver que tal queda.
Primero de todo hemos de ubicar los scripts de Multiselect y jQuery en las carpetas adecuadas. Los ficheros deberían ser:
- /public/js/jquery.lwMultiSelect.js
- /public/js/jquery-1.11.0.js
- /public/css/jquery.lwMultiSelect.css
- /public/doublearrow.png
Modificaremos la vista de creación de documentos para que incluya los scripts e inicialice el multiselect. Editamos /application/views/scripts/docs/create.phtml:
<?php
$this->headScript()->prependFile('/js/jquery.lwMultiSelect.js');
$this->headScript()->prependFile('/js/jquery-1.11.0.js');
$this->headLink()->prependStylesheet('/css/jquery.lwMultiSelect.css');
$strAddAll = $this->translate('Afegir tots');
$strClear = $this->translate('Netejar');
$strSelected = $this->translate('Seleccionats');
$this->headScript()->appendScript('$(document).ready(function() {
$("#lst_autors").lwMultiSelect({
addAllText:\'' . $strAddAll . '\',
removeAllText:\'' . $strClear . '\',
selectedLabel:\'' . $strSelected . '\'});
});
', $type = 'text/javascript');
?>
<h2><?php echo $this->translate('Creació d\' un nou document'); ?></h2>
<p><?php echo $this->translate('Per crear un nou document complementi aquest formulari i polsi acceptar...'); ?></p>
<?php echo $this->form; ?>
Ahora nuestro formulario tendrá un aspecto mucho más profesional:


