DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Regular expression i htaccess (http://www.devprotalk.com/forumdisplay.php?f=41)
-   -   Moj CMS i URL slug (http://www.devprotalk.com/showthread.php?t=8188)

ljtruba 11. 12. 2009. 23:40

Moj CMS i URL slug
 
Poydrav,
imam veliku bazu vesti sa preko 600 članaka na sajtu www.hi-files.com/vesti

Želim da konačno napravim SEO friendly linkove, a kasnije i neki lepi kalendar za vesti.

Pročitao sam članak na linku
http://phptips.org/index.php/create-...d-mod_rewrite/
i uz pomoć njega napravio neku skriptu koju možete videti na
http://www.hi-files.com/vesti2.php

U htacces fajlu stoji sledece
Kôd:

RewriteEngine on
RewriteRule ^/?([a-z]+)$ $1.php [L]
RewriteRule ^vesti/([0-9]+)$ /vesti.php?page=$1 [L]
RewriteRule ^vesti2/([0-9]+)$ /vesti2.php?page=$1 [L]
RewriteRule ^vesti2/([a-zA-Z0-9\-]+)/?$ vesti2.php?articleurlslug=$1 [L]

Imam nekoliko problema.
1. ne radi mi link http://www.hi-files.com/vesti2
2. da li postoji automatski nacin kreiranja slug-a, jer trenutno imam u bazi dodatno polje pa 600 puta treba da unesem neki slug
3. sta se desava sa nasim slovima

znam da je problem kompleksan, ali pomagajte, zaista želim da napravim ovo kako treba

MorenoArdohain 12. 12. 2009. 00:19

Mogu da ti pomognem samo oko ovog linka za vesti2.. Ne nalazi http://www.hi-files.com/vesti2 zato sto nemas regexp koji hvata to.. Regexpi koje si stavio hvataju samo vesti2 sa slashom i brojem strane.

Mali dodatak: vidim i ovaj prvi rule:
RewriteRule ^/?([a-z]+)$ $1.php [L]
izmeni ga da prihvata i brojeve, trebalo bi da vesti2 pretvara u vesti2.php

Pitanje je onda da li se kolje sa drugim rules :)

japan 12. 12. 2009. 00:28

1. ovako nesto bi verovatno pomoglo:
Kôd:

RewriteRule ^vesti2/?$ /vesti2.php [L]
2.
Kôd:

update tabela_vesti set slug=lcase(naslov)
3. mislim da ne bi trebalo da bude problema sa nasim slovima, ali ako bas hoces da imas ciste ASCII karaktere u url-ovima, onda bi trebalo da imas neku trazicionu tabelu u kojoj bi definisao tacno koji se karakter ubacuje umesto odredjenog naseg slova, i da to primenjujes i pri generisanju slug-a, a i pri ovom upitu iz stavke 2.

//edit: pod tranzicionom tabelom podrazumevam nesto poput ovoga $punc na linku koji si naveo, s tim da ne treba da izbacujes te karaktere, nego da ih zamenis slovima bez kukica...

ljtruba 12. 12. 2009. 11:18

Hvala obojici.

@Moreno
Kada umesto RewriteRule ^/?([a-z]+)$ $1.php [L] napisem RewriteRule ^/?([a-z][0-9]+)$ $1.php [L] onda mi drugi linkovi ne rade

@japan
Uradio sam RewriteRule ^vesti2/?$ /vesti2.php [L] i lepo radi

Sto se tice nasih slova, pogledajte trecu vest.
Slug u bazi je denon-osvežava-stereo-modele ali link ne radi

nn.nn 12. 12. 2009. 12:36

Citat:

Originalno napisao ljtruba (Napišite 77361)
Sto se tice nasih slova, pogledajte trecu vest.
Slug u bazi je denon-osvežava-stereo-modele ali link ne radi

Ne radi jer si ograničio rule samo na ASCII znakove. Ako možeš, probaj da poslednje pravilo zameniš sa
Kôd:

RewriteRule ^vesti2/(.)/?$ vesti2.php?articleurlslug=$1 [L]
Ili uradi nešto poput onog što ti je japanac napisao pod 3.

ljtruba 14. 12. 2009. 01:02

Premenio sam na RewriteRule ^vesti2/(.)/?$ vesti2.php?articleurlslug=$1 [L]
ali ipak ne radi.

Nemanja Avramović 14. 12. 2009. 01:47

Mislim da treba:

Kôd:

^vesti2/(.*)/?$ vesti2.php?articleurlslug=$1 [L]

ljtruba 15. 12. 2009. 15:49

Radi!!! Bacite pogled na www.hi-files.com/vesti

Sto se tice htaccess-a stavio sam
Citat:

RewriteRule ^vesti/([0-9]+)$ /vesti.php?page=$1 [L]
RewriteRule ^vesti/?$ /vesti.php [L]
RewriteRule ^vesti/(.*)/?$ vesti.php?articleurlslug=$1 [L]
Napravio sam php fajl koji mi radi update tabele sa vestima i pravi slug tako sto uzima naslov, skida mu & / ' i umesto spejsova stavlja -. Takodje, radi i lowercase i stripslashes.

Pri unosu novih vesti, napravio sam da se slug sam kreira po istom pravilu, ali da je pri editovanju clanka moguce menjati i slug.

Uh, sad kad krene poseta sa Gugla :)

cvele 15. 12. 2009. 16:11

Najefikasniji nacin da kreiras slug je pri unosu vesti u zasebno polje u tabeli.
Dakle, napravis fju koja ce ti od naslova praviti slug i upisivati ga u bazu.

Primer (obrati paznju na encoding):
PHP kôd:

function toSlug$title )
{
$bad = array( 'Š','Ž','š','ž','ź','Ŕ','Á','Â','Ă','Ä','Ĺ','Ç','Č','É','Ę','Ë','Ě','Í','Î','Ď','Ń',
'Ň','Ó','Ô','Ő','Ö','Ř','Ů','Ú','Ű','Ü','Ý','ŕ','á','â','ă','ä','ĺ','ç','č','é','ę',
'ë','ě','í','î','ď','ń','ň','ó','ô','ő','ö','ř','ů','ú','ű','ü','ý','˙',
'Ţ','ţ','Đ','đ','ß','Ś','ś','Ć','ć','µ',
'"',"'",'“','”',"\n","\r",'_','ć','Ć','č','Č','đ','Đ');

$good = array( 'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N',
'O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e',
'e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y',
'TH','th','DH','dh','ss','OE','oe','AE','ae','u',
'','','','','','','-','c','C','c','C''dj''Dj');

$slug str_replace$bad$good$title);

$slug trim($slug);
$bad_reg = array('/\s+/','/[^A-Za-z0-9\-]/');
$good_reg = array('-','');

return 
strtolower(preg_replace($bad_reg$good_reg$slug));



ljtruba 16. 12. 2009. 16:35

Hvala cvele, ali nasa slova u mom slucaju lepo rade, tako da nema potreba da ih "osakatim"


Vreme je GMT +2. Trenutno vreme je 11:27.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.