Php, mysql si altele

O alternativa la .htaccess – url rewrite

in Funny, Php, mysql si altele, Web - 07.10.2009 - 4 comentarii

Azi am vazut cea mai tare solutie posibila de url rewrite. Pentru cine nu stie ce este aceea url rewrite, sunt acele link-uri “frumoase” dintr-un site. De exemplu: www.site.ro/notebook-toshiba/123 in loc de www.site.ro/produs.php?id=123. Aceasta rescriere a linki-urilor este o solutie eleganta care face calea linkurilor mai usor descifrabila dar care si ajuta la optimizare.
Acest lucru se face foarte usor folosind un fisier .htaccess pe server in care se scrie urmatoarea regula (pentru exemplul de mai sus):

RewriteRule ^([^/\.]+)/([0-9]+)$ produs.php?id=$2 [L]

Adica i se spune serverului ca orice link de forma www.site.ro/text/numar sa duca catre fisierul produs.php?id=numar, textul nu ne intereseaza neaparat.

Foarte clar si foarte simplu de implementat. Cam toate site-urile in ziua de azi folosesc asa ceva.

Dar exista si o alternativa!!! Am vazut azi prin scripturile unui site urmatoarele link-uri www.site.ro/categorii/un-nume-de-categorie.php, sau www.site.ro/produs/un-nume-de-produs.php. La prima vedere pare a fi folosit un .htaccess, dar ce rost mai are acel “.php” la sfarsit? Dupa care am tras concluzia ca nu exista nici o regula si ca defapt fiecare produs are un fisier si ca practic site-ul ar fi in totatitate static. Insa am gasit o mare baza de date cu multe categorii si produse. Am zis ca nu se poate, exista o baza de date, trebuie sa fie si un .htaccess sau o regula de rescriere… Ei bine, nu exista… dar nici paginile nu sunt statice…

Care este de fapt implementarea rescrierii de url?
mai departe »

Algoritm de cautare si ordonare dupa relevanta in php

in Php, mysql si altele, Web - 02.10.2009 - 2 comentarii

De curand am fost nevoit sa fac un algortim de cautare a unor produse ceva mai special. Iata ce idee mi-a venit si ce am reusit sa fac.

Sa zicem ca facem o cautare dupa “amplificator cablu si antena tv”. Facand aceasta cautare cu o simpla spargere in cuvinte si folosind LIKE ‘%cuvant%’ in mysql se pare ca nu vom obtine o ordine foarte ok, insa vom obtine rezultatele de care avem nevoie. Daca sa zicem cautarea a intors peste 100 de rezultate, trebuie afisate produsele cele mai apropiate de cautarea efectuata.

Dupa ce sunt puse rezultatele cautarii intr-un vector, algoritmul le prelucreaza astfel:

1. Primele inregistrari si cele mai importate vor fi cele care au toate cuvintele in titlu si in aceasi ordine (nu conteaza daca au intre ele caractere ciudate sau spatii, precum ignora si anumite cuvinte mici, gen: “si”, “ca”, “de”…)

2. Dupa aceea se fac urmatoarele combinatii de cuvinte: “amplificator cablu”, “amplificator antena”, “amplificator tv”, “amplificator cablu antena”, “amplificator cablu tv”, “amplificator antena tv”, “cablu antena”, “cablu antena tv”, “cablu tv”, “antena tv”. Cu alte cuvinte se formeaza combinatii intre cuvinte insa numai de la stanga spre dreapta. Un exemplu mai simplu: 1, 2, 3, 4. Combinatiile posibile vor fi 1 2, 1 3, 1 4, 1 2 3, 1 2 4, 1 3 4, 2 3, 2 4, 2 3 4, 3 4. Daca am face combinatii sau permutari intre cuvinte am obtine mai multe variante insa si multe irelevante (si-asa unele sunt irelevante), de exemplu am obtine “tv antena”, sau “tv amplificator” care in general sunt folosite invers. Am mers pe ideea ca la fel cum un user ii da un nume logic produsului sau, la fel si cautarea va fi destul de logica, insa de ce nu, la urma urmei pot fi incluse si acele combinatii de cuvinte.

mai departe »