Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przyjazne linki
Forum PHP.pl > Forum > Przedszkole
Turson
Piszę właśnie system bloga.
Chciałbym, żeby finalnie linki wyglądały w ten sposób: domena/id,tytul-artykulu

Narazie wszystko jest na lokalnym serwerze bez .htaccess w wersji roboczej, ale już teraz muszę zaplanować linki.

Aktualnie w index.php mam includowanie contentu:

  1. $page = ((isset($_GET['page']) && $_GET['page'] != '') ? $_GET['page'] : 'index');
  2. $page=(preg_match('/(\.\.|\/)/i',$page)?'index':$page);
  3. $page = preg_replace('/[^a-zA-Z0-9 \._-]/','',$page);
  4. $page = (file_exists('include/'.$page.'.php') ? $page : 'error');
  5. include('include/'.$page.'.php');

Tylko, że z tego powstanie mi coś na miarę index.php?page=id
Czyli nie zawiera tytułu artykułu.

Jak tworzyć linki, by później łatwo przerobić je do postaci domena/id,tytul-artykulu ?
b4rt3kk
Najlepiej to w ogóle zrezygnować z takiego systemu wczytywania treści, a skorzystać z bazy danych. Jest owszem wykonalne zrobienie takiego linka, ale zupełnie nieoptymalne.
Turson
W sensie, że zawartość podstron trzymać w bazie?

Bo trzymam w bazie. Ale jak tworzyć linki
kujol
W moim przypadku wygląda to następująco. Mam tabele kategorie, w której trzymam wszystkie nazwy kategorii. Linka tworzę w ten sposób, że wysyłam zapytanie do bazy i pobieram nazwę tej kategorii robiąc tak:

Mojastrona.pl/kategoria?nazwa=$zmienna

W zapytaniu wysyłam co ma pobrać i to wyświetlem w tym linku.
Turson
Czyli w przypadku bloga:
domena/artykul.php?nazwa=cośtam
i
domena/kategoria.php?nazwa=costam

Tylko jak potem z tego zrobić coś takiego domena/idArtykułu,TytułArtykułu
ber32
Witam
może coś w tym stylu

  1. list($kategoria, $artykułu) = split('[/?=]', $_GET['page']);
  2. $page = str_replace($kategoria,'id,',$page);
  3. $page1 = str_replace($artykułu,'artykułu,',$page);
kujol
Lub

Domena/artykul.php?Id=Artykul&Tytul=Artykul
Turson
Jeśli chodzi o polskie znaki to mogę je normalnie dać do linku?
Np. mam tak: kategoria.php?id=4&name=Pozostałe
Działać działa. Ale czy lepiej unikać
kujol
W przypadku polskich znaków ja staram się ich unikać i chyba nawet lepiej ponieważ większość osób pisze "l" zamiast "ł". W końcu to też adres:), ale jeśli działa to dlaczego nie?
memory
Cytat
Jeśli chodzi o polskie znaki to mogę je normalnie dać do linku?

Można ale nie używa sie, zawsze tworzy się tzn. Slug

Rozwiązanie twojego problemu
  1.  
  2.  
  3. $url = $_SERVER['REQUEST_URI']; // /blog/id,nazwa
  4. $params = preg_split('/[\/,\:\^\*\"]/', $uri, -1, PREG_SPLIT_NO_EMPTY); // dzielisz adres
  5. if (empty($params[0]))
  6. $params[0] = 'index';
  7.  
  8. $controller = $this->params[0]; // blog
  9. $id= isset($this->params[1]) ? (int) $this->params[1] : false; // id
  10. $name= isset($this->params[2]) ? (string) $this->params[2] : false; // nazwa
  11.  


Masz już zmiennie wiec możesz operować nimi. Poczytaj o routingu
Turson
Rozwiązałem ten problem prościej.
Do tabeli news dodałem kolumnę `link`.
Przy dodawaniu artykułu funkcja usuwa z tytułu znaki polskie, specjalne, białe etc. i dodaje do `link`. Potem łatwo stworzyć następujący link: artykul/wyrazenia-regularne


Mam inne pytanko.
W body sprawdzam na podstawie linku z $_GET czy artykuł istnieje. Jak w takiej strukturze dać stronie <title> takie samo jak nazwa artykułu. Można sprawdzać 2 razy link (w <head><title>) i w body. Ale jest lepszy sposób?
  1. <title>Tytuł strony</title>
  2. </head>
  3. //Sprawdzenie linku i wyświetlenie artykułu
  4. </body>
  5. </html>
nospor
Cytat
Można sprawdzać 2 razy link (w <head><title>) i w body. Ale jest lepszy sposób?
Jest. Najpierw logika (pobieranie wszystkiego co niezbedne) a dopiero potem wyswietlanie. Wowczas najpierw sprawdzisz czy artykul istnieje, a dopiero potem zajmiesz sie generowaniem wygladu majac wszystkie niezbedne informacje
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.