Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Generator tagów
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Balon
  1. <?php
  2.  
  3. class tags {
  4. public $tags;
  5. public $tagscount;
  6. public $prior;
  7. public $fsizes;
  8. public $cache;
  9.  
  10. function __construct( $tags, $fsizes ) {
  11. $this->tags = $tags;
  12. $this->tagscount = $this->getAllTagsCount( $tags );
  13. $this->fsizes = $fsizes;
  14. }
  15.  
  16. function getAllTagsCount( $tags ) {
  17. $count = 0;
  18. foreach( $tags as $tag ) {
  19. $count += $tag[key( $tag )]['count'];
  20. }
  21. return $count;
  22. }
  23.  
  24. function definePrior() {
  25. $temp = array();
  26. foreach( $this->tags as $tag ) {
  27. $temp[key( $tag )] = round( ( $tag[key( $tag )]['count'] * 100 ) / $this->tagscount );
  28. }
  29. $this->prior = $temp;
  30. }
  31.  
  32. function defineSizes() {
  33. $i = 0;
  34. foreach( $this->tags as $tag ) {
  35. array_push( $this->tags[$i][key( $tag )], $this->sizeByPrior( $this->prior[key( $tag )] ) );
  36. $i++;
  37. }
  38. }
  39.  
  40. function sizeByPrior( $prior ) {
  41. $sizes = array_keys( $this->fsizes );
  42. $ca = array();
  43. foreach( $sizes as $size ) {
  44. if( $prior > $size ) {
  45. $ca[] = $this->fsizes[$size]['size'];
  46. }
  47. else if( $prior == $size ) {
  48. return $this->fsizes[$size]['size'];
  49. }
  50. }
  51. return count( $ca ) > 0 ? max( $ca ) : false;
  52. }
  53.  
  54. function convertArray() {
  55. $new = array();
  56. foreach( $this->tags as $tag ) {
  57. $new[key( $tag )] = array( 'size' => $tag[key( $tag )][0] );
  58. }
  59. return $new;
  60. }
  61.  
  62. function genTagSizes() {
  63. $this->definePrior();
  64. $this->defineSizes();
  65. return $this->convertArray();
  66. }
  67. }
  68. ?>


użycie

  1. <?php
  2. /**
  3.  * Może być to np wyciąg z bazy danych
  4.  */
  5. $tag_list = array(  array( 'balon' => array( 'count' => 10 ) ),
  6. array( 'jagiełło' => array( 'count' => 450 ) ),
  7. array( 'krzysiek' => array( 'count' => 60 ) ),
  8. array( 'master' => array( 'count' => 34 ) ) );
  9.  
  10. /**
  11.  * Najniższą wartością musi być 1 bo inaczej będzie zwracało puste wyniki ( wielkości czcionek )
  12.  */
  13. $font_sizes = array(  '1' => array( 'size' => 10 ),
  14. '60' => array( 'size' => 20 ) );
  15.  
  16. $tags = new tags( $tag_list, $font_sizes );
  17. $smarty->assign( 'TAGS', $tags->genTagSizes() );
  18. ?>


taka klasa zwraca np tablice
Kod
Array
(
    [balon] => Array
        (
            [size] => 10
        )

    [jagiełło] => Array
        (
            [size] => 20
        )

    [krzysiek] => Array
        (
            [size] => 10
        )

    [master] => Array
        (
            [size] => 10
        )

)

wiem ze nakombinowane jest ile tylko mozna, ale pogubilem sie w polowie i zamieszałem troche winksmiley.jpg ale działać działą a to najwazniejsze

prosze o oceny
dr_bonzo
Skoro piszesz pod php5 to uzywaj public/protected/private przy okreslaniu dostepnosci metod w klasie.
nospor
Ja zadam glupie pytanie, bo nie lapie jednej rzeczy:
Do czego to ma sluzyc? Znaczy widze ze generuje jakiej tagi, ale po co mi one, co ja z nimi moge zrobic?
SHiP
Myślę że chodzi o typowo blogowe tagi ;] Dla kazdego wpisu określasz kilka tagów a nastepnie w zależności od czestotliwości występowania jest mu przypisywana określona wielkość...
nrm
Cytat(nospor @ 29.08.2006, 15:01:21 ) *
Ja zadam glupie pytanie, bo nie lapie jednej rzeczy:
Do czego to ma sluzyc? Znaczy widze ze generuje jakiej tagi, ale po co mi one, co ja z nimi moge zrobic?

biggrin.gif
nie generuje tagi tylko wyciaga je z bazy. ów kawałek kodu zlicza występowanie danego słowa kluczowego i przydziela mu rozmar aby mozna było latwo w htmlu porobić wielkości fontów. potrzebne to jest do tzw. tag cloud czyli chmurki tagów.

przykład:
http://www.wykop.pl/tagi

a do czego? do opisywania roznego rodzaju "itemów" od wpisów, tekstów, artykułów, po fotki, filmy itp.
Balon
zapamietam to sobie. ale pisalem to pod php4 i na ostatnio chwile zmienilem to na php5.

@normanos dzięki za opis biggrin.gif
nospor
Dzieki za wyjasnienia smile.gif
Kod klasy cięzko sie analizuje bo zaotany jak 150 smile.gif
A zamotany pewnie dlatego, ze ta Twoja struktura jest podejrzana... walisz tablice na tablicy na tablicy, a w podanym przez ciebie przykladzie wogole to nie ma żadnego uzasadnienia, no bo czy kodu:
  1. <?php
  2. $tag_list = array(  array( 'balon' => array( 'count' => 10 ) ),
  3. array( 'jagiełło' => array( 'count' => 450 ) ),
  4. array( 'krzysiek' => array( 'count' => 60 ) ),
  5. array( 'master' => array( 'count' => 34 ) ) );
  6. ?>

Nie mozna zapisac tak:
  1. <?php
  2. $tag_list = array('balon' => 10 , 'jagiełło' =>450 , 'krzysiek' =>60, 'master' =>34);
  3. ?>
?

A kodu:
  1. <?php
  2. $font_sizes = array(  '1' => array( 'size' => 10 ),
  3. '60' => array( 'size' => 20 ) );
  4. ?>

o tak:
  1. <?php
  2. $font_sizes = array('1' => 10, '60' =>20);
  3. ?>
?
No moze masz jakis ukryty sens w takim swoim zapisie, ale na pierwszy rzut oka tego nie widac. Poprosze o wyjasnienie jeszcze tego smile.gif
Balon
wyjsanie to tak. ta klasa to calkowity spontan, w polowie sie zamieszalem i musialem modyfikowac tablice tak zeby to chociaz dzialalo. jak bede mial czas to usiade i poprawie to biggrin.gif szczerze mowiac w ogole nie wiedzialem jak do tego podejsc, nie wiedzialem jak dzialaja tagi i podczas pisania dopiero odkrywalem sposob sortowania ich wg wazniejszych i mniej waznych winksmiley.jpg

przepraszam za zawilosc kodu winksmiley.jpg ale działać, działa i na pewno mi sie przyda winksmiley.jpg poprawie jak bede mial czas,

pozdrawiam
AxZx
to po co dajesz do oceny skoro ci dziala i to uwazasz za wystarczajace?smile.gif

nie wiem czy tak jest, ale powinno byc tak ze moge ustawic jaka ma byc najmniejsza czcionka, jaka najwieksza, ile ma byc wyswietlanych elementow, do tego wrzucic nazwy i ilosc poszczegolnych tagow i na tej podstawie obliczac rozmiary tych tagow - od najmniejszej czcionki do najwiekszej, co np 1px;
SHiP
Cytat(AxZx @ 30.08.2006, 17:05:23 ) *
to po co dajesz do oceny skoro ci dziala i to uwazasz za wystarczajace?smile.gif

nie wiem czy tak jest, ale powinno byc tak ze moge ustawic jaka ma byc najmniejsza czcionka, jaka najwieksza, ile ma byc wyswietlanych elementow, do tego wrzucic nazwy i ilosc poszczegolnych tagow i na tej podstawie obliczac rozmiary tych tagow - od najmniejszej czcionki do najwiekszej, co np 1px;


Klasa ogólnie jest mało wybajerzona winksmiley.jpg Zastanawiałem sie nad czyms podobnym do mojego projektu ale ja przewiduje różnorodnosć formualtu (px, pt, cm itp.), zmiennosc nie tylko rozmiaru ale takze(lub do wyboru) koloru, przezroczystości, zakresy zmiennosci(np od 10px do 25px), wspolczynik wzrastania(np. co 1px).

Poza tym kodu
  1. <?php
  2.  
  3. $font_sizes = array(  '1' => array( 'size' => 10 ),
  4. '60' => array( 'size' => 20 ) );
  5. ?>


Nie do konca rozumiem tj. musze deklarować stopnie wzrostu? Moim zdaniem powinno sie wrzucać do klasy ilość wszystkich rekordow a klasa sama powiniena wylicznać stopnie zmiany rozmiaru czcionki ;].
Balon
nowa wersja z generatorem kolorow opartym na klasie FiDO ( Temat: Generator gradientow )

Źródło : http://phpfi.com/147186

teraz do konstruktora podajemy dodatkowo egzemplarz klasy ColorGradient autorstwa FiDO oraz definiujemy w niej kolory przez ktore ma przechodzic gradient. Następnie wybieramy tryb zwracanych danych listy tagów
  • Color - wyróżnianie waznosci tagow poprzez kolor
  • Size - wryozniannie wielkosci tagow poprzez wielkość
  • All - wyroznianie poprzez dwie wyzej podane opcje

--edit--

poprawka

Źródło : http://phpfi.com/147193

nie mozna bylo w uzyciu praktycznym odczytac tagu, dodalem do tablic element tag i jesst juz ok

jutro mam zamiar dorobic klase generujaca automatycznie progi przydzielania czcionek - dwie opcje : automatycznie, ręcznie przez podanie tablicy z progami
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.