Implementarea unui modul de stiri in Zend Framework. Partea a III-a - Afisarea si modificarea stirilor
22.06.2010
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.
1548 afisari 0 Rating (3 voturi) 30 min

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:

Implementarea unui modul de stiri in Zend Framework. Partea a III-a - Afisarea si modificarea stirilor

Actiunea view are urmatorul continut:

<?php public function viewAction() {
        
    // afiseaza tabelul de stiri cu zend view
    $viewObject = new Zend_View();
    $viewObject->setScriptPath(APPLICATION_PATH.'views/');
    
    // citeste stirile din baza de date
    $NewsModel = new NewsModel();        
    $NewsRows = $NewsModel->fetchAll();
    
    $viewObject->NewsArray = $NewsRows;        
    echo $viewObject->render("view.phtml");
 
}//end of viewAction() method
?>

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() {
        
    // verifica daca id-ul stirii a fost transmis ca parametru
    if(is_numeric($this->_request->getParam('id')) && $this->_request->getParam('id') != 0) {
        
        // citeste din baza de data stirea cu id-ul corespunzator
        $NewsModel = new NewsModel();
        $NewsRow = $NewsModel->fetchRow('Id = '.$this->_request->getParam('id'));
        
        // incarca formularul de modificare cu zend view
        $viewObject = new Zend_View();
        $viewObject->setScriptPath(APPLICATION_PATH.'views/');
        
        // seteaza id-ul stirii (utilizat la salvarea datelor)
        $viewObject->Id =             $NewsRow->Id;
        
        // seteaza in view informatiile citite din baza de date
        $viewObject->Titlu =         stripslashes($NewsRow->Titlu);
        $viewObject->Data =         $NewsRow->Data;
        $viewObject->Descriere =    stripslashes($NewsRow->Descriere);
        $viewObject->Continut =     stripslashes($NewsRow->Continut);
        
        echo $viewObject->render("modify.phtml");
    }
    
}//end of modifyAction() method
 
?>

Formularul de modificare va arata astfel:

Implementarea unui modul de stiri in Zend Framework. Partea a III-a - Afisarea si modificarea stirilor

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>&nbsp;</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() {
        
    // verifica daca avem date transmise prin formular in POST
    if($this->getRequest()->isPost()) {
        
        $POST = $this->getRequest()->getPost();    
                
        if(!empty($POST)) {
            
            // construieste un array cu informatiile din post
            $arrData = array(
                            'Titlu' =>         $POST['title'],
                            'Data' =>         $POST['date'],
                            'Descriere' =>     $POST['description'],
                            'Continut' =>     $POST['content']
                      );    
                      
            // modifica stirea din baza de date
            $NewsModel = new NewsModel();        
            $NewsModel->update($arrData,'Id = '.$POST['Id']);                   
        }
    }
    
    // afiseaza mesajul de succes cu zend view
    $viewObject = new Zend_View();
    $viewObject->setScriptPath(APPLICATION_PATH.'views/');
    
    echo $viewObject->render("save.phtml");
    
}//end of modifysaveAction() method
?>

Aici se incheie aceasta serie de tutoriale. Pentru a descarca toate sursele, acceseaza resursa cu acelasi nume.

Copyright © 2008-2010 E-LEARN.ro. Toate drepturile rezervate. Conceput si realizat de Neokinetics Software.