Artykuły na każdy temat
[PHP] Prosty wzorzec tworzenia mapy witryny/strony/sitemap
<?php
include './sitemap.class.php';
$sitemap = new sitemap();
$sitemap -> add_node(array('name' => 'Kategoria 1'));
$sitemap -> map[0] -> add_node(array('name' => 'Punkt 1.1'));
$sitemap -> add_node(array('name' => 'Kategoria 2'));
$sitemap -> map[1] -> add_node(array('name' => 'Punkt 2.1'));
$sitemap -> map[1] -> add_node(array('name' => 'Punkt 2.2'));
$sitemap -> map[1] -> add_node(array('name' => 'Punkt 2.3'));
$sitemap -> add_node(array('name' => 'Kategoria 3'));
$sitemap -> map[2] -> add_node(array('name' => 'Punkt 3.1'));
$sitemap -> map[2] -> add_node(array('name' => 'Punkt 3.2'));
$sitemap -> map[2] -> map[1] -> add_node(array('name' => 'Punkt 3.2.1'));
$sitemap -> map[2] -> map[1] -> add_node(array('name' => 'Punkt 3.2.2'));
$sitemap -> map[2] -> map[1] -> add_node(array('name' => 'Punkt 3.2.3'));
// Generate sitemap (HTML version)
echo rendering_list($sitemap);
function rendering_list($sitemap)
{
$data = '<ul>';
foreach($sitemap -> map as $item)
{
if($sitemap -> is_having_child($item))
{
$data .= '<li><a href="'.$item -> address.'">'.$item -> name.'</a>';
$data .= rendering_list($item);
$data .= '</li>';
}
else
{
$data .= '<li><a href="'.$item -> address.'">'.$item -> name.'</a></li>';
}
}
$data .= '</ul>';
return $data;
}
?>
W największym skrócie wygląda to właśnie tak. Funkcja rendering_list() służy jako swojego rodzaju odpowiednik warstwy wyglądu. Jeżeli chodzi o tworzenie węzłów to radzę poeksperymentować z polem map - w ostateczności stary dobry var_dump($sitemap) może być pomocny.
<?php
class sitemap
{
public $map;
public function add_node($data)
{
$this -> map[] = new node($data);
}
public function is_having_child($node)
{
return $node -> map;
}
}
class node extends sitemap
{
public $name;
public $address;
public function node($data)
{
$this -> name = $data['name'];
$this -> address = $data['address'];
}
}
?>
Właściwie tak mały fragment kodu nie wymaga chyba tłumaczenia? W zależności od zapotrzebowania rodzaju budowania mapy można sobie do node dodać dodatkowe pola.
Komentarze
Dodaj komentarz
CapaciousCore