Zauważyłem, że w sieci jest jakoś wyjątkowo mało poradników jak tworzyć pluginy do WordPressa, szczególnie po polsku (taki jest chyba tylko jeden). No to jest okazja by o czymś napisać
Bo tak się składa, że wczoraj w ramach ćwiczeń napisałem sobie taki prosty plugin od zera. Teraz popatrzcie jak to zrobiłem i przy okazji nauczcie się sami
Założenia: robimy plugin wykopowy
Plugin ma być maksymalnie prosty (w końcu to nasze pierwsze dzieło), bez nadmiaru kodu. Plugin będzie dodawał pod naszymi wpisami odnośnik, który po kliknięciu doda naszą stronę do Wykopu. Dokładniej: wyświetli nam wykopową stronę dodawania z wypełnionymi już polami na odnośnik, tytuł i krótki opis.
Tworzymy plik .php
Utwórz katalog oraz plik .php wewnątrz jego. Katalog i plik powinny (ale nie jest to konieczne) nazywać się tak samo jak nasz plugin; poszczególne wyrazy w nazwie powinny zostać rozdzielone myślnikami. Konwencją jest także rozpoczynanie nazwy pluginu od literek „wp”.
Mój plugin będzie się nazywał „WP Wykop by Muzungu”. Dlatego też utworzyłem katalog o nazwie ‘wp-wykop-by-muzungu’, a w nim plik ‘wp-wykop-by-muzungu.php’.
Tworzymy opis naszego pluginu
Opis pluginu umieszczamy w naszym pliku .php jako komentarz. Wygląda on mniej więcej tak:
<?php /* Plugin Name: WP Wykop by Muzungu Version: 0.1 Description: Automatically Adds <strong>"Wykop To" button to your posts. Author: Konrad Karpieszuk Author URI: http://www.muzungu.pl/ Plugin URI: http://www.muzungu.pl/ */
Co się stało się? W każdej linijce mamy pewien fragment opisu. I tak:
Plugin Name – to nasz nazwa pluginu.
Version: wersja pluginu w zapisie z kropką oddzielającą podwersje
Description: opis naszego pluginu. Jak widać w przykładzie powyżej możemy w nim użyć tagów HTML
Author: Imię i nazwisko autora pluginu, lub nazwa firmy, która go stworzyła.
Author URI: Odnośnik do strony WWW autora (bloga, profilu na Naszej Klasie…
)
Plugin URI: Tu wpisujemy odnośnik do strony, na której plugin będzie opisany.
Sprawdzamy czy nasz plugin został zainstalowany w odpowiednio nowej wersji WordPressa
Właściwie to nie musiałem tego robić, bo ten plugin jest bajecznie prosty i zadziała pewnie nawet w starym WordPressie. Ale podaję jak to się robi, bo może w przyszłości sam stworzysz plugin, który będzie korzystał tylko z najnowszej wersji API tego systemu blogowego.
Oto jak to się robi. W tym samym pliku wpisujemy poniżej:
/* Version check */
global $wp_version;
$exit_msg = 'WP Wykop by Muzungu requires WordPress 2.5 or newer.
<a href="http://codex.wordpress.org/Upgrading_WordPress">
Please update!</a>';
if (version_compare($wp_version, "2.5", "<"))
{
exit($exit_msg);
}
I tak po kolei, w linii 11. wpisaliśmy w postaci komentarza co robi poniższy kod (to jeden ze standardów kodowania pluginów dla WordPressa: każdą funkcję dokładnie okomentuj, tak aby potem inni mogli ją sobie łatwo przerobić bez zbędnego zagłębiania się w kod).
Następnie w linii 12. wywołujemy zmienną globalną $wp_version, w której przechowywana jest informacja o zainstalowanej wersji WP.
W 14 linijce tworzymy string, który przechowuje komunikat błędu, jaki się pojawi użytkownikowi, jeśli spróbuje nasz plugin zainstalować w zbyt starej wersji WordPressa.
Linie 18-21 to instrukcja warunkowa sprawdzającą wersję WP z wersją wymaganą przez nas (tutaj: 2.5) i jeśli warunek nie jest spełniony, instalacja kończy się wyświetleniem komunikatu, który stworzyliśmy przed chwilą.
Tworzymy kod odnośnika do Wykopu
Następnie musimy stworzyć kod HTML odpowiedzialny za wyświetlenie odnośnika do strony dodawania do Wykopu, w taki sposób, aby od razu zostały przekazane do niej informacje o adresie naszego wpisu, tytule i jego treści. Zrobimy to tworząc funkcję o nazwie WPWykopTo_Link().
Przyjrzyjmy się jednak najpierw jak wygląda odpowiedni odnośnik. Musi on nas kierować do strony http://www.wykop.pl/dodaj i przekazywać parametry metodą GET (czyli dokleić je do adresu strony) takie jak „url”, „title” oraz „desc”.
Zatem do dzieła.
/* Show a Wykop To Link */
function WPWykopTo_Link ()
{
global $post;
// get the URL to the post
$link = urlencode(get_permalink($post->ID));
// get a post title
$title = urlencode($post->post_title);
// get first 350 characters of post and strip it off
// HTML tags
$text = urlencode(substr(strip_tags($post->post_content), 0, 350));
// create a Wykop To link and return it
return '<a href="http://www.wykop.pl/dodaj?url='.$link.'&title='.$title.'&desc='.$text.'">Wykop To</a>';
}
OK, znów lecimy po kolei i sprawdzamy co zrobiliśmy:
Linia 26: wczytujemy kolejną globalną zmienną, dostarczoną nam prez silnik WordPressa. $post zawiera w sobie wiele informacji o aktualnie przetwarzanym/wyświetlanym wpisie blogowym.
W linii 28. wywołujemy funkcję dostarczoną przez WP get_permalink(), która pobiera stały odnośnik do wpisu. Funkcja operuje tutaj na zmiennej $post->ID (czyli pobiera odnośnik do wpisu o określonym identyfikatorze). Odnośnik „urlenkodujemy” (przetwarzamy tak, aby bezpiecznie się wyświetlił jako parametr w innym URLu) i przypisujemy do zmiennej $link.
Linia 31 przypisuje do zmienne $title tytuł wpisu wyciągnięty z metody „title” obiektu $post. (nie znoszę programowania obiektowego)
W linii 36. na pierwszy rzut oka dzieje się wiele. Na drugi rzut oka jednak łatwo zauważymy, że wszystko co się stało, to pobraliśmy z obiektu $post treść naszego wpisu, usunęliśmy z niego znaczniki HTML, przycięliśmy do długości 350 znaków, także „zurlenkodowaliśmy” i przypisaliśmy do zmiennej $text. Proste? Proste!
Linia 40 to już banał. Zwracamy w niej kod HTML odpowiedzialny za wyświetlenie odnośnika do Wykopu. W czasie tego zwracania w odpowiednie miejsca podstawiamy nasze zmienne $link, $title i $text, tak aby utworzyły prawidłowy odnośnik dodający.
Doczepiamy nasz link do końca treści wpisu
Kod HTML utworzony, czas więc go doczepić do końca treści naszego wpisu:
/* Add Wykop To link to the end of the post */
function WPWykopTo_ContentFilter ($content) {
return $content.WPWykopTo_Link();
}
Tutaj kod jest krótki. Tworzymy funkcję o zagmatwanej nazwie WPWykopTo_ContentFilter(), która pobierze parametr $content i doklei na jego końcu wynik działania naszej poprzedniej funkcji (czyli WPWykopTo_Link(), czyli kod HTML odnośnika do Wykopu). I tyle.
Informujemy WordPress aby użył naszego filtra
WordPress na tym etapie sam z siebie nie wie jeszcze, że jakaś funkcja już istnieje i przerabia treść wpisów w ten sposób, że dokleja na ich końcu odnośnik do Wykopu. To bardzo dobrze, bo pozwala nam to, teoretycznie (teoretycznie, bo w tym tutorialu nie pokaże jak to się robi; może w następnym rozdziale) na przykład dokleić odnośnik do Wykopu tylko do wpisów wyświetlanych na pojedynczych stronach. Ale w naszym przypadku chcemy aby link był dkolejany do wszystkich wpisów bez wyjątku.
Aby to sprawić używamy tak zwanych „haków” (ang. „hooks”). Haki „podczepiają” nasze funkcje pod silnik WordPressa. W kodzie WordPressa co rusz wpisane są funkcje sprawdzające czy w danym momencie jakiś plugin nie chciałby zmodyfikować działania owego silnika. Jeśli znajdzie taki plugin z odpowiednią instrukcją „hakującą”, pozwala mu zadziałać.
Haki są dwojakiego rodzaju.
Są haki podczepiane w momencie wykonania jakiegoś działania (action) przez WordPressa. Na przykład gdy zarejestruje się nowy użytkownik, gdy ktoś opublikuje nowy komentarz, lub gdy ktoś zamieści nowy wpis. Lub… przykładów jest bardzo wiele. Za zamieszczenie takiego akcyjnego haka odpowiada funkcja add_action(). Jednak teraz jej nie użyjemy.
Są też haki podczepiane w momencie wczytywania strony, których zadaniem jest przefiltrowanie tego, co silnik WordPressa właśnie wypluwa i zmodyfikowanie tej wyplutej zawartości. Takiego właśnie haka teraz użyjemy – chcemy bowiem wyplutą przez WordPressa treść wpisu zmodyfikować tak, że zanim pojawi się ona w przeglądarce odwiedzającego, doklejony do jej końca zostanie nasz wykopowy link. Za przefiltrowanie wordpressowego wyziewu odpowiada funkcja add_filter() i to jest właśnie moment gdy jej użyjemy.
Tutaj kod będzie bajecznie prosty i krótki:
add_filter('the_content', 'WPWykopTo_ContentFilter');
?>
Jak widać funkcja add_filter przyjmuje dwa parametry.
Pierwszy z nich to wskazanie co ma zostać przefiltrowane. W naszym przypadku filtrujemy treść wpisu, więc piszemy tutaj ‘the_content’. Pełna lista rzeczy, które można filtrować znajduje się tutaj.
Drugi parametr mówi funkcji jaka nasza funkcja ma zostać zastosowana do filtrowania zawartości pierwszego parametru. Dlatego wpisaliśmy tutaj nazwę naszej funkcji filtrującej ‘WPWykopTo_ContentFilter’.
I tyle, to już koniec naszego plugina.
Instalujemy plugin
Powyższe plugin na pewno działa. Ja już to sprawdziłem, a jeśli Ty też chcesz sprawdzić, utworzony na początku katalog ‘wp-wykop-by-muzungu’ wgraj do WordPressa w lokalizacji /wp-content/plugins. Następnie przejdź do panelu administracyjnego WordPressa. wybierz tam Plugins > Installed. Na liście pluginów zobaczysz swój plugin. Jeszcze on nie działa.
Aby zadziałał, musisz kliknąć obok niego napis „Activate”. Jeśli nie używasz WordPressa starszego niż 2.6, aktywacja na pewno się powiedzie. Przejdź teraz na stronę swojego bloga, a zobaczysz pod każdym wpisem mały, którki napis „Wykop To”
Zobacz też
Jest już dostępny rozdział drugi tego tutorialu.
Chcesz nauczyć się więcej?
Nie ma sprawy. Bardzo chętnie napiszę kolejne rozdziały, ale… gdy sam nauczę się czegoś nowego.
Jeśli chcesz to przyspieszyć, pomóż mi spełnić moje małe marzenie
A marzy mi się książka Vladimira Prelovaca WordPress Plugin Development – Beginner’s Guide. Kosztuje jednak prawie 30 euro plus koszty wysyłki.
Jeśli chciałbyś dołożyć złotówkę do niej (lub więcej):
- prześlij mi pieniądze przez paypal. Mój adres email w paypalu to selpod@gmail.com
- jeśli nie masz konta w paypalu, kopsnij mi kaskę na konto w mBanku. Mój numer konta: 21114020040000350230107505, a ja się nazywam Konrad Karpieszuk ![]()
Przelane pieniądze oznacz jakoś tak abym wiedział, że to na książkę
Jak chcesz pochwal się w komentarzu pod wpisem ile przelałeś
No chyba, że w wydaniu wraz z dystrybucją Ubuntu Linux. No ręce można załamać. Apache to serwer WWW; najpopularniejszy na świecie właśnie przez swoją szybkość i małe wymagania odnośnie zasobów. Bywa i tak, że na jednym serwerze Apache hostowane są dziesiątki tysięcy stron i wszystko działa bez zarzutu.
Ja tymczasem mam w systemie Apache’a zainstalowanego dla jednej strony i to testowej odpalanej raz na jakiś czas, gdy na niej pracuję.
I robię to tak: uruchamiam apache (sudo /etc/init.d/apache2 start), uruchamiam bazę MySQL (sudo /etc/init.d/mysql start) i wchodzę przeglądarką na localhosta, gdzie wyświetla mi się podstawowa instalacja WordPressa.
I ile taki apache po mniej więcej pół minucie pracy może zająć RAM-u? Sami popatrzcie, bo nie uwierzycie.
Pięknie, prawda? Podliczając łącznie wszystkie procesy po pół minucie pracy (nie, że np pracował 4 dni i nazbierał śmieci) zajmują 154,3 MB.
Dodam, że zwykłe odświeżenie strony (bez skryptów php w sobie) sprawia, że apache pracuje 7-8 sekund zajmując całą moc obliczeniową procesora.
Zwyczajnie zaczyna mi być wstyd, że używam Ubuntu.
Jestem niezwykle szczęśliwy, że to ja pierwszy mogę Wam donieść o powstaniu nowej, niezwykłej, pięknej, funkcjonalnej, uwielbianej przez tłumy strony internetowej, wartej według moich wstępnych szacunków od 4 do 370 milionów dolarów (strona jednak nie jest na sprzedaż).
Strona – arcydzieło kodu, zawierające w sobie najnowsze technologie internetowe, takie jak XHTML, CSS i JavaScript – znajduje się pod adresem www.aukcjoteka.com. I wiecie jakie jaja?
To ja jestem jej autorem! Wypas, normalnie!
Uwaga! Zanim klikniesz w link wyżej, muszę Cię uprzedzić, że zdarzały się omdlenia wśród internautów, którzy przypadkiem natknęli się na tą witrynę! Wiesława z Bydgoszczy relacjonuje, że wchodząc pod adres www.aukcjoteka.com doznała niemal boskiego objawienia. Inny anonimowy Internauta przyznaje się do uczucia podniecenia seksualnego, już w momencie wpisywania adresu strony do przeglądarki. Zatem przygotuj się na nieoczekiwane!
Strona oficjalnie istnieje w sieci dopiero od wczoraj, ale już wywołuje burzliwe reakcje w polskim i światowym środowisku ludzi zrzeszonych wokół web 2.0, ekomers i hodowli pietruszki. Jeszcze zanim stronę ukończyłem dostałem zapytania odnośnie możliwości odkupienia strony przez Rafała Agnieszczaka z Świstak.pl, Pierre’a Amidyara z Ebay oraz kogoś piszącego do mnie w języku afrykanerskim z Allegro. Strona jest jednak jak wspomniałem nie do kupienia, ale udało mi się wynegocjować, że za każde wystąpienie na stronie słowa „świstak” otrzymuję 700 złotych, za słowo „allegro” mam 43 duńskie korony, a za „ebay” puszkę oryginalnej amerykańskiej coli i koszulkę z wilkiem wyjącym do księżyca. Są też fanty za pisanie paszkwili na temat konkurencyjnych wobec siebie serwisów. Zatem nie jest źle.
Część z Was na pewno się zorientowała, że www.aukcjoteka.com (czujecie to przyspieszone bicie serca, gdy kolejny raz widzicie ten seksi adres internetowy?) to kontynuacja mojego bloga aukcjoteka.blogspot.com. I rzeczywiście – na bloggerze nieźle się już dusiłem, zwłaszcza od czasu gdy poznałem możliwości WordPressa. Co więcej nie ukrywam, że na Aukcjotece zarabiam jakieś tam pieniądze i mam zamiar zarabiać ich jeszcze więcej. Czas więc było rozwinąć skrzydła. Pamiętacie zapewne moje pytanie o domenę .com. To właśnie po to mi była ona potrzebna
Spodziewajcie się, że na nowej Aukcjotece będę częściej pisał niż tutaj na moim prywatnym blogu (prywatny blog pozostanie na prywatne przemyślenia o byle czym i o wszystkim), więc już teraz dodajcie sobie do czytnika kanał RSS Aukcjoteki. Spodziewajcie się też, że Aukcjoteka nie będzie już blogiem, ale serwisem o aukcjach internetowych z większą ilością osób piszących i różnymi fajnymi bajerami i nagrodami dla czytelników.
Tak więc raz jeszcze zapraszam i uprzedzam
Jeśli tylko pojawią się u Ciebie uczucia nudności i zawroty głowy, drżenie rąk czy uczucie ciepła w miejscach intymnych, oderwij się na chwilę od www.aukcjoteka.com. Pomyśl, że to tylko strona internetowa (a nie – jak pisze Paweł Sobieszkodzący ze wsi Pajewo – „przykład potęgi ludzkiego geniuszu, doskonałe zestawienie kolorów, architektura div-ów godna mistrza Da Vinci uwzględniająca w sobie podział kartezjański, złoty środek i srebrne obrzeża podobne do murów antycznej Atlantydy”), odetchnij i odpocznij. I wróć jeszcze raz!
Tak się Wam może wydawać, bo ostatnio tylko i wyłącznie piszę o tym jaki on jest wolny. To prawda, jest wolny (ostatni hit: po kliknięciu w Wyłącz komputer zaczyna się wyłączać dopiero po 15 sekundach lub wcale), ale ma kilka fajnych opcji.
Podoba mi się rozwiązanie zegarka w tym systemie. Kliknięcie w zegarek pokazuje kalendarz, mapkę świata i można sobie dodać więcej niż jedną lokalizację.
Bardzo przydatne. Jak wspominałem dorabiam sobie grzebiąc ludziom w stronach (głównie w wordpressie) i z oczywistych względów unikam brania zleceń od Polaków (bo Polscy zleceniodawcy wykonania stron to zwykłe ciule szukające frajerów co za 500 złotych zrobią im sklep internetowy, wypozycjonowany na pierwszym miejscu i do tego we flashu). Gnome’owy aplecik z zegarkiem więc bardzo mi się przydaje. Na obrazku powyżej widzicie więc, że właśnie skończyłem rozmowę o zleceniu z Olgą, bo choć u mnie jest po południu to ona idzie już spać. Dalej pogadamy sobie jutro
* * *
Jak się domyślacie wróciłem z weekendu. Wyjazd niestety nie potoczył się tak jak wszyscy by chcieli (jak to powiedział Bruce Willis w Pulp Fiction: „jest daleko od ok”), ale teraz łatamy rany celnie zadane i czekamy kiedy znów ruszą dla nas dni. Ale zaczyna znów być w porzo.
* * *
Ale humor mam i tak bardzo dobry, bo przed chwilą dowiedziałem się, że w przyszłym tygodniu mam się stawić na podpisanie umowy o pracę
Chwilę potem zadzwoniła do mnie moja dziewczyna, że też właśnie dostała pracę, więc humor w ogóle mam wyrąbisty. Wygląda na to, że schodzimy z tarczy
Podpowie mi ktoś gdzie najtaniej i bez kantów zanabędę domenę .com?
Domeny.pl mają tanio, ale w trakcie rejestracji nie wytrzymałem urabiania i traktowania jak półgłówka i wyczyściłem koszyk.
Na stronie podana cena domeny .com 9,90zł. Domeny nie da się włożyć do koszyka tak, aby była bez serwera za kilkaset złotych. Oczywiście koszyk można wyczyścić i tak też zrobiłem, ale dopiero teraz zobaczyłem, że 9,90zł to cena bez VATu i w sumie będzie to 12zł z kawałkiem.
Spoko. Kupuję dalej, dochodzi do płacenia i widzę, że już domena kosztuje 19,90zł. WTF?
Wywaliłem domene z koszyka, zarejestrowałem jeszcze raz i dopiero teraz wyświetliło mi info, że cena 9,90zł jest dla firm, a dla osób prywatnych 19,90zł. Wielka kasa to nie jest, ale firmie domeny.pl za traktowanie mnie jak łosia, który wszystko łyknie podziękowałem.
Wrzućcie w komentarzach jakieś dobre oferty firm rejestrujących domeny. Potrzebuję tylko domenę .com, bez hostingu. Wolałbym rejestrować ją w Polsce, ale jak oferty zagraniczne okażą się o niebo lepsze, mam konto w paypalu, więc problemu nie będzie.
Cena: jak najniższa, ale nawet jak będzie wyższa niż 19,90, byle uczciwie to skorzystam. Po prostu chce triumfalnie pokazać, że urabiać się nie dam
WordPress SEO – Definitive Guide To High Rankings For Your Blog.
Wrzucam na bloga, żeby mieć to jakoś zapamiętane i przeczytać kiedyś w przyszłości, bo – jako, że gdy mam zlecenie/pomysł na stronę pierwsze co się zastanawiam, to to, czy da się to zrobić w WordPresie – na pewno się przyda. Myślę, że także i Wam, więc zamiast w zakładkach, ląduje to tutaj. Dużo do czytania.
Jak już mam swojego bloga, na którym mogę pisać o wszystkim, to pozwolę sobie chwalić się tu stronami jakie wykonałem. Na razie stronę wykonałem jedną (przemilczam chwilowo strony, jakie robiłem lata temu i które już nie istnieją w sieci, a swego czasu bywały dość głośne), ale szykuje się już kolejna. No to zaczynamy.
Proszę Państwa – WildPoland – biebrza, białowieża wycieczki (a podlinkuję w ten sposób, to może uda się przepchnąć stronę też nieco w górę w Google). Stronę wykonałem już jakiś czas temu (na początku roku), ale chwalę się dopiero teraz.
Strona wykonana na zlecenie mojego kolegi i bardzo ściśle według jego wytycznych. Całe szczęście, że kolega Łukasz ma dobry gust i bardzo dobrą wizję strony, bo dzięki temu wytyczne nie sprawiają, że swojego dziełka musiałbym się wstydzić.
Łukasz zawodowo oprowadza turystów po atrakcjach przyrodniczych. Najczęściej można go spotkać nad Biebrzą z lornetką w ręku i tłumem nadzianych angielskich i niemieckich turystyów przy sobie. Strona miała na celu pomóc w rozwoju Łukasza biznesu i z tego co wiem już spełnia swoje zadanie.
Wild Poland to mini portal o zwiedzaniu przyrody w Polsce. Łukasz wrzuca tam swoje informacje na ten temat, bloguje na temat zmian w przyrodzie, a wszyscy czytelnicy mogą podzielić się swoimi spostrzeżeniami na zainstalowanym tam forum. Z uwagi na fakt, że całość jest celowana w zagranicznych turystów odwiedzających Polskę, na stronie obowiązuje język angielski.
Łukasz za stronę zapłacił (niestety nie tyle, ile bym chciał, no ale w końcu to kolega
) więc strona ma mu się zwrócić i z tego co wiem, powoli już się zwraca. Poza oczywistym znajdywaniem przez stronę kontaktu na linii Łukasz – turyści, na stronie zainstalowany jest plugin sklepowy, dzięki któremu Łukasz sprzedaje swój własnoręcznie napisany i opracowany przewodnik po Bagnach Biebrzańskich. Sprzedaż ruszyła całkiem niedawno, ale jak dzwoniłem do Łukasza przed wyjazdem do szpitala, powiedział mi, że już po kilku dniach było pięć pierwszych zamówień. Bomba.
A teraz technikalia, dla tych, którzy je lubią. Że strona napisana jest w HTML i CSS pisać nie muszę. O wiele ciekawszy jest fakt, że całość strony chodzi na skrypcie WordPress-a z zainstalowanymi licznymi pluginami (nawet wspomniany e-sklep i forum to wp-pluginy). Nie wszystko z marsza oczywiście działało tak jak powinno i w kodzie niektórych pluginów musiałem pogrzebać, a część funkcji napisać samemu, ale dzięki temu poznałem jak niesamowicie elastyczny i wygodny jest to skrypt! Od teraz mam zamiar wszystko najpierw próbować zrobić na wordpressowym silniku, a dopiero jak się okaże, że nie jest to możliwe, będę zastanawiał się nad innymi pomysłami.
No ichyba tyle o stronie. Zapraszam do obejrzenia, skorzystania, jeśli tematyka strony leży w Waszym kręgu zainteresowań. Napiszcie też mi w komentarzu tutaj co o wszystkim sądzicie.
* * *
Reklama
…a dla tych, których strona powaliła na kolana, mam dobrą informację: jestem na sprzedaż
Jeśli właśnie masz zamiar ruszyć z jakimś internetowym biznesem (ale tak na poważnie, bo bardzo nie lubię rozmawiać o czyichś fantazjach), to zapraszam do kontaktu (kkarpieszuk małpa gmail.com). Wiesz już co potrafię (potrafię oczywiście więcej) i jeśli chcesz mnie zatrudnić / zlecić mi prace nad stroną – oczywiście, że się polecam

