Lekcja 6 - zapis do bazy danych.

Kategoria: Kurs pisania komponentów dla Joomla 1.5 [MVC] Utworzono: poniedziałek, 18, sierpień 2008 Opublikowano: poniedziałek, 18, sierpień 2008 Wojciech Romanek Drukuj E-mail

Tworząc jakiekolwiek rozszerzenia dla Joomla czy też innych systemów cms najbardziej chyba nam zależy na przetworzeniu jakichś informacji lub danych. Informacje te w większości przypadków pobierane są z bazy danych, sposób pobierania danych z bazy został opisany w poprzedniej lekcji. Do poprzedniej części kursu należy się Wam małe sprostowanie, mianowicie w celu pobrania jakichś danych z bazy sposobem opisany w poprzedniej części kursu nie jest wymagany opis bazy danych, który stworzyliśmy ostatnio. Ale nic straconego ostatnio przygotowany opis tabel wykorzystam dziś zapisując dane do bazy.

Na początek zrobimy zapisywanie do bazy numerów telefonu z poziomu frontendu (strona któą widzą wszyscy - frontowa). Za przykład posłuży nam książka telefoniczna. Zatem w katalogu administrator/components/com_nazwakomponentu tworzymy opis tabel (jak w poprzedniej części).Oczywiście w bazie powinniśmy mieć utworzoną tabelę – opis w poprzednim artykule. W katalogu naszego komponentu tworzymy nowy widok o nazwie „Dodaj”. components/com_nazwakomponentu/views/dodaj/view.html.php:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
 
jimport( 'joomla.application.component.view');
 
class WitajViewDodaj extends JView
{
  function display($tpl = null)
  {
    global $mainframe;
    $model =& $this->getModel();
    $this->getModel();
 
    parent::display($tpl);
  }
}
?>

następnie w pliku szablonu tworzymy taki formularz (więcej o formularzach tutaj ):

components/com_nazwakomponentu/views/dodaj/tmpl/default.php:

<?php
defined('_JEXEC') or die('Restricted access');
?>
<form action="index.php?option=com_witaj&amp;task=save" method="POST">
  <table>
    <tr>
      <td>
        Nazwisko:
      </td>
      <td>
        <input type="text" width="120" name="nazwisko" />
      </td>
    </tr>
    <tr>
      <td>
        Imię:
      </td>
      <td>
        <input type="text" width="120" name="imie" />
      </td>
    </tr>
    <tr>
      <td>
        Nr tel:
      </td>
      <td>
        <input type="text" width="120" name="nrtel" />
      </td>
    </tr>
    <tr>
      <td></td>
      <td>
        <button type="submit">Wyślij</button>
      </td>
    </tr>
  </table>
</form>

W tym momencie powinieneś zwrócić uwagę na to gdzie formularz zostaje wysyłany... jest to taki adres: index.php?option=com_witaj&task=save co to oznacza? Wywołanie zadania o nazwie save. W takim razie co powinniśmy teraz zrobić? Oczywiście dodać obsługę takiego taska, w tym celu otwieramy nasz kontroler (components/com_nazwakomponentu/controller.php) i na końcu tego pliku dodajemy funkcję z obsługą taska. Poniżej kod (a więcej o kontrolerze i taskach znajdziesz w Lekcja 2 - MVC - Controller [kontroler] - drugiej części kursu).

function save()
{
	global $mainframe;
	JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
	$row = JTable::getInstance('witaj', 'table');
	 
	$row->id = JRequest::getVar('id', '0', 'post', 'string', JREQUEST_ALLOWRAW);
	$row->nazwisko = JRequest::getVar('nazwisko', '', 'post', 'string', JREQUEST_ALLOWRAW );
	$row->imie = JRequest::getVar('imie', '', 'post', 'string', JREQUEST_ALLOWRAW );
	$row->nr_tel = JRequest::getVar('nrtel', '', 'post', 'string', JREQUEST_ALLOWRAW );
	 
	if(!$row->store())
	{
		echo "\n";
		exit();
	}else
	{
		$mainframe->redirect('index.php?option=com_witaj','Zapisano poprawnie :-)');
	}
}

Na początku tworzymy nową instancję tabeli – obiekt który będzie się odnosił do naszej tabeli. Ja nazwałem go row czyli wiersz. Do poszczególnych pól w bazie odwołujemy się przez $row->nazwa_pola.

JRequest::getVar() pobiera zmienne z formularza – opisałem to również w drugiej części kursu.

Kiedy do wszystkich pól są przypisane odpowiednie wartości zapisujemy je do tabeli poprzez metodę store(). W funkcji powyżej zawarłem jeszcze warunek jeśli dane nie zostaną zapisane poprawnie to wyświetlony zostanie komunikat z błędem który pobierany jest metodą getError().

Artykuł pisany trochę chaotycznie ale już wkrótce mam nadzieję że uda mi się to poukładać trochę bardziej czytelnie.

W mojej plikowni znajdziesz plik z komponentem dotyczącym dwóch ostatnich lekcji. Należy go skopiować do katalogu: /components/ oraz oczywiście utworzyć tabelę jos_telefony tak jak to opisałem w lekcji 5.

Odsłony: 13932