Lekcja 12 – backend cz 1.

Kategoria: Kurs pisania komponentów dla Joomla 1.5 [MVC] Utworzono: wtorek, 04, listopad 2008 Opublikowano: wtorek, 04, listopad 2008 Wojciech Romanek Drukuj E-mail

W dzisiejszym artykule postaram się pokazać Ci w jaki sposób na zapleczu wyświetlić listę elementów pobranych z bazy danych, a następnie jak obsłużyć konkretny element, lub kilka elementów. Aby nie mącić Ci w głowie nie tworzę nowej tabeli, ale komponent będzie działał w oparciu o tabelę #__content (czyli artykuły). W zapleczu komponentu który utworzyliśmy w lekcji 7 wyświetlimy listę artykułów wraz z polami typu checkbox które będą odpowiadać poszczególnym tytułom.

Opuszczę w tym artykule rzeczy które były opisywane w poprzednich artykułach. Ściągamy komponent który utworzyliśmy w lekcji 7. Przystępujemy do tworzenia zmian. Po pierwsze trzeba utworzyć model w którym umieścimy metodę do pobierania id, oraz tytułów artykułów z tabeli #__content (id, title). Nie opiszę tego w tym artykule ponieważ tworzenie modelu jest opisane tutaj. Dla osób które nie wiedzą jak to zrobić udostępnię paczkę ze zmodyfikowanym komponentem z lekcji 7, tam będzie można przeanalizować model.

W pliku view.html.php wprowadzamy jedną małą zmianę dotyczącą obsługi modelu:

$model = $this->getModel(); 
$list = $model->getData(); 
$this->assignRef('list', $list);

Czyli w szablonie naszego komponentu dane zwrócone przez metodę getData będziemy mieli dostępne poprzez obiekt $this->list (który jest tablicą).

Teraz, to na czym chcę się skupić dzisiaj to treść szablonu komponentu. Plik default.php z widoku. Najpierw pokażę jego treść a następnie wyjaśnię to co jest nowe lub może sprawić kłopoty.

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport(joomla.html.html);
?>
<form action="index.php" method="post" name="adminForm">
<table class="adminlist">
<tr><th><input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->list ); ?>);" /></th><th>Tytul</th></tr>
<?php
$i = 0;
foreach ($this->list as $row):
?>
<tr><td><?php echo JHTML::_('grid.id', $i, $row->id); ?></td><td><?php echo JHTML::_('link', '', $row->title); ?></td></tr>
<?php
$i++;
endforeach;
?>
</table>
<input type="hidden" name="option" value="com_witaj" />
<input type="hidden" name="task" value="" />
</form>

Rzecz najważniejsza – jeśli nasz widok nie służy tylko do wyświetlania danych, a będziemy chcieli użyć go jako interfejsu pozwalającego na modyfikacje bazy danych to powinien być on formularzem. Czyli <form></form> atrybut action ustawiamy index.php bo wszystko musi „przejść” przez ten plik. Jeśli byśmy jako action ustawili plik jakiegoś komponentu to zapewne ujżeli byśmy komunikat „Restricted access”. Metoda przesyłania zmiennych to post, a nazwa formularza to adminForm – taką nazwę powinien mieć formularz ze względu na standardowe funkcje JavaScript jakie udostępnia nam Joomla oraz aby przyciski tworzone w lekcji 7 działały nam poprawnie. Następnie tworzymy tabelę, nadajemy jej klasę adminlist dzięki temu nasze zaplecze będzie wyglądać tak jak większość komponentów. W pierwszej kolumnie wyświetlimy pola typu checkbox dzięki którym będziemy mogli odwoływać się do poszczególnych artykułów. W nagłówku dodamy checkbox który będzie zaznaczał lub odznaczał wszystkie pola. W zdarzeniu onClick tego elementu wpisujemy funkcję checkAll która jako argument przyjmuje ilość elementów.

W następnych liniach kodu zauważysz wyświetlanie w pętli foreach kolejnych wierszy tabeli. W pierwszej kolumnie stosując sposób opisany w lekcji 11 wywołujemy metodę id z klasy JHTMLGrid (tak przy okazji, ta klasa zawiera wiele metod przydatnych przy wyświetlaniu tego typu list w zapleczu – będziemy jej używać w następnym artykule). Metoda ta (function id( $rowNum, $recId, $checkedOut=false, $name='cid' ) ) przyjmuje 4 argumenty: $rowNume – numer wiersza (kolejny zwiększany o 1 w naszym wypadku będzie to zmienna $i), $recId – record id czyli id rekordu w naszym przypadku id artykułu ($row->id). Pozostałych dwóch my nie używamy ale jak się pewnie domyślasz $checkedOut = true jeśli pole domyślnie ma być zaznaczone, $name jest nazwą pola input które zostanie wygenerowane. Metody link nie będę omawiał gdyż omówiona została w poprzedniej lekcji. Zauważ jedynie że nie podaję jako pierwszy argument żadnego adresu – jest to w chwili obecnej mało istotne, ja chcę zwrócić Twoją uwagę na obsłudze takich list.

Na końcu są jeszcze dwa pola ukryte option oraz task są one konieczne do poprawnego działania komponentu.

Pozostała nam w tej chwili jedynie delikatna zmiana metod w kontrolerze:

$id = JRequest::getVar('cid');
$mainframe->redirect('index.php?option=com_witaj', 'Nacisnąłes cancel, id = '.implode($id,','));

w ten sposób zamienione są wszystkie metody. Pierwsza linia kodu to pobranie zmiennej cid która jest tablicą id (pól zaznaczonych przy tytule artykułu ) aby je wyświetlić w komunikacie zmieniamy tablicę na ciąg znaków w którym elementy tablicy rozdzielimy przecinkiem (funkcja implode). Teraz możesz przetestować działanie komponentu. Po zaznaczeniu jakichś pól obok tytułów kliknij w którąś z ikon w toolboxie. Mam nadzieję że po teście zrozumiałeś o co chodzi. Skoro w odpowiednich metodach kontrolera masz już id artykułu/ów możesz z nimi zrobić co zechcesz. Manipulując na bazie danych. Wkrótce więcej przykładów tak abyś zrozumiał to jak najlepiej. Na razie jeśli Ci coś nie działa to po prostu ściąg poniższy komponent, który jest modyfikacją komponentu z lekcji 7 (rozpakuj, a następnie skopiuj do katalogu administrator/components – uruchom przez index.php?option=com_witaj), przetestuj, przeanalizuj kod źródłowy i próbuj własnych sił. Powodzenia!


Załącznik do lekcji 12 HOT
Data 2016-04-04 Wielkość pliku 3.27 KB Download 244 Pobierz

Odsłony: 10336