Witam
.
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ę(IMG:
style_emoticons/default/wink.gif) 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
$sText = trim($sText, '-');
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 (IMG:
style_emoticons/default/wink.gif)
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()
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
if (isset($_GET['title'])){
$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 {
}
}
- sory ze jescze nie poukładana
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){
echo "<div class='activ'>$nazwa</div>";
}
else if ($menu==2){
echo "<div class='activ2'>$nazwa</div>"; }
else {echo "<li id='active'>";
$nazwa
}
}
}
protected function actual_url($url){
if(strpos($_SERVER['REQUEST_URI'], $url)===false) {
return false;
}
else
{
return true;
}
if(strpos($_SERVER['REQUEST_URI'], $url)===false) {
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??