.
wczoraj wziołem sie za poprawę nawigacji na mojej stronie ; od strony wizualnej jak i technicznej:
chciałbym zadać kilka pytań oraz prosić o surową fachową ocenę i ewentualnie podanie swoich uwag:
Narazie zmiany mam na localhoscie - > i przymierzam sie do aktualizacji na serwerze (tylko jeszcze walcze z ccs)
_dodam tylko ze php to jeszcze do końca nie jest moj chleb powszedni
a więc tak:
na poczatku przyjazne url:
plik .hataccess
Options FollowSymLinks RewriteEngine on #przekierowanie bez www na www RewriteCond %{HTTP_HOST} ^kosmosnews.pl RewriteRule (.*) <a href="http://www.kosmosnews.pl/$1" target="_blank">http://www.kosmosnews.pl/$1</a> [R=301,L] #przekierowanie ze stron home na pl RewriteCond %{REQUEST_FILENAME} -d RewriteRule .* index.php RewriteCond %{REQUEST_FILENAME} !-s [NC] RewriteCond %{REQUEST_FILENAME} !-d [NC] RewriteBase / RewriteRule ^kategoria/(.+)/(.+)/(.+)/(.+)/$ showcat.php?id_cat=$1&id_parent=$2&type=$3&name_cat=$4 [L] RewriteRule ^artykul/(.+)/(.+)/(.+)/(.+)/(.+)/$ showobject.php?id_cat=$1&id_parent=$2&id_ob=$3&type=$4&title=$5 [L]
następnie modyfikacja url tak aby wysyłał je jako "przyjazne"
$url1="kategoria/".($row['id_cat'])."/".$row['id_parent']."/2/".($row['name_cat'])."/"; $url=$this->prepareURL($url1); ?><li><?php $menu=1; $this->display_buttons($menu, $row['name_cat'], $url, !$this->actual_url($url));
funkcje: prepareURL (nie mojego autorstwa):
function prepareURL($sText) { // pozbywamy się polskich znaków diakrytycznych $sText = $this-> clearDiacritics($sText); // dla przejrzystości wszystko z małych liter // wszystkie spacje zamieniamy na myślniki // usuń wszytko co jest niedozwolonym znakiem // zredukuj liczbę myślników do jednego obok siebie // usuwamy możliwe myślniki na początku i końcu return $sText; }
zmiana polskich znaków :
function clearDiacritics($sText) { 'ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c', 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l', 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C', 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L' ); }
I teraz mam ta:
zamias takich urli: localhost/showcat.php?id_cat=".($row1['id_cat'])."&id_parent=".$row['id_cat']."&type=2
mam takie: localhost/artykul/3/1/12/2/test-nowy-artykul-z-e-zdjeciami/
co mi w miare odpowiada:
lecz przy tym wszystkim nasuwają mi sie pytania:
1. czy muszę każdy url który mam na swoim portalu zmieniać tak aby był zgodny ze standartem ( który pozniej sie wyświelta)
czyli na np: /artykul/3/1/12/2/test-nowy-artykul-z-e-zdjeciami/ i dopiero taki wysyłac - czy jest jakas metoda która przerobi mi aktualnie zrobione url na te które będą wysyłane do mod_rewrite
2. aktualnie dostep do strony z artykułami mam na 2 sposoby przez przyjazne url i po staremu z parametrami .. czy można zrobic tak aby był tylko dostęp przez przyjazne url - jak tak to jak
i to chyba wszystko co do przyjaznych urli
-------------------------------------------------------------------------------------
a teraz nawigacja : ( aktualna pozycja w serwisie)
moja baza categori:: (2 poziomy)
id_cat id_parent name_cat 1 0 Wszechświat 2 1 Teoria wielkiego wybuchu 3 1 Gwiazdy i galaktyki itd
no i dalej funkcja -> actual_position()
- sory ze jescze nie poukładana
public function actual_position (){ //zapytanie wybierz wszystkie kategorie $sql="select * from category"; $get=new data(); $connect=$get->connect_bd(); $result=$connect->query($sql); if (!$result){ echo " fatal error"; } $how=$result->num_rows ; if ($how >0 ){ for ($i=0; $i<=$how; $i++){ //zapisanie kategorii do tablicy $res1[$i]=$result->fetch_assoc(); } //zapisanie do zmiennych wartosci z geta $id_cat=$_GET['id_cat']; $id_parent=$_GET['id_parent']; //funkcja sprawdza wartosc nadrzednej kategorii switch ($id_parent){ //dla kategorii nadrzednej wyswietla to - tylko w przypadku jak jest w nadrzędnej kategorii case "0": { for ($i=0 ; $i <= 48 ; $i++) { if (($res1[$i]['id_parent']==0)and ($res1[$i]['id_cat']==$_GET['id_cat'])) { $url1="kategoria/".$res1[$i]['id_cat']."/0/2/".$res1[$i]['name_cat']."/"; $url=$this->prepareURL($url1); $menu=4; ?><li><a href="../index.php">Home</a></li><li><?php $this->display_buttons($menu, $res1[$i]['name_cat'], $url, !$this->actual_url($url));?></li><?php } } break; } //jeśli nie jest przekazany parametr id_parent - przerywa dzialanie - nie wyswietla nic case NULL: break; //opcja dla pozostałych mozliwosci - kiedy jest minimum na drugim poziomie kategorii default : { // robi link do nadrzednej kategorii $url1="kategoria/".$res1[$id_parent-1]['id_cat']."/0/2/".$res1[$id_parent-1]['name_cat']."/"; $url=$this->prepareURL($url1); $menu=4; ?><li><a href="../index.php">Home</a></li><li><?php $this->display_buttons($menu, $res1[$id_parent-1]['name_cat'], $url, !$this->actual_url($url));?></li><?php $p=$_GET['id_parent']; $a=$p; //$i=48 - bo tyle mam wszystkich kategorii for ($i=0; $i<=48; $i++) { // szuka pozostałych kategorii nadrzednych if (($res1[$i]['id_parent']==$a)and ( $res1[$i]['id_cat']==$_GET['id_cat'])) { //tworzy url do znalezionej kategorii podrzenaj z kategorii nadrzednej $url1="kategoria/".($_GET['id_cat'])."/".$_GET['id_parent']."/2/".$res1[$i]['name_cat']."/"; $url=$this->prepareURL($url1); $menu=4; ?><li><?php $this->display_buttons($menu, $res1[$i]['name_cat'], $url, !$this->actual_url($url)); ?></li><?php // jesli wyswietlany jest artykul - generuje jego nazwe w adresie -w lini nawigacji $url1="artykul/".($_GET['id_cat'])."/".$_GET['id_parent']."/".$_GET['id_ob']."/2/".$_GET['title']."/"; $url=$this->prepareURL($url1); $menu=4; ?><li><?php $this->display_buttons($menu,$_GET['title'], $url, !$this->actual_url($url)); ?></li><?php } } } break; } } } else { } }
no i oczywiście 2 funkcje od aktualnej pozycji:
protected function display_buttons($menu, $nazwa, $url, $active = true){ if($active) { $nazwa</a>"; } else { if ($menu==1){ } else if ($menu==2){ } $nazwa } } }
protected function actual_url($url){ { return false; } else { return true; } { return false; } else { return true; } }
wynikiem jest to ze gdzybym na stronie nie byl to pokazuje mi dokładnie gdzie jestem - z uwzględnieniem podpoziomu kategorii
- czy takie rozwiązenie jest poprawne??