Gwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywna
 

W „Systemie Zarządzania Zawartością” bardzo ważne jest wyświetlanie w kategoriach fragmentów wszystkich artykułów. Przeważnie po kliknięciu na łącze (więcej) znajduje się całą zawartość. Artykuły zawsze umieszczane są od najnowszego, dzięki czemu po wejściu do kategorii, czytelnik serwisu nie musi przewijać strony w przeglądarce w celu zapoznania się z najnowszym wpisem (rys. 1.).

 

Zawartość kategorii w dziale artykuły

Rys. 1. Zawartość kategorii w dziale artykuły

 

Metoda statyczna sqlgetArticle() widoczna na listingu 1 odpowiada za wyświetlenie wszystkich artykułów dla wybranej kategorii. Funkcja addslashes() zapobiega wprowadzaniu znaków specjalnych do bazy danych '\' (np.: \'), co ma zapobiec występowaniu problemów. Jeśli okaże się, że metoda sqlSelect() zostaje zwrócona pusta (Listing 2), automatycznie algorytm kończy swoje działanie. W innym wypadku wykonuje zapytanie do bazy danych w celu pobrania do tablicy wszystkich artykułów.

 

Listing 1. Fragment klasy UserFactory


/**
* Metoda odpowiedzialna za pobranie wszystkich artykułów dla wybranej kategorii.
* @param integer $id – klucz główny z bazy danych
* @param string $name – nazwa tabeli z bazy danych
* @return array
/*

public static function sqlgetArticle($id, $name) {
$id = addslashes($id);

$result = UserFactory::sqlSelect($id, $name);
if (! ($result && @mysqli_num_rows($result))) {
return false;
}

$sql = "SELECT a.id_".$name." , aa.nazwa, k.nazwa_kat, a.naglowek, a.opis, ";
$sql .= "a.obrazek, a.utworzony, NULLIF(a.opublikowany, '0000-00-00 00:00:00') AS opublikowany";
$sql .= " FROM ".$name." a, kat_".$name." k, autor aa ";
$sql .= "WHERE k.id_kat = '$id' ";
$sql .= "AND a.id_kat = k.id_kat ";
$sql .= "AND a.id_autor = aa.id_autor ";
$sql .= "AND a.opublikowany IS NOT NULL ";
$sql .= "ORDER BY a.opublikowany DESC ";

$result = mysqli_query(DataManager::_getConnection(), $sql);

if (! ($result && mysqli_num_rows($result))) {
return false;
}

$values = array();

for($i=0; $row = @mysqli_fetch_array($result); $i++) {

// Pobieramy tylko opublikowane artykuły w systemie.
if (!$row['opublikowany'] == NULL){
$values[$i]['id'] = stripslashes($row['id_'.$name.'']);
$values[$i]['nazwa'] = stripslashes($row['nazwa']);
$values[$i]['nazwa_kat'] = stripslashes($row['nazwa_kat']);
$values[$i]['naglowek'] = stripslashes($row['naglowek']);
$values[$i]['opis'] = stripslashes($row['opis']);
$values[$i]['obrazek'] = stripslashes($row['obrazek']);
$values[$i]['utworzony'] = stripslashes($row['utworzony']);
}
}
return $values;
}

 

Listing 2. Fragment klasy UserFactory


/**
* Metoda odpowiedzialna za sprawdzenie, czy kategoria o podanym $id istnieje w systemie.
* @param integer $id – klucz główny z bazy danych
* @param string $name – nazwa tabeli z bazy danych
*/

public static function sqlSelect($id, $name) {

$sql = "SELECT a.id_kat FROM ".$name." a, kat_".$name." k";
$sql .= " WHERE k.id_kat = '$id' AND a.id_kat=k.id_kat LIMIT 1";

$result = mysqli_query(DataManager::_getConnection(), $sql);

return $result;
}

 

Po wykonaniu metody wynik jest zapisywany w zmiennej $rows, która następnie jest przekazywana do szablonu Smarty (Listing 3) article1.tpl w celu wyświetlenia na stronie za pomocą pętli foreach (Listing 4).

 

Listing 3. Fragment pliku article.php


$id = $_GET['id_kat'];

$rows = UserFactory::sqlgetArticle($id, 'artykuly');

$objSmarty->assign('rows', $rows);
$objSmarty->display('article1.tpl');

 

Listing 4. Szablon Smarty odpowiedzialny za wyświetlenie podstawowych informacji o artykułach, article1.tpl

{if $rows}
<fieldset>
<legend class="txtFormLegend">Dział artykuły</legend>
{foreach item=row from=$rows}
{cycle assign="background_color" values="#F0F0F0, #DDDDDD" }

<table border="0" cellspacing="0" cellpadding="0" style="background: {$background_color}" class="text">
<tr>
<td width="120px" height="120px"><img src="/../photo/article/{$row.obrazek}"/>
</td>
<td rowspan="2" colspan="2">
<p><h1>{$row.naglowek}</h1>
{$row.opis|truncate:400:" ... ":false}</p>
</td>
</tr>
<tr>
<td><div id="author">Autor:<br />{$row.nazwa}</td>
</tr>
<tr>
<td><div id="category">Kategoria: <br />{$row.nazwa_kat}</div></td>
<td id="date">Utworzony: {$row.utworzony}</td>
<td id="more"><a href="/article1.php?id={$row.id}"> [ więcej ] </a></td>
</tr>
</table>

<br />
{/foreach}
</fieldset>
{else}

<p id="text">Kategoria działu artykuły nie zawiera żadnych materiałów.</p>

{/if}

 

W przykładzie wykorzystano bazę danych opisaną w artykule „Przykładowy projekt bazy danych strony internetowej”.

 

Warto przeczytać:

Wybrane książki:

Książki Helion