Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Klasa tagów
Forum PHP.pl > Inne > Oceny
Athlan
Klasa tagów.

Jako że tagi były zmorą programistów, pozwoliłem sobie napisać klasę, będę jej potrzebował do dalszych eksperymentów, więc daje do oceny Wam drodzy Forumowicze.

Klasa tagów:
http://www1.speedyshare.com/data/272766545...Cloud.Class.php

Instancja i poziomy tagów

Klasa nadaje poziomy (levele) słowom (tagom) które są ustanawiane przez użytkownika. Domyślnie jest 10 poziomów tagów. Możemy ustawić sobie 6 poziomów (chociażby dla nagłówków HTML). Ilość poziomów definiujemy w konstruktorze klasy, parametru nie musimy podawać, domyślnie posiada wartość 10):

  1. <?php
  2. $oTagCloud = new VtagCloud();
  3. // lub
  4. $oTagCloud = new VtagCloud(6);
  5. ?>


Dodawanie tagów

Do dodania tagów służą metody __set() (jako metoda magiczna z odwołaniem do klasy) oraz set(); Tagi zapisujemy jako NAZWA_TAGU => ILOŚĆ WYSTĘPOWAŃ W BAZIE. Pamiętajmy, że przy użyciu metody magicznej __set() tag musi spełniać normy nazw zmiennych (tylko litery i cyfry włączając znak _, nie zaczynając od liczby). Jeżeli mamy potrzebę nazwania tagu ze spacją, bądź jakimś znakiem, jesteśmy zmuszeni użyć metody set().

  1. <?php
  2. $oTagCloud->set('php', 90);
  3. $oTagCloud->php = 90;
  4. ?>


Przeglądanie tagów

Możemy pobierać ilość występowań tagu (analogicznie do __set() i set()), jeżeli w metodzie get() nie podamy parametry, zwracana zostaje tablica ze wszystkimi tagami.

Usuwanie tagów

Usunąć tag możemy poprzez analogiczne użycie metody __get() z funkcją unset() lub poprez metodę remove().

  1. <?php
  2. $oTagCloud->remove('Uncategorized');
  3. ?>


Sprawdzanie istnienia tagów

Sprawdzić tag możemy poprzez analogiczne użycie metody __get() z funkcją isset() lub poprzez metodę has().

Inicjowanie chmurki

Całość inicjujemy metodą init() (initialize), metoda zwróci tagi z ich realną wagą w skali 1 - 10 (domyślnie) lub 1 - WYBRANA WAGA w konstruktorze klasy.

  1. <?php
  2. $aInitialized = $oTagCloud->init();
  3. ?>


$aInitialized teraz posiada budowę TAG => WAGA

Dostęp

Klasa implementuje ArrayAccess, Iterator i Countable, jest klasą finalną, wykorzystuje wyjątki klasy VtagCloud Exception dziedziczącej po Exception

Przykłady zastosowań:

  1. <?php
  2.  
  3. include 'VtagCloud.Class.php';
  4.  
  5. $oTagCloud = new VtagCloud();
  6. $oTagCloud->set('php', 90);
  7. $oTagCloud->set('oop', 30);
  8. $oTagCloud->set('php.pl', 60);
  9. $oTagCloud->set('mysql', 115);
  10. $oTagCloud->set('php5', 60);
  11. $oTagCloud->set('SEO', 70);
  12. $oTagCloud->set('linux', 50);
  13. $oTagCloud->set('athlan', 5);
  14. $oTagCloud->set('vgroup.pl', 50);
  15. $oTagCloud->set('Internet', 100);
  16. $oTagCloud->set('wykop', 40);
  17. $oTagCloud->set('Uncategorized', 5);
  18.  
  19. $aInitialized = $oTagCloud->init();
  20.  
  21. /**
  22.  * Sample of use
  23.  */
  24.  
  25. echo '<div style="width: 200px; border: 1px solid #eaeaea; background: #f9f9f9; padding: 15px
    ; font-family: Tahoma;">'
    ;
  26.  
  27. foreach($aInitialized as $sTagName => $iTagRange)
  28. echo '<span style="font-size: '.($iTagRange * 3).'px">'.$sTagName.'</span> ';
  29.  
  30. echo'</div>';
  31.  
  32. ?>


  1. <?php
  2. foreach($aInitialized as $sTagName => $iTagRange)
  3. echo '<span class="tag_' . $iTagRange . '">'.$sTagName.'</span> ';
  4. ?>


Proszę o ocenę i podanie tego co Was gryzie, co by się przydało, co przeoczyłem smile.gif
Balon
Hm testuje właśnie, jest ciekawie, ale moim zdaniem wielkości czcionki tagów powinny być generowane w ustalonym zakresie bo teraz to nie ma sensu winksmiley.jpg Mam 5 tagów o następujących występowaniach : 1,1,1,2,3 no i tych z występowaniem 1 nie widać po prostu - są tak małe winksmiley.jpg

A gdyby było ustalanie zakresu wielkości fontów to klasa by była super winksmiley.jpg
Athlan
@Balon, klasa ranguje tylko tagi, co z tymi rangami zrobisz - Twoja sprawa... ja na przykład wrzucam to do klas i css sie tym zajmuje (wielkość i kolor czcionki) smile.gif
Hacker
Cytat
Klasa implementuje ArrayAccess, Iterator i Countable


mógłbyś pokazać w przykładach po co to...

Proponowałbym zmienienie (__)get-a tak, aby zwracał już levele tagów i tak samo przy pobraniu przez ArrayAccess, a ilość występowań tagu przez inną metodę np. getCount() albo coś takiego. Można by wtedy wywalić init, albo zmienić na private i żeby zapisywał wynik do pola w obiekcie, a odbywało by się to przy pierwszym wywołaniu (__)get-a albo którejś metody ArrayAccess-a
Athlan
Cytat
mógłbyś pokazać w przykładach po co to...

Rób z tym co chcesz... generalnie chodzi o to ze moze zdarzyc sie sytuacja, gdzie nie mamy juz dostepu do zrodla tagow (bo zamknelismy), a jakis odczyt musi byc... po to jest ArrayAccess smile.gif

Cytat
Proponowałbym zmienienie (__)get-a tak, aby zwracał już levele tagów i tak samo przy pobraniu przez ArrayAccess, a ilość występowań tagu przez inną metodę np. getCount() albo coś takiego. Można by wtedy wywalić init, albo zmienić na private i żeby zapisywał wynik do pola w obiekcie, a odbywało by się to przy pierwszym wywołaniu (__)get-a albo którejś metody ArrayAccess-a


Levele tagów MUSZĄ - podkreślam - wystapic PO metodzie inicjowania. Dlaczego? A po co inicjiować to samo przy kazdym dodaniu tagu ? Zbedny czas a innej symulacji nie ma. Więc uwagę porzucam smile.gif
Hacker
Cytat
A po co inicjiować to samo przy kazdym dodaniu tagu ?


A czy ja mówię, że masz inicjować przy każdym dodaniu tagu? Wyraźnie chyba napisałem

Cytat
Można by wtedy wywalić init, albo zmienić na private i żeby zapisywał wynik do pola w obiekcie, a odbywało by się to przy pierwszym wywołaniu (__)get-a albo którejś metody ArrayAccess-a
Athlan
Cytat
Można by wtedy wywalić init, albo zmienić na private i żeby zapisywał wynik do pola w obiekcie

Tak, ale nie ma mozliwosci wyliczenia wagi tagu przed dodaniem ich wszystkich... tak czy siak, init musi być smile.gif Jak chcesz coś udowodnić to na form zazwyczaj pisze się swoje kody smile.gif

Przykłady:
http://forum.php.pl/index.php?s=&showt...st&p=367004
http://forum.php.pl/index.php?s=&showt...st&p=362528

@Hacker, Jak masz jakieś pomysły to śmiało wal i pokazuj kod smile.gif może będzie przydatne smile.gif
Hacker
ok rzucę, więc kodem...

http://www.speedyshare.com/941383315.html

Zmiany:

init - private
get - zwraca obliczony poziom tagu

Dodanie

private initOne - initializuje jedynie 1 tag
public getCount - dawny get
public addAll - dodaje wszystkie tagi z tablicy

Edit:
Kod już bez błędów
Athlan
Cytat
ok rzucę, więc kodem...

Faktycznie rzuciłeś, nawet nie raczyłeś sprawdzić, czy dobrze napisałeś... parse i undefined varibles - to jest to ;]

Cytat
get - zwraca obliczony poziom tagu

I co? tak czy siak... i tak Initujesz (liczysz od nowa wszstkie tagi i jego poziom). A co gdy na przykład pobiorę sobie wage tagu potem dodam nowy i stare dane nie są aktualne? Hę? Od tego jest u mnie Init(). Tak więc nic nie wniosłeś do tematu, a wykłócałeś się klika postów... bez komentarza...

Daj sobie chłopie siana. Nawet zmienne Ci się nie zgadzają smile.gif

Pozdrawiam, Athlan smile.gif

------
Cytat
Daj sobie chłopie siana.

Bez takich smile.gif - tiraeth
tiraeth
Tak, tylko po co mi to? smile.gif Gdyby jakoś ciekawie to sortowało, to ja rozumiem smile.gif A tak, to nie jest to przydatne tongue.gif Pobiorę sobie kategorie i wyświetlenia, policzę 3 linijkami wagę (pętla-liczenie-koniec_petli) i wyswietle tak jak Ty wyświetlasz tongue.gif Natchnęło mnie to, sam napisze coś takiego, ale będzie więcej bajerów smile.gif

Kod ciekawy, ale nie przydatne jak dla mnie tongue.gif - 4/6
Kamson
Bardzo fajna zabawka tongue.gif prosto i przyjemnie o i plus bo widzę ArrayAccess czyli fajnie by się na tym pracowało winksmiley.jpg

konkretnych zastosowań nie widzę ale jako silniczek wspierający jakieś inne funkcje fajnie winksmiley.jpg np do obliczania wagi słów kluczowych w szukajce przy analizie trafności zapytania ;P
eai
Athlan liczenie rangi nie działa u Ciebie prawidłowo.
Zerknij na moje rozwiązanie (ostatni post):
http://forum.php.pl/index.php?showtopic=10...t=0#entry513167


--edit (@ociu)
Powinieneś dostać ostrzeżenie, za odkopywanie starych tematów. To jest ostatnie moja taka wiadomość.
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-2024 Invision Power Services, Inc.