20121005

Jak zrobić popup na blogspocie?

Zrobić sam popup całkiem łatwo...

Ale ja pokażę Ci jak zrobić go w 10 minut, a z moimi gotowymi materiałami w minut: 3

No i nie będzie to zwykły popup, a inteligentna warstwa, której zadanie będzie zapis internauty na Twoją listę adresową.


Popup pokazuje się na każdej podstronie bloga, gdyż jest zapisany w głównym szablonie.

Posiada przycisk zamknięcia, który powoduje zniknięcie popupa na dobę. Czyli jeśli ktoś nie chce się dziś zapisać, to zamyka i się nie zapisze, ale jeśli wróci jutro, pojutrze, za miesiąc, to znów poprosimy go o zapis.
Informacja zapisuje się w cookie, poprzez JavaScript

Formularz zawiera walidację - standardową JS, jaką udostępnia Freebot.pl, bo właśnie tego systemu używam. Innymi słowy nie przepuścimy pustego pola, ani niepoprawnego adresu email, czy też braku akceptacji polityki prywatności.

W momencie kliknięcia na przycisk 'Zapisz mnie', kiedy wprowadzone dane są poprawne, w nowej karcie przenoszeni jesteśmy na stronę freebota, gdzie mamy informację o powodzeniu (lub nie powodzeniu) zapisu na listę. Wracając na bloga, popupa nie zobaczymy przez najbliższe 3 lata - przynajmniej na tej przeglądarce, a dokładniej do czasu gdy będzie ona pamiętała cookie:)

Skrypt formularza składa się z 3 prostych części: kodu html, styli CSS, oraz skryptu JavScript - ja te dwa ostatnie umieściłem na zewnętrznym serwerze i załączyłem jako pliki.

Zaczynamy umieszczanie

Przechodzimy do ustawień bloga. Wybieramy szablon, edycje kodu i dochodzimy do momentu, gdzie widzimy czysty kod szablonu:





Niemal na samej górze, zaraz za znacznikiem <head> umieszczamy pliki css i js, albo osadzamy tam te skrypty.


function setCookie(c_name,value,exdays)
        {
            var exdate=new Date();
            exdate.setDate(exdate.getDate() + exdays);
            var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
            document.cookie=c_name + "=" + c_value;
        }

        function getCookie(c_name)
        {
            var i,x,y,ARRcookies=document.cookie.split(";");
            for (i=0;i<ARRcookies.length;i++)
            {
              x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
              y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
              x=x.replace(/^\s+|\s+$/g,"");
              if (x==c_name)
                {
                    return unescape(y);
                }
              }
        }

        function checkCookie()
        {
            var popup=getCookie("blog_popup");
              if (popup!=null && popup==1)
              {
                // alert("nie pokazujemy popupa");
              }
                else
              {
                //document.getElementbyId("id_" + si).style.display='none';
                document.getElementById("popup").style.display="block";
              }
              //alert('check');
        }
       
        function hidepopup()
        {
            setCookie("blog_popup", 1, 1);
            document.getElementById("popup").style.display="none";
        }
       
            function SprawdzFormularz(f)
    {
        if (f.email.value=='')
        {
            alert('Nie podałeś/aś adresu e-mail.'); return false;
        }
        if ( ((f.email.value.indexOf('@',1))==-1)||(f.email.value.indexOf('.',1))==-1 )
        {
            alert('Podałeś/aś błędny adres e-mail');
            return false;
        }
        if (f.imie.value=='')
        {
            alert('Nie podałeś/aś swojego imienia');
            return false;
        }
        if (f.pp.checked == false )
        {
            alert('Musisz zgodzić się z Polityką Prywatności.');
            return false;
        } else
        {
            setCookie("blog_popup", 1, 1000);
            hidepopup();
            return true;
        }
    }



Funkcje skryptu pochodzą z freebota oraz W3C School - funkcje do obsługi cookie.

Poniższy kod CSS pisałem sam, poza formatowaniem formularza, który zapożyczyłem z freebota.

#popup {
            width: 60%;
            min-width: 620px;
           
            height: 300px;
            margin: 5% auto 0px 18%;
            padding: 15px;
            box-shadow: 0px 0px 195px #333;
            background: #232323;
            display: none;
            font-family: arial;
            color: #eee;
            border-radius: 2px;
            border: 1px solid #888;
            position: absolute;
            position: fixed;
            z-index: 10000000000000;
        }
       
        #popup #pclose {
            width: 14px;
            height: 14px;
            padding: 3px;
            margin: -22px -22px 0px 0px;
            background: #444;
            color: #aaa;
            text-align: center;
            float: right;
            font-size: 14px;
            cursor: pointer;
            border-radius: 10px;
        }
       
        #popup .title {
            font-size: 18px;
            displa: block;
            font-weight: bold;
        }
       
        #popup .fform {
            width: 310px;
            margin-top: 25px;
            padding: 15px;
            background: #eee;
            box-shadow: 0px 0px 5px #fff;
            border-radius: 2px;
            color: #333;
            float: left;
        }
       
        #popup .fform input[type=text] {
            width:180px;
            display:block;
            float:left;
        }
       
        #popup .fform input[type=submit] {
            background: #cd0000;
            color: #fff;
            font-size: 14px;
            font-weight: bold;
            cursor: pointer;
            padding: 10px 15px 10px 15px;
            border-radius: 2px;
            border: 0px;
            float: right;
            box-shadow: 0px 0px 3px #aaa;
           
        }
       
        #popup .fform label {
            width:100px;
            display:block;
            float:left;
            margin-right:15px;
        }
       
        #popup .fform .rrow {
            height: 30px;
            margin: 15px 0px 15px 0px;
            clear:both;
            display: block;
        }
       
        #popup .strz {
            width: 260px;
            margin-top: 70px;
            float: right;
        }


Korzystałem z praktycznie gotowych rozwiązań, poza jakimś w miarę przejrzystym wyglądem formularza, który Ty oczywiście możesz sobie zmienić.

Pozostał jeszcze sam kod html, który w większości to formularz skopiowany z freebota. Cały kod musisz wstawić zaraz za znacznikiem <body> w kodzie szablonu strony.

    <div id="popup" style="display: none;">
        <span id="pclose" onclick="javascript:hidepopup();">X</span>
        <span class="title">Zapisz się, na moją listę adresową</span>
       
        <img src="http://queenefekt.pl/strz.png" class="strz" />
       
        <div class="fform">
            <form target="_blank" action="http://www.implebot.pl/post.php" name="impleBOT.pl" method="post" onsubmit="return SprawdzFormularz(this)">
                <input name="uid" type="hidden" value="32912" />
                <input name="zrodlo" type="hidden" value="blog" />
                <div class="rrow">
                    <label for="email">Twój E-mail:</label>
                    <input name="email" type="text" />
                </div>
                <div class="rrow">
                    <label for="imie">Twoje Imię:</label>
                    <input name="imie" type="text" />
                </div>

                <div class="rrow">
                    <input type="checkbox" name="pp" value="1" style="border:0px;" /> Zgadzam się z <a href="http://lukasdominikowski.blogspot.com/p/polityka-prywatnosci.html">Polityką Prywatności</a>
                </div>
                <input type="submit" value="Zapisz mnie" />
                <div style="clear: both;"></div>
            </form>
        </div>       
    </div> 


Cały kod żywcem skopiowałem ze swojego bloga, musisz podmienić tutaj wartość znacznika <input> o nazwie uid - wpisując tam swój numer użytkownika freebot.

Również musisz zmienić link do polityki prywatności. Możesz korzystać z moich skromnych zasad, ale musisz umieścić je u siebie.

Również grafika strzałki jest na moim serwerze i nie jest do dla Ciebie pewne źródło, jeśli chodzi o przechowywanie plików, tym bardziej, że strzałka jest tymczasowo - docelowo będzie gratis, który chciałbym dawać wzamian za zapis na listę.

Zapisz teraz szablon i wejdź na swojego bloga. Co widzisz? Jest popup?

20120810

Wskazówki dla pracujących freelancerów

Krótko, konkretnie, bez większych filozoficznych wywodów. Będąc freelancerem sam zarządzasz swoim czasem, zadaniami... co wbrew pozorom nie jest łatwe.

Łatwo natomiast jest się zdekoncentrować. Zamiast skupić się na pracy, to wchodzić co chwilę na facebooka, albo inne strony - możliwie najbardziej oddalone od Twojej pracy.

  1. Godziny pracy. Jak pracujesz, to pracujesz. Dopiero po godzinach możesz zająć się innymi, prywatnymi sprawami. Masz elastyczny czas pracy, ale określ sobie jakieś wartości od-do.

  2. Przerwy. Przerwa to najprzyjemniejszy i też jeden z najważniejszych elementów pracy freelancera... Jeśli dobrze Ci idzie i jesteś skupiony, to nie rób przerwy. Odpocznij, jeśli zakończysz jakiś etap, zadanie, albo gdy napotykasz problem. Dobrze jest ochłonąć.

  3. Lista zadań. Aby wyeliminować uczucie bezradności - siadasz do komputera i totalnie nie wiesz za co się zabrać, kombinujesz, próbujesz coś zacząć, ale nie wychodzi, nie wiesz co robić... Lista zadań jest konieczna. Najlepiej jedno, większe, zadanie rozbić na kilka, kilkanaście małych etapów - będziesz widział postępy pracy, a przede wszystkim dokładnie wiedział co robić. Lista może być w dokumencie tekstowym, albo wykorzystaj oprogramowanie typu Task Manager.

  4. Nie myśl ile jeszcze zadań Ci zostało, nie myśl o tym, że nie zdążysz, zapomnij o marudnym kliencie, jeśli musisz to wyłącz telefony, komunikatory - skup się na tym co robisz, tylko na tej jednej, jedynej rzeczy!

20120724

Dostosowanie okna video z Youtube, na naszej stronie

Cały świat wrócił do 'ramek wbudowanych', czyli iframe. Nawet tacy giganci jak facebook, Youtube. Dlaczego nie? Wideo z Youtube o wiele łatwiej umieścić przez ramkę.

Jak umieścić wideo z youtube na stronie, wiedzą chyba nawet Ci mniej zaawansowani, do których kieruję ten post. Nie każdy jednak wie, jak wiele parametrów możemy ustawić.

Próbując udostępnić poprzez umieszczenie, korzystając z mini kreatora firmowego, możemy ustalić tylko szerokość ramki, czy po zakończeniu mają się pokazywać inne filmowe propozycje, czy użyć https.

Zaobserwuj jak zmienia się ten zaznaczony kod w ramce, podczas zmiany poszczególnych opcji.


Wideo z youtuba to nic innego niż ramka iframe z odpowiednio spreparowanym kodem.

http://www.youtube.com/embed/8SbUC-UaAxE - to przykładowy adres filmu. Uruchom go sobie bezpośrednio w przeglądarce. Zobaczysz okno youtube w rozmiarze 100% X 100%, przez co potem obraz automatycznie dopasuje się do Twojej ramki.

Zaznaczony wyżej na czerwono kod, to ID filmu. Każdy film na YT ma oczywiście swoje unikalne ID i jest ono widoczne zawsze w adresie strony, w różnej postaci. Łatwo można go jednak wyciągnąć, chociażby ręcznie.

W embedowej wersji, ID umieszczamy zaraz po http://www.youtube.com/embed/..

Przykładowa ramka może zatem wyglądać tak:

<iframe allowfullscreen="" frameborder="0" height="360" src="http://www.youtube.com/embed/8SbUC-UaAxE?rel=0" width="480"></iframe>

Co da nam taki efekt:



Jak można zauważyć, na końcu linka, czyli wartości atrubutu SRC: http://www.youtube.com/embed/8SbUC-UaAxE?rel=0
Dodano parametr GET rel=0, który oznacza, że po zakończeniu filmu, nie będą wyświetlane inne propozycje do obejrzenia.

Dodając kolejne, specjalne zmienne możemy modyfikować nieco zawartość naszej ramki.

Kilka z nich warto używać, chociażby aby dostosować wyświetlane wideo do naszej strony i potrzeb.

autohide
autoplay
color
playlist
rel
showinfo
start
theme


Autohide, czyli ukrywanie nawigacje youtube. Przyjmuje vartości
0
1
2
Kiedy ustawimy 0, pasek nawigacyjny będzie cały czas widoczny, gdy 1, pasek zniknie chwilę po Twojej aktywności. Wartość 2 jest domyślna, i pasek nawigacji ukrywa się po rozpoczęciu odtwarzania wideo.

Parametr dodany do adresu będzie miał postać np:
autohide=0

Autoplay, przydatna funkcja, jak sama nazwa wskazuje umożliwia nam włączenie lub wyłączenie auto odtwarzania. Przypisując wartość 1, filmy będą automatycznie się odtwarzały po załadowaniu strony

Ciekawy jest również parametr color, który przyjmuje wartości red oraz white i określa pasek postępu odtwarzanego filmu

Wygląd modyfikuje nam również parametr theme. Określa on kolor dolnego paska nawigacji. Domyślnie jest on ciemny/szary a my możemy go zmodyfikować na jasny, przypisując wartość light. Analogicznie, domyślnie ciemny motyw to dark

Czyli do linku dodajemy:
theme=light
lub
theme=dark

Sprytny parametr start pozwala nam odtworzyć wideo w dowolnej sekundzie jego trwania, czyli:
strart=45 zacznie nam odtwarzać film od 45 sekundy, a start=85 zacznie odtwarzanie od minuty i 25 sekund

W odtwarzaczy możemy również ukryć, domyślnie widoczne na górze okna, informacje o wideo. Służy do tego zmienna showinfo. Wystarczy zatem mały zabieg:
showinfo=0

I na koniec jeszcze jeden, dający spore możliwości parametr: playlist. Wiedząc już co to są ID wideo na youtube :) i potrafiąc je wyodrębnić, możemy stworzyć sobie na stronie playlistę wideo i zdefiniować, jakie filmy po kolei chcemy odtwarzać. Po parametrze playlist= wymieniamy kolejno, po przecinku ID następnych wideo

Moje wideo może teraz wyglądać tak:




Albo tak:



Wklejając taki kod:
<iframe allowfullscreen="" frameborder="0" height="390px" src="http://www.youtube.com/embed/8SbUC-UaAxE?rel=0&theme=light&color=white&showinfo=0&controls=0" width="100%"></iframe>

A jeśli nudzi Cię czekanie na ładujące się wideo, kliknij na okno filmu, potem strzałką w prawo i do góry. Snake tak Cię wciągnie, że zapomnisz o filmie :)

20120525

Walidacja JS numerów rejestracyjnych w UK

Dziś nieco programistycznie. Prosta funkcja zwracająca true lub false. Pozwala walidować numery rejestracyjne pojazdów w Wielkiej Brytania 

Przyjmowane formaty:

Lt- litera
Lb- liczba

LtLtLbLb LtLt        np: aa99 aa
LtLtLbLbLtLt        np: aa99aa

LtLbLbLb LtLtLt        np: a999 aaa
LtLbLbLbLtLtLt        np: a999aaa


function vrn(string) {
    var string = string;
    if(!string.match(/^[a-z]{2}[0-9]{2}[ ][a-z]{2}$/) &
        !string.match(/^[a-z]{2}[0-9]{2}[a-z]{2}$/) &
        !string.match(/^[a-z]{1}[0-9]{3}[ ][a-z]{3}$/) &
        !string.match(/^[a-z]{1}[0-9]{3}[a-z]{3}$/)
        )
        return false
            else return true;
}