UWAGA: Strona zawiera materiały archiwalne. Większość artykułów dotyczy Joomla! 1.0
Start arrow Programowanie arrow Poradniki arrow Tworzenie komponentu w Mambo CMS
Tworzenie komponentu w Mambo CMS - Wstęp Drukuj Email
Spis treści
Wstęp
dailymessage.php
admin.dailymessage.php
admin.dailymessage.html.php
toolbar.dailymessage.php
toolbar.dailymessage.html.php
install.dailymessage.php i uninstall.dailymessage.php
dailymessage.xml
Dodatek 1. Komponenty versus Moduły
Dodatek 2: Zakładki na stronach administracyjnych
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

Tę linię już powinniśmy dobrze znać, zapewnia, że plik nie zostanie wywołany spoza środowiska Mambo.

class HTML_joeDailyMessage{

Ta klasa jest używana w pliku amin.dailymessage.php i obsługuje generowanie kodu HTML po stronie administratorskiej komponentu.

 
function edit( $option, &$row ) {

Parametrami tej funkcji jest nazwa komponentu ($option, w naszym przypadku jest to 'com_dailymessage') oraz wiersz z danymi pobrany z bazy danych w pliku admin.dailymessage.php. Funkcja powoduje wygenerowanie formularza, w którym można edytować przekazaną jako parametr ($row) Wiadomość Dnia. Warto zauważyć, że parametr $row jest przekazywany jako wskaźnik (&$row), pozwala to na przekazywanie dużych ilości danych poprzez odwołanie do danych istniejących już w środowisku php, a nie tworzenie ich kopii w kolejnej instancji obiektu.

?>
 
<form action="index2.php" method="post" name="adminForm" id="adminForm" class="adminForm">
<table border="0" cellpadding="3" cellspacing="0">
 
<tr>
<td>Message: </td><td><input type="text" size="50" maxsize="100" name="message" 
     value="<?php echo $row->message; ?>" /></td></tr>
 
<tr>
<td>Date: </td><td><input size="30" name="date" 
     value="<?php echo $row->date; ?>"></td></tr>
 
<tr>
<td>Published: </td><td><?php echo mosHTML::yesnoSelectList( "published", "", $row->published ); ?></td></tr>

Jeśli dane z bazy danych zostały z powodzeniem załadowane to teraz wypełnią budowany formularz. Proszę zauważyć, że kolumna ’Published’ jest obsługiwana przez funkcję yesnoSelectList klasy mosHTML. Klasa ta jest zadeklarowana w pliku classes/mambo.php i dostępna w całym środowisku Mambo. Funkcja ta generuje rozwijaną listę z dwiema wartościami ’Tak’ i ’Nie’. Jeśli wartość zmiennej $row->Publisher równa się '0', ’Nie’ będzie wybrane na liście. Jeśli wartością będzie '1', na liście wybrane będzie ’Tak’. Funkcja ta może być bardzo pomocna w wielu formularzach administracyjnych i używa się ją znacznie przyjemniej niż checkboxy.

Uwaga!Powyższy kod to praktycznie czysty HTML, więc nie będę się zagłębiał w jego wyjaśnianie. Osobiście polecam zapoznanie się z klasą mosHTML, która zawiera więcej podobnie pożytecznych funkcji. Jej opis znajdziecie w dokumentacji Mambo na oficjalnych stronach (niestety w języku angielskim)
.

 
</table>
<input type="hidden" name="id" value="<?php echo $row->id; ?>" />
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="task" value="" />
</form>
<?php }

Formularz kończymy definicją kilku niezbędnych zmiennych ukrytych, zawierających identyfikator Wiadomości Dnia ('id'), nazwę komponentu ('option') oraz wykonywane zadanie ('task'). Zmienne te są wysłane razem z pozostałymi polami formularza po zakończeniu edycji. Zmienna zadanie ('task') jest ustawiana na pustą tak, aby później mogła zostać wypełniona przez Javascript w zależności od tego na jaki przycisk w pasku narzędzi kliknie administrator.

function listConfiguration($option, &$rows){

Ta funkcja jest używana, gdy administrator chce wyświetlić ustawienia konfiguracyjne komponentu Wiadomość Dnia (Daily Message).

?>
<form action="index2.php" method="post" name="adminForm">
 
<table cellpadding="4" cellspacing="0" border="0" width="100%" class="adminlist">
<?php
$row = $rows[0];
?>
<tr><td>Bold</td><td>
   <?php echo mosHTML::yesnoSelectList( "bold", "", $row->bold ); ?></td></tr>
<tr><td>Italic</td><td>
   <?php echo mosHTML::yesnoSelectList( "italic", "", $row->italic ); ?></td></tr>
<tr><td>Underline</td><td>
   <?php echo mosHTML::yesnoSelectList( "underline", "", $row->underline ); ?></td></tr>
<tr><td>Show Date</td><td>
   <?php echo mosHTML::yesnoSelectList( "showdate", "", $row->showdate ); ?></td></tr>
</table>

Formularz jest wypełniany danymi z pierwszego (i jedynego) wiersza tabeli mos_joe_dailymessage_conf przekazanymi w parametrze $rows (znowu jako wskaźnik). Jak widać użycie funkcji yesnoSelectList ułatwia wyświetlanie, edytowanie oraz zapewnia, że nie zostaną wprowadzone bzdurne dane.

<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="configid" value=<?php echo $row->configid ?> />
<input type="hidden" name="act" value="configure" />
</form> 
<?
}

Ponownie zmienne nazwa komponentu ('option'), identyfikator ustawień ('configid') oraz podmenu ('act') są ukrywane na końcu formularza. Zmienna identyfikator ustawień ('configid') zapewnia że edytujemy jeden i ten sam wiersz z ustawieniami (aczkolwiek powinien być tylko jeden). Zmienna podmenu ('act') przekazuje do pliku admin.dailymessage.php, że chcemy zapisać albo anulować zmiany w konfiguracji komponentu, a nie w jego wiadomościach. Jest obsługiwane poleceniami switch na samym początku pliku admin.dailymessage.php.

function listMessages( $option, &$rows ) {
 ?>

Ostatnia z funkcji tworzy domyślną stronę panelu administracyjnego lub uaktywnia się po kliknięciu w przycisk Edycja Wiadomości.

<form action="index2.php" method="post" name="adminForm">
 
<table cellpadding="4" cellspacing="0" border="0" width="100%" class="adminlist">
<tr>
<th width="20"><input type="checkbox" name="toggle" value=""      
     onclick="checkAll(<?php echo count($rows); ?>);" /></th>  <th class="title" width="25%">Message</th>  <th>Date</th>  <th width="25%">Published</th></tr>

Tutaj mamy definicje nagłówków w tabeli wraz z głównym checkboxem, który użyty zaznacza wszystkie Wiadomości Dnia.

Uwaga!Warto zauważyć, że przy tworzeniu takiej tablicy posługujemy się klasą CSS adminlist dostępną w środowisku Mambo. Pozwala to na zachowanie jednolitego wyglądu stron administracyjnych wszystkich komponentów.

<?php
$k = 0;
for($i=0; $i < count( $rows ); $i++) {
$row = $rows[$i];
   ?>

Tutaj zaczyna się pętla, która przechodzi przez wszystkie Wiadomości Dnia przechowywane w bazie danych, czyli wszystkie wiersze tablicy $rows.

<tr class="<?php echo "row$k"; ?>">

Tutaj używamy zdefiniowanego w Mambo stylu CSS, który powoduje że wyświetlane wiersze są w zebrę, na przemian z tłem białym i szarym, co ułatwia przeglądanie informacji.

<td><input type="checkbox" id="cb<?php echo $i;?>" 
   name="cid[]" value="<?php echo $row->id; ?>" 
   onclick="isChecked(this.checked);" /></td>

Teraz po lewej stronie każdej wyświetlanej pozycji na liście wszystkich Wiadomości Dnia wyświetlamy checkbox, który pozwala nam zaznaczyć Wiadomość do edycji / usunięcia itp. Identyfikatory chceckboxów są przechowywane w zmiennych $cbX, gdzie X jest numerem pozycji na liście. Identyfikatory tworzą tablice a ich wartości są ustawiane na wartości identyfikatora Wiadomości (id) pobrany z bazy danych.

<td><a href="http://www.pomoc.joomla.pl/content/view/67/30/1/3/#edit" 
      onclick="return listItemTask('cb<?php echo $i;?>','edit')">
   <?php echo $row->message; ?></a></td> 

Powyższy kod tworzy link zawierający treść Wiadomości Dnia. Kliknięcie na link spowoduje automatyczne zaznaczenie checkboxu po lewej stronie oraz powiadomi Javascript aby wykonać formularz z zadaniem (task) edycji ('edit').

 
<td><?php echo mosFormatDate($row->date); ?></td>

Wyświetlamy date powstania wiadomości, data pokazywana jest w zależności od lokalnych ustawień Mambo, dzięki uzyciu funkcji mosFormatDate, która jest zadeklarowana w pliku classes/mambo.php

<td align="center">
      <?php
if ($row->published == "1") {
echo "<a href="javascript: void(0);" onClick="return listItemTask('cb$i','unpublish')">
   <img src="images/publish_g.png" border="0" /></a>";
} else {
echo "<a href="javascript: void(0);" onClick="return listItemTask('cb$i','publish')">
   <img src="images/publish_x.png" border="0" /></a>";
}
      ?>
     </td>

Teraz wyświetlamy ikonę 'published' lub 'unpublished', w zależności od statusu wiadomości. Klikniecie na ikonę spowoduje, że nadamy wiadomości przeciwny status.

Uwaga!Ja osobiście zmieniłem powyższy kod na kod podejrzany w komponencie Mambo Banners
:

      <?php
        $task=$row->published ? 'unpublish' : 'publish';
        $img=$row->published ? 'publish_g.png' : 'publish_x.png';
        $alt=$row->published ? (_CMN_PUBLISHED) : (_CMN_UNPUBLISHED);
      ?>
      <td align="center"><a href="javascript: void(0);" onClick="return      
             listItemTask('cb<?php echo $i;?>','<?php echo $task;?>')">
<img src="images/<?php echo $img;?>" 
     width="12" height="12" border="0" alt="<?php echo $alt; ?>" /></a></td>

Uwaga!Z jakiś powodów ten kod wydaje mi się bardziej przejrzysty. Przy okazji macie okazje zobaczyć, że jedną i tą samą rzecz można zrobić na kilka sposobów. Dodatkowo zachęcam tutaj do przeglądania istniejących komponentów w Mambo. Jak tylko zrozumiecie, jak działa komponent, przeglądanie kodu i jego analiza będzie bardzo przyjemna.

 
<?php $k = 1 - $k; ?>

Zmieniamy wartość zmiennej, która determinuje wygląd wiersza na liście.

Uwaga!Przyjmuje ona wartość 0 lub 1 i w zależności od niej używamy naprzemian innych stylów do wyświetlania wiersza danych na liście.

</tr>
<?php } 
?>
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
</form> 
</table>
 
<? } 
 
}

Po raz kolejny ukrywamy zmienne komponent('option'), zadanie ('task') oraz zaznaczony checkbox ('boxchecked'). Oba zadanie oraz zaznaczony checkbox są później wypełniane przez Javascript. Zaznaczony checkbox ('boxchecked') jest używany do sprawdzenia czy wybraliśmy jakieś pozycje na liście przed podjęciem dalszych działań.

?>

dailymessage.class.php

<?php
 defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

Sprawdzamy czy plik jest wywoływany z środowiska Mambo.

class joeDailyMessage extends mosDBTable {
var $id = null;
var $message = null;
var $date = null;
var $published = null;

Ta klasa jest rozszerzeniem klasy, mosDBTable, która dostarcza wielu użytecznych funkcji wspomagających współpracę z bazą danych. Musimy zadeklarować zmienne identyczne w nazwie do kolumn w tablicy. W ten sposób w innych fragmentach kodu komponentu możemy tworzyć obiekt joeDailyMessage, wypełnić / załadować danymi i zapisać w bazie danych.

function joeDailyMessage(&$db){
$this->mosDBTable('#__joe_dailymessage', 'id', $db);
}
 
}

Ten konstruktor używając wskaźnika do bazy danych przekazanego jako parametr, przesyła go do konstruktora klasy mosDBTable, wraz z nazwą tablicy (przypominam, że prefix '#_' jest zamieniony na prefix bazy danych zdefiniowany w ustawieniach Mambo) oraz nazwą pola będącego kluczem tablicy.

Uwaga!Istotne w tworzeniu takiej klasy jest dokładne powielenie nazw zmiennych w tablicy poprzez zadeklarowanie ich tutaj. Funkcja konstruktor jest standardowa i oprócz nazwy tablicy i klucza nic nie powinno się tu zmieniać. Jak widzicie, Mambo zakłada, że każda z używanych przez nas tablic posiada klucz (unikalną zmienną w tablicy, która zawsze jednoznacznie identyfikuje wiersz danych.

class joeDailyMessageConf extends mosDBTable {
var $bold = null;
var $italic = null;
var $underline = null;
var $showdate = null;
var $configid = null;
 
function joeDailyMessageConf(&$db){
$this->mosDBTable('mos_joe_dailymessage_conf', 'configid', $db);
}
}

Klasa joeDailyMessageConf jest zdefiniowana w ten sam sposób co powyższa klasa joeDailyMessage. Różnica polega na zadeklarowaniu innych zmiennych, odpowiadających zmiennym w tablicy mos_joe_dailymesssage_conf. W funkcji konstruktorze mamy tez użyte inne parametry, nazwę tablicy i zmienną klucz.

?>


Zmieniony ( 14.12.2007. )
 
« poprzedni artykuł