Bywalec
Postów: 720 Pomógł: 37
Data rejestracji: 22.05.2005 23:17
|
Chciałem przedstawić wykonaną przez siebie klasę cutter. Używam jej do pobierania dokładnie określonych wycinków z wczytanego ciągu, pliku tekstowego lub strony html. Na początku była to pojedyncza funkcja z ogromem parametrów, jednakże trudność jej używania skłoniła mnie do przepisania tego na postać obiektową.
Użytkowanie tej klasy jest bardzo proste, wystarczy zapamiętać tylko kilka poleceń i już można efektywnie uzyskiwać wyniki według zadanych kryteriów.
GeSHi: PHP require_once "class.cutter.php"; $c = new cutter('http://www.example.com/index.php', true); $c -> start("<body>", false, 1); $c -> end("</body>", false, -1); $c -> replace("<br>","<br />"); $c -> delete("<hr>"); echo $c->cut(); $result = $c->cutall();
Zinterpretowano w sekund: 0.052, wykorzystano GeSHi 1.0.8.10
Podany kod pobiera zawartość strony http://www.example.com/index.php, następnie ustala że tekst do wycięcia znajduje się między znacznikami <body> i </body>. Dodatkowo zamienia wszystkie znaczniki <br> na <br /> i usuwa <hr>. Na koniec wyświetla wynik na ekranie.
Przeanalizujmy podany kod:
- Należy załączyć plik zawierający definicję klasy do pliku w którym chcemy wykorzystywać tą klasę. Można też ją załączać w pliku maincore.php, dzięki czemu będziemy mogli z niej korzystać na każdej podstronie portalu.
- Polecenie new cutter() tworzy nowy obiekt cutter. Pierwszy parametr typu string ustala źródło, czyli ciąg, który będziemy przeszukiwać. Źródłem może być także lokalny plik lub zewnętrzna witryna www (tak jak to prezentuję w podanym przykładzie). Drugi parametr typu boolean określa czy źródło jest ciągiem, plikiem lokalnym czy stroną zewnętrzną. Wartość true dotyczy tylko plików i stron.
- Polecenie start() ustala parametry wyszukiwania początku tekstu do wycięcia. Pierwszy parametr typu string ustala ciąg, od którego zaczyna się wyszukiwany tekst. Drugi parametr typu boolean określa czy ten ciąg ma być zawarty w wyniku. Trzecim parametrem typu integer określamy offset wycinania.
- Polecenie end() ustala parametry wyszukiwania końca tekstu do wycięcia. Pierwszy parametr typu string ustala ciąg, którym kończy się wyszukiwany tekst. Drugi parametr typu boolean określa czy ten ciąg ma być zawarty w wyniku. Trzecim parametrem typu integer określamy offset wycinania.
- Polecenie replace() umożliwia zamianę ciągów w wyniku. Pierwszy parametr typu string ustala ciąg do znalezienia, a drugi parametr również typu string ustala ciąg, na który ma zostać zamieniony znaleziony ciąg.
- Polecenie delete() robi prawie to samo co polecenie replace(), ale jak nazwa wskazuje, usuwa znaleziony ciąg. To polecenie przyjmuje dowolną ilość parametrów typu string, określających ciągi do usunięcia.
- Polecenie cut() powoduje zwrócenie poszukiwanego ciągu, lub wartość false jeśli operacja wyszukiwania się nie powiedzie. Opcjonalny pierwszy parametr typu boolean określa, czy wynik ma zostać również zapisany jako nowe źródło do wyszukiwania. Jest to przydatne, gdy chcemy stopniowo przycinać źródło, na przykład gdy jego struktura uniemożliwia uzyskanie od razu poszukiwanego ciągu. Domyślna wartość tego parametru to false.
- Polecenie cutall() jest podobne do polecenia cut(), jednakże zwraca tablicę (typ array) wszystkich ciągów znalezionych w danym źródle. Nie wolno podawać w niej żadnych parametrów, gdyż jest to funkcja rekurencyjna.
I to w sumie chyba wszystko...
Dodam jeszcze, że cutter posiada opcję debugowania w celu szybkiego lokalizowania błędów użytkownika (o tak, najczęściej to my się mylimy, nie maszyny). Żeby to uruchomić, należy na serwerze, w katalogu w którym użytkowany jest cutter, utworzyć plik o nazwie debug.log i nadać mu prawa chmod 777, a w poleceniu cutter() podać trzeci parametr o wartości true. Generowana zawartość powinna być w miarę zrozumiała...
Planowane zmiany w projekcie:
- połączenie funkcji cut() z cutall() oraz zawsze zwracanie wyniku jako array
- wszystkie operacje wykonywane dopiero w poleceniu cut()
- kolejkowanie poleceń (obecnie wykonują się najpierw replace, potem delete)
- dodanie wyrażeń regularnych do wyszukiwania, zamiany i kasowania ciągów
- tryb debug w wersjach "do pliku" i "na ekran"
Gander dodał/a następującą plik:
Edytowane przez Gander dnia 26.10.2008 17:12:16
|