Prestupna godina

januar 31st, 2015 No comments

Evo primera kako da u Javascript-u na jednostavan nacin u proverite da li je godina prestupna ili ne:

var isLeap = (((cYear%4)==0) || (((cYear%100)!=0) && ((cYear%400)==0)));

gde je cYear promenljiva u kojoj je smestena godina.

Categories: JavaScript Tags:

ExtJS4 – aktiviranje funkcije klikom na ikonicu/tekst u Grid objektu

decembar 1st, 2014 No comments

Postoji više načina kako možete da pokrenete akciju klikom na ikonicu ili tekst koji je prikazan u ćeliji Grid objekta:

  • Korišćenjem atributa renderer prilikom definisanja kolone Grid objekta
  • Korišćenjem tipa actioncolumn koji omogućava mnogo fleksibilniji način poziva funkcije
  • Korišćenjem događaja cellclick koji reaguje na celu ćeliju bez obzira da li ste kliknuli na tekst u okviru nje (prethodne dve se ponašaju kao link)

Krošćenjem atributa renderer

Ovo je najjednostavniji način za aktiviranje akcije. U okviru definisanja atributa kolone dodajemo atribut renderer. Ovaj atribut poziva funkciju kojoj se prosleđuje vrednost te ćelije (parametar v), HTML tag u okviru koga se on nalazi na stranici (parametar md), objekat koji obuhvata podatke celog reda (parametar r).

Ovaj atribut se koristi kako bi promenili izgled vrednosti koja se prikazuje u ćeliji. Ukoliko bi u okviru funkcije napisali „return v;“, efekat je isti kao da nismo naveli ovaj atribut. Praktičan je ukoliko npr. imate potrebu da u zavisnosti od vrednosti postavite ikonicu koj definiše status. U našem primeru se koristi kako bi kreirali link. Klik na link poziva funkciju show_comments_of_user().

Mana ovog načina je što nije moguće proslediti promenljivu već samo konkretne vrednosti. Navedeni primer za razliku od druga dva nema promenljivu „r“ koja predstavlja objekat sa podacima cele linije.

Zaključak, ovaj način koristite kada želite da prikažete neku vrednosti, ili da pozovete funkciju kojoj prosleđujete konkretne vrednosti.

columns : [
    ...
    {
        dataIndex:'comment',
        cls:'colComments',
        header:'User comments',
        tooltip:'User comments',
        width:24,
        menuDisabled:true,
        renderer:function(v, md, r) 
        {
            return '<a href="javascript:void(0)" '+
                      'onclick="show_comments_for_user(\'comment_view\');">'+
                   'View<\/a>'; 
        }
    }
    ...
]

Korišćenjem tipa actioncolumn

Ovaj pristup, kao i naredni, je mnogo fleksibilniji kada je u pitanju prosleđivanje podataka funkciji. Umesto atributa „renderer“ u koloni se postavlja atribut „xtype“ kome se dodeli vrednost „actiontype“. Ovaj tip omogucava da se u ćeliji Grid objekta pojavi jedna ili više ikonica kojima će se dodeliti neka akcija kada se klikne na njih. Svaka od ikonica je objekat koji ima veliki broj svojih atributa. Za opis svih mogućnosti je najbolje da pogledate zvaničnu dokumenaciju.

Za nas je interesantan atribut „handler“, koji predstavlja funkciju koja će se izvršiti kada se klikne na ikonicu. Ova funkcija sadrži tri promenljive: Grid objekat, indeks reda u kome je ikonica na koju ste kliknuli, i indeks kolone u kojoj je ikonica na koju ste kliknuli. Prve dve promenljive koristimo kako bi dobili slog sa svim podacima u dato redu (linija 17). Na taj način smo dobili treću promenljivu funkcije iz prethodnog primera. Potom ostaje da se pozove odgovarajuća funkcija i da joj se proslede podaci (linija 18).

columns : [
    ...
    {
        dataIndex:'comment',
        cls:'colComments',
        header:'User comments',
        tooltip:'User comments',
        width:24,
        menuDisabled:true,
        xtype:'actioncolumn',
        items:[ 
            {
                iconCls:'icon-comments',
                tooltip:'View user comments',
                handler:function(grid, rIdx, cIdx) 
                {
                    var r = grid.getStore().getAt(rIdx);
                    show_comments_for_user(r, 'comment_view');
                    return false; 
                } 
            } 
        ]
    }
    ...
]

Korišćenjem događaja cellclick

Za razliku od prethodnog primera u kome je moguće više ikonica postaviti u okviru iste kolone, ovde je moguće postaviti samo jednu ikonicu po koloni. Razlog je taj, što se prati klik na ćeliju u Grid objektu a ne na samu ikonicu. Ovaj primer ima najjednostavniji način definisanja kolona Gid objekta. Jedino o čemu je potrebno da vodite računa je da atribut „dataIndex“ bude jedinstven za svaku kolonu a evo i razloga.

Klik na bilo koju od ćelija grid objekta aktivira događaj „cellclick„. Tom prilikom se prosleđuju više parametara, a nama je najinteresantniji parametar „cellIndex“ jer definiše broj kolone na koju je korisnik kliknuo mišem. Brojevi počinju od 0. Ovaj parametar bi trebalo da bude dovoljan da odredite da li je u pitanju ćelija sa odgovarajućom kolonom, ali to je samo napola tačno. Naime, vaša ćelija u grid objektu zauzima npr. četvrtu poziciju, ali ukoliko neka od prethodnih kolina nije vidljiva, vrši se i smanjivanje indeksa. Dakle, „cellIndex“ predstavlja redni broj vidljivih kolona u Grid objektu. Tu do izražaja dolazi jedinstvena vrednost dataIndex atributa. U linijama 16-21 je prikazano kako da od cellIndex dobijete vrednost za dataIndex. Na ovaj način bez obzira koja po redu je ćelija na koju ste kliknuli, ivek ćete imati ispravnu vrednost. Ostaje da se kroz par uslova proveri da li je u pitanju ćelija koja vama odgovara i da se aktivira funkcija. U navedenom primeru za to je korišćen switch() iskaz.

columns : [
    ...
    {
        dataIndex:'comment',
        cls:'colComments',
        header:'User comments',
        tooltip:'User comments',
        width:24,
        menuDisabled:true,
    }
    ...
]
listeners : {
    cellclick : function(ths, td, cellIndex, r, tr, rowIndex, e, eO)
    {
        var dataIdx = ths.up('grid')
                        .getView()
                        .panel
                        .headerCt
                        .getHeaderAtIndex(cellIndex)
                        .dataIndex;
        switch (dataIdx) {
            case 'comment' : 
                show_comments_for_user(r, 'comment_view'); 
                break;
            default :
                show_user(r, 'view');
                break;
        }
    }
}
Categories: Web Tags:

Kodiranje teksta u samo brojeve i slova

novembar 27th, 2014 No comments

Ukoliko vam je potrebno da kodirate tekst sa svim problematičnim znakovima u URL prikladan tekst, urlencode() nije pravo rešenje.

Ono što vam je potrebno je funkcija koja če vam dati samo brojeve i slova. Bez procenata, razmaka, ili drugih nealfanumeričkih znakova.

Za ovo ćemo koristiti PHP funkcije bin2hex() i pack().

Npr. one mogu konvertovati „(!X>4Ob=h/&hN\'“ u „2821583e344f623d682f26684e5c27“.

Evo funkcija koje su vam potrebne:

function hex_encode($string)
{
    return bin2hex($string);
}

function hex_decode($string)
{
    return pack("H*", $string);
}
Categories: PHP Tags:

Dodavanje QTip-a na GridPanel ćeliju u ExtJS 4.0

novembar 8th, 2014 No comments

Potrebno je da dodate tooltip (quick tip) na ćeliju Grid objekta u ExtJS 4.0? Prilikom definisanja kolone, potrebno je da dodate atribut „rendered“, kome prosledite funkciju.

...
columns [
    ...
    {
      text:"Bookmark", 
      dataIndex:"title", 
      flex:1, 
      renderer:function(value,metaData) 
      {
        metaData.tdAttr = 'data-qtip="' + value + '"';
        return value;
      }
    },
    ...
}
...

Par napomena:

  1. Da bi prikazali tooltip, potrebno je da dodate liniju „Ext.QuickTips.init();“ pre definicanja Grid objekta kojom inicijalizujete prikazivanje tooltip-ova
  2. data-qtip je jedan od četiri atributa za tooltip. Tooltip atributi su:
    • data-qtip – tekst tooltip-a
    • data-qtitle – naslov tooltip-a
    • data-qwidth – širina tolltip-a
    • data-qalign – Definiše poziciju tooltipa u odnosu na original. Primer: „tl-br“ definiše da se gornji-levi ugao tooltip-a prikazuje dole-desno u odnosu na original

Sa malo modififikacije, dobićete fin tooltip izgenerisan za svaku ćeliju u Grid objektu.

Categories: JavaScript Tags: , ,

Extjs4 stablo (de)selektovanje svih tačaka

oktobar 20th, 2014 No comments

Ukoliko koristite Extjs treePanel sa checkbox kako bi selektovali elemente, evo rešenja kako da selektujete/deselektujete sve elemente u stablu.

Primer za selektovanje:

Ext.getCmp('tree-list').getRootNode().cascade(function(n) 
{
    n.set("checked",true); 
});

Primer za deselektovanje:

Ext.getCmp('tree-list').getRootNode().cascade(function(n) 
{
    n.set("checked",false); 
});
Categories: JavaScript Tags: ,

Extjs promena pozadinske boje ćelije grid objekta u zavisnosti od vrednosti

oktobar 20th, 2014 No comments

Ukoliko je potrebno promeniti boju jedne ćelije Grid objekta, koristite renderer atribut.
Primer: Pretpostavimo da imamo ćeliju koja ima brojčanu vrednost. Ukoliko je ta vrednost veća od 0 onda je pozadinska boja zelena, u suprotnom je crvene boje.
Evo dela koda koji to opisuje

renderer : function(v, md) 
{
    if(parseInt(v) > 0)
        md.style = "background-color:green;";
    else
        md.style = "background-color:red;";
}

Extjs 4 textfield koje odobrava samo brojeve

februar 17th, 2014 No comments

ExtJS 4 sadrži polje „numberfield“ koje se koristi za unos brojeva. Ukoliko ej broj cifara prevelik, ovo polje može praviti problema. U tim situacijama, može pomoći tekstualno polje („textfield“) kome treba postaviti filter za unos samo cifara.

Prilikom podešavanja osobina tekstualnog polja dodajte atribut „maskRe“. On vam omogućava da kreirate masku uz pomoć regularnog izraza. Evo maske koja dozvoljava unos samo cifara (i decimalne tačke):

    maskRe:/[0-9.]/
Categories: JavaScript Tags: ,

Zamena teksta u MySQL

decembar 4th, 2013 No comments

Promena dela teksta u okviru MySQL baze podataka, odnosno nekog njenog polja se može jednostavno izvršiti komandom REPLACE().

Primer: promeniti HTML boldiran tekst u polju ‘description’ koji koristi B tag sa STRONG

UPDATE texts SET description = REPLACE(description, ‘B>’, ‘STRONG>’);

.htaccess redirekcija domain.com na www.domain.com

oktobar 28th, 2013 No comments

U .htaccess dokumentu ubacite sledeće dve linije:

rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]

Umesto „domain.com“ postavite vaš domen.

Categories: Web Tags: ,

CodeIgniter: recaptcha.php dokument nema odgovarajući konfiguracioni niz

oktobar 28th, 2013 No comments

Za one koji su naišli na ovaj problem, proverite podešavanje za PHP marker (<? and <?=).
Ukoliko nisu aktivirani, ova greška će se pojaviti jer se oni pominju u reCAPTCHA skriptama.

Izmenite „<?“ u „<?php“ i „<?=“ u „<?php echo“ i sve će biti uredu.
Druga opcija je da u konfiguracionim PHP fajlu dozvolite korišćenje kraćih markera.

Categories: PHP Tags: ,