poniedziałek, 31 marca 2014

Losowanie elementów z tablicy | JAVASCRIPT

Java Script podbija internet a biblioteki lotne (np. JQuery czy Prototype) dają niesamowite możliwości. Co jeśli zajdzie potrzeba wykonania losowych elementów na stronie z pewnego zbioru a możliwości techniczne wskazują na Java Script ? Najlepiej elemnty ułożyć w tablicy i za pomocą funkcji wylosować określoną ilość elementów.

Tworzymy tablicę JS

Chcemy otrzymać efekt losowości np. filmików - zwiastunów na stronie. Najpierw wrzućmy nasze zasoby do tablic. Aby utworzyć tablicę możemy posłużyć się przykładowo następującym kodem:
  var table_trailer = new Array(
  'film1',
  'film2',
  'film3',
  'film4',
  'film5',
  'film6'
  );

Funkcja losująca

Następnie stwórzmy sobie funkcję, która będzie zwracać losowe elementy (w parametrach tej funkcji będziemy przesyłać naszą tablicę i liczbę elementów losowych, które chcemy uzyskać):
function array_rand(input, num_req) {
  //  discuss at: http://phpjs.org/functions/array_rand/
  // original by: Waldo Malqui Silva
  //   example 1: array_rand( ['Kevin'], 1 );
  //   returns 1: 0

  var indexes = [];
  var ticks = num_req || 1;
  var checkDuplicate = function(input, value) {
    var exist = false,
      index = 0,
      il = input.length;
    while (index < il) {
      if (input[index] === value) {
        exist = true;
        break;
      }
      index++;
    }
    return exist;
  };
Funkcja zwróci nam indeksy losowe z naszej tablicy, my sobie zapiszemy to w następujący sposób:
table_trailer2 = array_rand(table_trailer,3);

 var index1 = table_trailer2[0];
 var zwiastun1 = table_trailer[index1];
 //alert(zwiastun1);

 var index2 = table_trailer2[1];
 var zwiastun2 = table_trailer[index2];
 //alert(zwiastun2);

 var index3 = table_trailer2[2];
 var zwiastun3 = table_trailer[index3];
Mamy wylosowane indeksy, w naszym przykładzie w drugim parametrze funkcji array_rand daliśmy "3" gdyż chcemy 3 losowe elementy ,mamy również tablicę w całości, nie pozostaje nic innego jak wypisanie losowych elementów na stronie. Z racji, że na co dzień korzystam z JQuery wykonam powyższe zadanie za pomocą funkcji html:
 $('.trailer1').html(zwiastun1);
 $('.trailer2').html(zwiastun2);
 $('.trailer3').html(zwiastun3);

Całość dla szybkich koderów

Dla leniwych, którzy nie mają czasu na rozkminkę i poznawanie mechanizmu losowania wklejam poniższy kod w całości. (Uwaga potrzebna jest załączona biblioteka Jquery)
function array_rand(input, num_req) {
  //  discuss at: http://phpjs.org/functions/array_rand/
  // original by: Waldo Malqui Silva
  //   example 1: array_rand( ['Kevin'], 1 );
  //   returns 1: 0

  var indexes = [];
  var ticks = num_req || 1;
  var checkDuplicate = function(input, value) {
    var exist = false,
      index = 0,
      il = input.length;
    while (index < il) {
      if (input[index] === value) {
        exist = true;
        break;
      }
      index++;
    }
    return exist;
  };

  if (Object.prototype.toString.call(input) === '[object Array]' && ticks <= input.length) {
    while (true) {
      var rand = Math.floor((Math.random() * input.length));
      if (indexes.length === ticks) {
        break;
      }
      if (!checkDuplicate(indexes, rand)) {
        indexes.push(rand);
      }
    }
  } else {
    indexes = null;
  }

  return ((ticks == 1) ? indexes.join() : indexes);
}



$(document).ready(function() {
  var table_trailer = new Array(
  'film1',
  'film2',
  'film3',
  'film4',
  'film5',
  'film6'
  );



 table_trailer2 = array_rand(table_trailer,3);

 var index1 = table_trailer2[0];
 var zwiastun1 = table_trailer[index1];
 //alert(zwiastun1);

 var index2 = table_trailer2[1];
 var zwiastun2 = table_trailer[index2];
 //alert(zwiastun2);

 var index3 = table_trailer2[2];
 var zwiastun3 = table_trailer[index3];
 //alert(zwiastun3);

 $('.trailer1').html(zwiastun1);
 //$('.trailer1').appendTo(zwiastun1);
 //$('.trailer2').appendTo(zwiastun2);
 $('.trailer2').html(zwiastun2);
 //$('.trailer3').appendTo(zwiastun3);
 $('.trailer3').html(zwiastun3);


});

środa, 26 marca 2014

OPERATOR LOGICZNY OR, znak != , nawiasy | Podstawy Sqla - cz.2

Słówko AND daje wiele możliwości. W operatorach logicznych należy wyróżnić operator OR (lub), który daje dodatkowe możliwości.

Operator logiczny OR

Najlepszym przekonaniem się o sile OR jest wykonanie testu zapytaniowego. Chcemy wyselekcjonować wszystkich panów, którzy mają na nazwisko albo Kowalski albo Nowak albo dajmy na to nazwisko naszego rajdowca Kubica. Jak to zrobić?, ano można tak:

SELECT * FROM Klienci WHERE nazwisko = 'Kowalski' OR nazwisko = 'Nowak' OR nazwisko = 'Kubica'

W wyniku otrzymamy nazwiska pasujące do 'Kowalski' lub pasujących do 'Nowak' lub pasujących do 'Kubica'. Na podstawie naszej tabelki otrzymujemy dwóch Kowalskiego i Nowaka, a Kubicy, którego nie ma w bazie, nie ma i w naszych wynikach.

Znak porównania !=

Ten operator logiczny pozwoli nam na wykluczanie nie chcianych rekordów np. wypisz wszystkich panów za wyjątkiem panów, którzy mają na imie Piotr. Zapytanie będzie wyglądać następująco:

SELECT * FROM Klienci WHERE imie != 'Piotr'

W klauzuli WHERE wykluczamy wszystkich Piotrów.

Nawiasy okrągłe ( )

Nawiasy jak to jest i w matematyce pozwalają na sterowanie ważności wykonywania warunków jak również pozwalają na łączenie różnych warunków w jedną całość. Można sobie wymyślać, że chcemy wszystkich Kowalskich lub wszystkich, którzy mają na imię Jan a nazwisko Nowak. Za pomocą nawiasów możemy wykonać taką akcję sqlową:

SELECT * FROM Klienci WHERE nazwisko = 'Kowalski' OR (imie = 'Jan' AND nazwisko = 'Nowak')

niedziela, 23 marca 2014

Zapytanie WHERE, kombinacje | Podstawy Sqla - cz.3

W poprzedniej części nauczyliśmy się wyszukiwać Brzęczyszczykiewicza z bazy poznając przy okazji słówko kluczowe WHERE. Możliwości tej klauzuli nie kończą się na porównywaniu określonych ciągów tekstowych (stringów) czy liczbowych, a dają cały asortyment by nasze zapytanie stało się takim jakim chcemy.

LIKE

Wyobraźmy sobie sytuację, gdzie w bazie mamy trzech panów: pan Robert Adamski, pan Bartłomiej Adamczyk, pan Adam Małysz. Naszym pierwszym celem są panowie, którzy mają w nazwisku ciąg "Adam", czyli chcielibyśmy w wynikach zobaczyć Adamskiego oraz Adamczyka. Małysz oczywiście nie powinien się dokoptować do wyników z racji iż jego nazwisko nie pasuje do naszego wzorca. Z pomocą przychodzi klauzula LIKE, którą używamy przy okazji WHERE. Oznacza porównywanie tekstu, ale nie identyczność od początku do końca. Przykład rozjaśni tą sprawę:

Select * FROM Klienci WHERE nazwisko LIKE 'Adam%'

,widzimy słówko kluczowe LIKE a następnie 'Adam%' co oznacza znajdź wszystkich o nazwisku Adam ... a znak procentu % mówi, że dalej może się dziać co chce czyli daje możliwość wyszukania Adamskiego czy Adamczyka.

OPERATOR LOGICZNY AND

Aby Adam M. nie poczuł się urażony stworzymy zapytanie, które pomoże mu znaleźć się w wynikach. Wykorzystamy do tego operator logiczny AND a przy okazji zobaczymy kombinację poszerzającą nasze horyzonty. Czyli zróbmy sobie powyższe kryteria oraz dodajmy panów, którzy mają na imię tylko i wyłącznie Adam. Można to ująć w ten sposób:

Select * FROM Klienci WHERE nazwisko LIKE 'Adam%' AND imie = 'Adam'

Dodaliśmy "AND imie = 'Adam'" co tłumaczyć nie trzeba a co daje panu Adamowi miejsce w naszej liście klientów.

piątek, 21 marca 2014

Zapytanie SELECT, klauzula WHERE | Podstawy Sqla - cz.1

Język SQL pozwala na przetwarzanie danych zapisanych w bazie danych. W moim poradniku przedstawiam wersje MySQL z racji, że korzystam z niej na codzień i nawet odczuwam odwzajemnioną sympatię. Najprostszą operacja w SQL jest wyszukanie informacji. Używamy do tego zapytania SELECT, które pobiera określone dane z określonych tabel w bazie.

Dla przykładu przyjmijmy, że mamy takową tabelę:

Tabelka ta nosi nazwę Klienci, zawiera 3 kolumny:

id (int11) - kolumna z id,
imie (varchar 350) - kolumna w której przechowujemy imie,
nazwisko (varchar 350) - kolumna z nazwiskiem.

Na powyższym screenie widzimy 3 zapisane rekordy pana Kowalskiego Jana , Piotra Nowaka oraz Grzegorza Brzęczyszczykiewicza. Powiedzmy że chcemy uzyskać wszystkie rekordy znajdujące się w tabeli Klienci czyli mieć w wynikach wszystkich trzech panów. Na myśl wszystko nasuwa się i prawidłowo gwiazdka * czyli w zapytaniu mamy:

SELECT  *  FROM Klienci

co można przetłumaczyć - pokaż wszystkich z tabeli Klienci. Uzyskamy wszystkie dane delikwentów łącznie z przyporządkowanym numerkiem id. No dobra, ale na cóż nam wszyscy jak szukamy Grzegorza B. W SQL jest to możliwe i nawet przyjemne w wykonaniu np:

SELECT * FROM Klienci WHERE imie = "Grzegorz" AND nazwisko = "Brzęczyszczykiewicz"

Angielskojęzyczni nie będą mieli problemów w rozgryzieniu powyższego zapytania, jednak szacunek dla użytkowników różego rodzaju ;) nakazuje mi wytłumaczenie słówka WHERE. Zapytanie możemy przetłumaczyć : pokaż wszystkich użytkowników z tabeli Klienci GDZIE (po polsku KTÓRZY) ci klienci mają na imie Grzegorz i zarazem na nazwisko Brzęczyszczykiewicz. W wyniku otrzymamy jednego pana, gdyż tylko jeden pasujący znajduje się w bazie.

środa, 19 marca 2014

Stylowanie css pod przeglądarkę Internet Explorer cz.2

Internet Explorer

W poprzedniej części przekazałem informacje na temat tricków / hacków pod Internet Explorer, które w szybki sposób mogą pomóc w problemie błędnego wyświetlania elementów na stronie. Jest to podejście doraźne, raczej nie polecane. Znacznie lepszym rozwiązaniem jest tworzenie wspólnego kodu html/css dla wszystkich przeglądarek.

Gdy jesteśmy w trakcie tworzenia strony internetowej możemy odrazu zwracać uwagę na efekty naszej pracy w wszystkich przeglądarkach lub trzymać się pewnych określonych schematów w szablonach css.

Najnowsze wersje Internet Explorer (IE 11), są już na tyle dopracowane, że możemy przyjąć poprawność i zbieżność interpretacji kodu  html i css w przeglądarkach Firefoxa, chroma i explorera. Jednakże istnieje  duże grono użytkowników korzystających z starszych wersji przeglądarek w tym IE8i z tego względu należy wsiąść pod uwagę tą odsłonę IE.

Dziś skupie się na elementach blokowych na stronie i ich pozycjonowaniu w kaskadowym arkuszu styli.

1. Znaczenie ważności elementów blokowych względem siebie.

Jeżeli używamy akapitów nie zagnieżdżajmy akapit w akapicie czyli przykładowy kod:

<p class="first_p">
<p class="content_1">
Akapit kontener nr 1. Lorem Ipsum ...
</p>
</p>

jest nieprawidłowy pod względem semantycznym. Zauważyłem, że IE nie lubi takich struktur i błędnie (albo i bezbłędnie wytyka nam błędy) je interpretuje. Poprawnie było by opakowanie naszego akapitu divem, który znaczeniowo jest ważniejszy. Czyli można byłoby powyższy kod przedstawić następująco:

 <div class="first_container">
<p class="content_1">
Akapit kontener nr 1. Lorem Ipsum ...
</p>
</div>


2. Trzymanie się konwencji.

Kolejną poradą jest trzymanie się pewnego schematu przy tworzeniu i pozycjonowaniu elementów blokowych na stronie. Pamiętajmy o możliwości opakowywania poszczególnych elementów, nadawania im określonych rozmiarów (własność width i height) oraz możliwością sterowania pozycją poprzez padding i margin. Opakowania znacznie uproszczają kontrolę nad poszczególnymi elementami HTML oraz wzajemną interakcje pomiędzy nimi. Czyli można przyjąć następujący schemat "podstawowy" przy tworzeniu nowego bloka np:

Dla kodu HTML:


<div id="header">
 <div class="logo">
 Nasze logo
 </div>
</div> 

Kod CSS:

#header{ margin:0; padding:0; }
.logo{ margin:0; padding:0; }

sobota, 15 marca 2014

Wyszukiwanie z/bez polskich znaków pojedyńczego wyrazu | MySql

Na stronach www coraz częściej pojawiają się szukajki, które wyszukują słowo/ słowa kluczowe łącząc się z bazą i zadając odpowiednie zapytanie SQL. Czasem istnieje potrzeba zmodyfikowania zapytania pod określone założenia (np. wyszukiwanie z i bez polskich znaków pojedyńczego wyrazu ) i zapytanie typu:

SELECT name FROM articles as a WHERE a.`name` LIKE '%{$searchQuery}%'

nie spełnia naszych oczekiwań. Z pomocą przychodzą wyrażenia regularne, które możemy użyć w naszym zapytaniu sqlowym. Należy użyć słówko kluczowe REGEXP a następnie wstawić odpowiednie wyrażenie regularne. Przykładowo chcemy uzyskać w wynikach wszystkich autorów o nazwisku "LEM" (czyli wyrazy "Lemowski" czy "Kotlemowski" nie wchodzą wgrę). Korzystając z REGEXP zapytanie może wyglądać tak:

SELECT surname FROM authors as a WHERE a.`name` REGEXP '[[:<:]]{$searchQuery}[[:>:]]'

gdzie $searchQuery = "Lem". W wynikach otrzymamy wszystkich autorów o nazwisku Lem. W zapytaniu ciąg znaków [[:<:]] oznacza początek wyrazu, a ciąg [[:>:]] oznacza koniec wyrazu. Pomiędzy początkiem i końcem wyrazu widzimy zmienną, która jest stringiem, w naszym przypadku zawiera wyraz LEM.

Więcej o REGEXP znajdziesz tutaj.

czwartek, 13 marca 2014

Stylowanie css pod przeglądarkę Internet Explorer

Internet Explorer

Często zdarza się, że nasze style css są inaczej interpretowane przez przeglądarkę Internet Explorer niż chcielibyśmy. W poście tym opiszę sposoby radzenia sobie z takim problemem.

1. Załączenie zewnętrznych arkuszy stylów, które będą interpretowane tylko przez Internet Explorer.

W sekcji <head> ... </head> należy wstawić kod załączenia pliku css pod IE wraz z komentarzami np:

<!--[if IE]>
 <link rel="stylesheet" type="text/css" href="all-ie-only.css" />
<![endif]-->

Kod ten będzie działał dla wszystkich wersji Interner Explorer, natomiast inne przeglądarki nie będą brały go pod uwagę.

2. Zastosowanie tricków, hacków w css.

Tutaj nie tworzymy dodatkowych plików CSS, natomiast wykorzystujemy pewne właściwości przeglądarek.

Niektóre tricki działają tylko w poszczególnych wersjach internet explorer, a niektóre we wszystkich z wyłączeniem określonych wersji.

Widoczne tylko w IE-6

* html #div { margin: 20px; }

Widoczne tylko w IE-7

*+html #div { margin: 20px; }

Widoczne tylko w IE-8

#div { margin: 20px \0/; }

Widoczne tylko w IE-7 & IE-8

#div { margin: 20px\9; }

Niewidoczne w IE-7

#div { _margin: 20px; }

Niewidoczne w  IE 6 i wcześniejszych wersjach

#div { margin/**/: 20px; } html > body #div { margin: 20px; }

poniedziałek, 10 marca 2014

Debugowanie kodu w Internet Explorer

IE

Podczas tworzenia stron internetowych często przy finalizowaniu takowej strony napotykamy na zaskoczenie związane z Internetem Explorerem. Oczywiście, jeśli przy tworzeniu htmla i cssa jesteśmy niefrasobliwi i korzystamy z narzędzi (przeglądarek), które z naszego punktu widzenia są najlepsze.

Nieoczekiwanie (albo oczekiwanie;)) widzimy, że nasza strona nie jest naszą stroną w przeglądarce IE. Szybko sprawdzamy poprawność wpisanego adresu url i czujemy się nieswojo. Aby zapobiec szokowi związanemu z innym wyglądem naszej witryny należy tworzyć stronę z dodatkową myślą :

 "Jak to będzie wyglądać w Internet Explorer ?".

W Firefox czy w Chrome wiemy jak z debugować kod html/css/js, natomiast przy pierwszym starciu z IE zaczynamy nerwowo szukać edycji kodu. Aby móc edytować kod w IE należy zainstalować dodatek debugbar ze strony:

Po instalacji uzyskujemy opcje pozwalające na sprawdzeniu kodu i wprowadzenie poprawek na żywo.