|
In primele doua tutoriale din aceasta serie am invatat despre structura unei aplicatii Zend Framework, controllere, modele, view-uri si despre cum sa adaugi / stergi o stire din baza de date. In aceasta ultima parte vei putea citi despre citirea si modificarea stirilor.
Vizualizarea stirilor
Pentru afisarea stirilor vom crea un tabel html asemanator celui de mai jos:
Actiunea view are urmatorul continut:
<?php public function viewAction() {
$viewObject = new Zend_View();
$viewObject->setScriptPath(APPLICATION_PATH.'views/');
$NewsModel = new NewsModel();
$NewsRows = $NewsModel->fetchAll();
$viewObject->NewsArray = $NewsRows;
echo $viewObject->render("view.phtml");
}
?>
Dupa cum poti observa, scopul acestei actiuni este citirea tuturor stirilor din tabel cu ajutorul functiei fetchAll() a modelului News. Apoi, un vector ce contine toate inregistrarile ($NewsRows) este setat ca proprietate a obiectului de tip view. In interiorul view-ului, pentru fiecare stire sunt afisate titlul, data si doua linkuri, unul catre pagina de modificare si unul catre pagina de stergere:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
<body>
<div align="left" style="padding:50px;">
<ul style="padding:0px;margin:0px;">
<li><a href="<?php echo DIR_LOCALPATH?>">Inapoi la prima pagina</a></li>
</ul>
<h1>Vizualizare / editare stiri</h1>
<?php if (count($this->NewsArray) > 0): ?>
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr>
<td width="200" align="left" class="table_header">Titlu</td>
<td width="120" align="left" class="table_header">Data</td>
<td align="left" class="table_header">Actiuni</td>
</tr>
<?php foreach ($this->NewsArray as $NewsRow): ?>
<tr>
<td width="200" align="left" class="table_rows"><?php echo stripslashes($NewsRow->Titlu)?></td>
<td width="120" align="left" class="table_rows"><?php echo $NewsRow->Data?></td>
<td align="left" class="table_rows"> <a href="<?php echo DIR_LOCALPATH?>index/modify/id/<?php echo $NewsRow->Id?>">Editare</a> | <a href="<?php echo DIR_LOCALPATH?>index/delete/id/<?php echo $NewsRow->Id?>">Stergere</a></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Nu exista inregistrari in baza de date.</td>
</tr>
</table>
<?php endif; ?>
</div>
</body>
</html>
Modificarea unei stiri
La fel ca stergerea, modificarea necesita ca parametru id-ul stirii pe care vrem sa o editam: $this->_request->getParam('id'). Utilizand modelul News, citim inregistrarea corespunzatoare din tabelul MySQL cu ajutorul functiei fetchRow("conditie where"), apoi transmitem id-ul, titlu, data, etc. stirii respective ca proprietati ale view-ului:
<?php public function modifyAction() {
if(is_numeric($this->_request->getParam('id')) && $this->_request->getParam('id') != 0) {
$NewsModel = new NewsModel();
$NewsRow = $NewsModel->fetchRow('Id = '.$this->_request->getParam('id'));
$viewObject = new Zend_View();
$viewObject->setScriptPath(APPLICATION_PATH.'views/');
$viewObject->Id = $NewsRow->Id;
$viewObject->Titlu = stripslashes($NewsRow->Titlu);
$viewObject->Data = $NewsRow->Data;
$viewObject->Descriere = stripslashes($NewsRow->Descriere);
$viewObject->Continut = stripslashes($NewsRow->Continut);
echo $viewObject->render("modify.phtml");
}
}
?>
Formularul de modificare va arata astfel:
Iata si codul din view:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
<body>
<div align="left" style="padding:50px;">
<ul style="padding:0px;margin:0px;">
<li><a href="<?php echo DIR_LOCALPATH?>">Inapoi la prima pagina</a></li>
<li><a href="<?php echo DIR_LOCALPATH?>index/view">Inapoi la vizualizare stiri</a></li>
</ul>
<h1>Modificare stire</h1>
<form name="modifyform" id="modifyform" action="<?php echo DIR_LOCALPATH?>index/modifysave" method="post" enctype="multipart/form-data">
<input type="hidden" name="Id" id="Id" value="<?php echo $this->Id?>" />
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr>
<td width="120">Titlu</td>
<td><input type="text" name="title" id="title" value="<?php echo $this->Titlu?>" /></td>
</tr>
<tr>
<td>Data</td>
<td><input type="text" name="date" id="date" value="<?php echo $this->Data?>" /></td>
</tr>
<tr>
<td valign="top">Descriere</td>
<td><textarea name="description" id="description" rows="5" cols="70"><?php echo $this->Descriere?></textarea></td>
</tr>
<tr>
<td valign="top">Continut</td>
<td><textarea name="content" id="content" rows="10" cols="70"><?php echo $this->Continut?></textarea></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submitBtn" id="submitBtn" value="Salveaza" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
Dupa cum poti observa, variabilele pe care le-am setat ca proprietati ale obiectului view sunt afisate in interiorul unui atribut value pentru titlu si data, sau intre tag-urile <textarea> si </textarea> pentru continut si descriere. Id-ul este transmis catre actiunea de salvare a stirii printr-un camp hidden.
<input type="hidden" name="Id" id="Id" value="<?php echo $this->Id?>" />
Actiunea de modificare este similara celei de adaugare, cu deosebirea ca vom folosi functia update() a modelului News. Aceasta metoda are ca parametri un array asociativ de tip nume_coloana => valoare si o conditie where ('Id = '.$POST['Id']) prin care specificam randurile afectate de query-ul UPDATE. In final, este afisat acelasi view cu un mesaj de succes.
<?php public function modifysaveAction() {
if($this->getRequest()->isPost()) {
$POST = $this->getRequest()->getPost();
if(!empty($POST)) {
$arrData = array(
'Titlu' => $POST['title'],
'Data' => $POST['date'],
'Descriere' => $POST['description'],
'Continut' => $POST['content']
);
$NewsModel = new NewsModel();
$NewsModel->update($arrData,'Id = '.$POST['Id']);
}
}
$viewObject = new Zend_View();
$viewObject->setScriptPath(APPLICATION_PATH.'views/');
echo $viewObject->render("save.phtml");
}
?>
Aici se incheie aceasta serie de tutoriale. Pentru a descarca toate sursele, acceseaza resursa cu acelasi nume.
|