Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomysł na Przyjazne Linki
Forum PHP.pl > Forum > PHP
Avatarus
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?
starach
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.
MMX3
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
Avatarus
dziękuje macie racje. To jest o wiele lepsze rozwiązanie smile.gif
mokry
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.
robos85
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
Łukasz O.
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
Daimos
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. ?>
Kinool
urlencode()" title="Zobacz w manualu PHP" target="_manual i po co kombinować smile.gif
.radex
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...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.