Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomysł na Przyjazne Linki
Avatarus
post 17.01.2008, 14:52:52
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


Witam
Ostatnio poproszono mnie o zrobienie systemu Przyjaznych linków w CMSie.
Zrobiłem to tak jak ja to sobie wyobraziłem, ale nie wiem czy jest to zrobione poprawnie. Tzn działać działa, tylko czy poprawnym sposobem to zrobiłem.

Oto strona na której zrobiłem te przyjazne linki: www.aiononline.home.pl
w cmsie można dodawać artykuły itp...no i są do nich tworzone linki
np: http://www.aiononline.home.pl/index.php?teksty=41
Wyświetla wybrany artykuł. Po dodaniu przyjaznych linków można się dostać do artykułu przez link:
http://www.aiononline.home.pl/cryengine.php

Jak to działa? Otóż w główny katalogu są tworzone pliki o takich nazwach jak tytuł artykuły. Oczywiście bez polskich i znaków specjalnych.
Ten plik posiada tylko odwołania do plików z szkieletami strony. Czyli łączy wszystkie części indexu no i dodaje art.
Pliki są bardzo mało, no ale niestety minusem tej metody jest to że w katalogu głównym tworzy się sporo plików...

Czy macie jakiś lepszy pomysł jak lepiej rozwiązać problem przyjaznych linków?


--------------------
Go to the top of the page
+Quote Post
starach
post 17.01.2008, 15:12:04
Post #2





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Zdaje mi się że nie rozumiesz istoty przyjaznych linków.
Mianowicie przyjazne linki to na przykład takie:
http://www.aiononline.home.pl/testy/41/
http://www.aiononline.home.pl/index.php/testy/41/
http://www.aiononline.home.pl/cryengine/
Proponuję użyć do tego mod_rewrite ( pierwszy i trzeci przykład ) jako że każdy typ konta na tym hostingu go wspiera.

Ten post edytował orglee 17.01.2008, 15:12:33
Go to the top of the page
+Quote Post
MMX3
post 17.01.2008, 15:35:55
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 9
Dołączył: 26.01.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


przyjazne linki mówisz...

modrewrite polecam.

np:
http://strona/artykuly/id/tytul_artykulu

tytuł artykułu trzeba pozbawić polskich liter, spacji itp żeby się krzaki po urlencode nie pojawiły

ja używam takiej funkcji:
  1. <?php
  2. function translatepl($tekst){
  3. $url = str_replace(array('ą', 'Ą'), array('a', 'A'), $tekst);
  4. $url = str_replace(array('ć', 'Ć'), array('c', 'C'), $url);
  5. $url = str_replace(array('ę', 'Ę'), array('e', 'E'), $url);
  6. $url = str_replace(array('ł', 'Ł'), array('l', 'L'), $url);
  7. $url = str_replace(array('ń', 'Ń'), array('n', 'N'), $url);
  8. $url = str_replace(array('ó', 'Ó'), array('o', 'O'), $url);
  9. $url = str_replace(array('ś', 'Ś'), array('s', 'S'), $url);
  10. $url = str_replace(array('ż', 'Ż'), array('z', 'Z'), $url);
  11. $url = str_replace(array('ź', 'Ź'), array('z', 'Z'), $url);
  12. $url = str_replace(&#092;" \", \"_\", $url);
  13. return $url;
  14. }
  15. ?>


to jest przyjazne wszystkim wyszukiwarkom...
bo najpierw np. google patrzy na url potem na Keywords, Description i treśc.

możesz jeszcze zamiast narażać się na ataki ludzi co zmieniają sobie ID zapodać taki trik.
Trzymasz w osobnym polu w bazie tyutuł po przejściu funkcji translatepl i masz jeszcze prościej:

http://strona/artykuy/tytul_artykulu



Pozdr

Ten post edytował MMX3 17.01.2008, 15:38:30


--------------------
Go to the top of the page
+Quote Post
Avatarus
post 18.01.2008, 10:08:12
Post #4





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


dziękuje macie racje. To jest o wiele lepsze rozwiązanie smile.gif


--------------------
Go to the top of the page
+Quote Post
mokry
post 18.01.2008, 10:19:44
Post #5





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


tak jak powiedział przedmówca: mod_rewrite

Przykłądowy plik .htaccess z wykorzystanie mod_rewrite:
Kod
php_flag display_errors ON

Options FollowSymLinks
RewriteEngine On

# Przepisanie strony glownej
RewriteRule ^index.html$ index.php
RewriteRule ^porady.html$ index.php?action=content&content_id=2
RewriteRule ^wspolpraca.html$ index.php?action=content&content_id=3
RewriteRule ^regulamin.html$ index.php?action=content&content_id=4
RewriteRule ^oferta.html$ index.php?action=content&content_id=6
RewriteRule ^galeria.html$ index.php?action=gallery
RewriteRule ^wyloguj.html$ index.php?logout

RewriteRule ^kontakt.html$ index.php?action=contact

#OPONY / SZCZEGOLY OPOPNY:
RewriteRule ^opony.html$ index.php?pid=tires
RewriteRule ^opony-(.*.).html$ index.php?pid=tires&pp_tires=$1
RewriteRule ^(.*.),opona-(.*.).html$ index.php?pid=tires&action=tire_details&tire_id=$2

#KOSZYK I ZAMOWIENIE:
RewriteRule ^koszyk.html$ index.php?pid=order&action=cart
RewriteRule ^zloz_zamowienie.html$ index.php?pid=order&action=send
RewriteRule ^dziekujemy.html$ index.php?pid=order&action=thanks


I potem generujesz linki za pomocą php pasujące do wyrażeń określonych w .htaccess

Wbrew pozorom jak by się mogło wydawać, obsługa tego jest banalnie prosta. Jeśli bedziesz chciał stosować znaki "/" oddzielające zmienne będziesz musiał użyć base href.


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
robos85
post 18.01.2008, 19:01:45
Post #6





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Czyli po wpisaniu w .htaccess takiego czegoś:

  1. <?php
  2. #Options FollowSymLinks
  3.  
  4. RewriteEngine on
  5. RewriteRule ^index.html$ index.php
  6. ?>


będę w linkach w kodzie mógł zamiast index.php podstawiać index.html ?
Bo rozumiem, że serwer ani plik sam tego nie zamienia, tylko my podajemy metody zamiany i w kodzie sami formatujemy odpowiednio linki pasujące do wzorca?

moze ktoś podac przykłąd jak napisać .htaccess aby zamieniał mi np taki link: company.php?id=23 na jakis przyjazny np company.php/id/23/ questionmark.gif
Go to the top of the page
+Quote Post
Łukasz O.
post 19.01.2008, 10:38:20
Post #7





Grupa: Zarejestrowani
Postów: 191
Pomógł: 5
Dołączył: 13.01.2007

Ostrzeżenie: (0%)
-----


moze ktoś podac przykłąd jak napisać .htaccess aby zamieniał mi np taki link: company.php?id=23 na jakis przyjazny np company.php/id/23/
pokiełbasiło Ci się trochę - mod_rewrite odczytuje w drugą stronę - Ty podajesz mu przyjazny link a moduł zamienia na "śmieci"

reguła o którą prosisz może być taka:

RewriteRule ^company/([0-9]*) company.php?id=$1


--------------------
"Don't tell me you want a bridge - show me the canyon you want to cross" Giuseppe Delena
Go to the top of the page
+Quote Post
Daimos
post 19.01.2008, 12:25:20
Post #8





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(MMX3 @ 17.01.2008, 15:35:55 ) *
ja używam takiej funkcji:
  1. <?php
  2. function translatepl($tekst){
  3. $url = str_replace(array('ą', 'Ą'), array('a', 'A'), $tekst);
  4. $url = str_replace(array('ć', 'Ć'), array('c', 'C'), $url);
  5. $url = str_replace(array('ę', 'Ę'), array('e', 'E'), $url);
  6. $url = str_replace(array('ł', 'Ł'), array('l', 'L'), $url);
  7. $url = str_replace(array('ń', 'Ń'), array('n', 'N'), $url);
  8. $url = str_replace(array('ó', 'Ó'), array('o', 'O'), $url);
  9. $url = str_replace(array('ś', 'Ś'), array('s', 'S'), $url);
  10. $url = str_replace(array('ż', 'Ż'), array('z', 'Z'), $url);
  11. $url = str_replace(array('ź', 'Ź'), array('z', 'Z'), $url);
  12. $url = str_replace(&#092;" \", \"_\", $url);
  13. return $url;
  14. }
  15. ?>

oj po co taki kombajn
nie lepiej tak?
  1. <?php
  2. $tekst ="usuń ąśćżźćł polskie znaki";
  3. $tekst = strtr($tekst,"ĄĆĘŁŃÓŹŻŹąćęłńóśżź","ACELNOSZZacelnoszz");
  4. ?>


Ten post edytował my salsa 19.01.2008, 12:25:29


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
Kinool
post 5.02.2008, 12:08:01
Post #9





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


urlencode()" title="Zobacz w manualu PHP" target="_manual i po co kombinować smile.gif


--------------------
Go to the top of the page
+Quote Post
.radex
post 5.02.2008, 23:01:33
Post #10





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Ja to robię tak:
.htaccess:
Kod
RewriteEngine on
RewriteCond $1 !^(index\.php|uploads|robots\.txt|cms) # <- tutaj pliki ktore sie nie liczą
RewriteRule ^(.*)$ /index.php/$1 [L]


A w index.php mniej więcej coś takiego (pisane od ręki):

Kod
$path = $_SERVER['PATH_INFO'];
$path = explode('/',$path);
foreach($path as $segment){
    if(!empty($segment))
        $path[] = $segment;
}


oczywiście do tego dochodzi sprawdzenie znaków (dozwalam tylko A-Z a-z 0-9 +-_ )

Takie rozwiązanie jest najelastyczniejsze, bo nie musimy sie martwić ograniczeniami mod_rewrite...


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 23:18