Archive for ◊ September, 2010 ◊

Custom select box upgrade
Thursday, September 30th, 2010 | Author:

I’ve made a little improvement on my custom select box mootools class.

Custom selectbox now:

  1. applies the selected element as active and
  2. fires the change event of it’s select tag.

Use the selected property on the option tag:

<option value="40" selected="selected">fourty</option>

Define onchange event through property:

<select onchange="alert('Ninja!');">

Or add event change through mootools:

$('sel2').addEvent('change', function(){
	if(this.value == 70) alert('You hit 70!');
});

See demo here.

I’ve been exploring these days how to create a definition of some method outside of it’s class. Usually there is no need to do that, but I had to write a class which works as a calculator with different input fields. Each input field has it’s own custom formula and I really wanted to avoid the eval() function.

The idea is simple: to create a class with some extra empty function (method), which can be defined from the outside, more specificly through it’s object in it’s custom way.

class Test {
    initialize: function(){
        ...
        this.my_extra();
    },
    function_1: function(){...},
    function_2: function(){...},
    my_extra: function(){ return 0; }
}

var A1 = new Test();
A1.my_extra = function(a){
    return a * a;
}

I tested this functionality in many different ways and I must say it works fine in almost any way you want. Outside methods can use arguments, call other class’s methods, call $(el) objects, and so on… You don’t even have to define an empty method inside the class, but it is convenient because you don’t know if it will be defined by object or not.

The numberConverter class

And here is my calculator with three input fields: tax, price, full price. By changing any of those fields the other two fields must re-calculate. Each field has it’s own calculation formula, it’s own event and affects a different field.

HTML:

<div id="page">
        <select id="tax">
		<option value="0">0</option>
		<option value="20">20</option>
	</select>
	<input id="price" type="text" />
	<input id="full_price" type="text" />
</div>

JS:

var p = new numberConverter('price',{
	onEvent: 'keyup',
	affects: 'full_price'
});
p.formula = function(){
	return p.val() * (1 + p.val('tax') / 100);
}
 
var t = new numberConverter('tax',{
	onEvent: 'change',
	affects: 'full_price'
});
t.formula = function(){
	return t.val('price') * (1 + t.val() / 100);
}
 
var f = new numberConverter('full_price',{
	onEvent: 'keyup',
	affects: 'price'
});
f.formula = function(){
	return f.val('full_price') / (1 + f.val('tax') / 100);
}

You can see that every new object defines it’s own calculation formula, which uses the val method from class to adjust decimal points and decimal places.

The numberConverter demo is here.

Rating and voting with stars
Tuesday, September 21st, 2010 | Author:

I’ve created a mootools class for stars rating and voting. All you have to do:

  1. include mootools
  2. include starsrating.js
  3. create an empty div to place stars
  4. create two images star_on and star_off
  5. class creates everything else (shows rating, enables voting, voting process is ajax based)
  6. php processing is up to you (my demo doesn’t work for real)

HTML:

<div id="rating"></div>

JS:

window.addEvent('domready',function(){
  new starsRating('rating',{
    starOn: 'star_on.jpg',
    starOff: 'star_off.jpg',
    starWidth: 16,
    starHeight: 16,
    starCount: 5,
    rating: 2.33,
    voteUrl: 'vote.php',
    canVote: true
  });
 });

Check out the demo here.

Category: Web development  | Tags: , ,  | One Comment
Storing images from internet to mysql
Sunday, September 05th, 2010 | Author:

There is a lot of articles about storing images to mysql database, but they are mostly related to uploaded images. What about images that are available on the internet? I must say: very simple.

First you have to get the contents of image file:

$url = 'http://www.editor.si/template/images/logo.gif';
 
$image = file_get_contents($url);

That’s it. To store the $image to mysql database you should also put the addslashes() around it to avoid broken query.

You may also need to save the image’s size (length) and type to successfully retrieve it and show it from your database later.

Category: Web development  | Tags: ,  | One Comment