Постове 11 - 12 от 12 с таг tips

Jan 24

Наскоро ми се наложи да работя по един стар проект на Pixeldepo, по който нямах участие до сега. Промените бяха главно козметични, така че реално аз нямах много работа там. Така че реших да разчистя малко javascript-а в сайта, който въпреки, че работеше без проблемибеше доста стар.

Така едно парче код ми се стори доста интересно (кода използва prototype.js и script.aculo.us):

$('.leftmenu li.header a').each(function(dropa){
	dropa.observe('click', function(){
		var title = dropa.className;
		var theul = $(title);
		if (theul) {
			if (theul.style.display == "none") {
				Effect.BlindDown(theul, {
					duration: 1.0
				});
				var theli = dropa.up(0);
				new Effect.Morph(theli,{
					style: 'padding-bottom: 20px;',
					duration: 1.0
				});
			}
			else {
				Effect.BlindUp(theul, {
					duration: 1.0,
					queue: 'end'
				});
				var theli = dropa.up(0);
					new Effect.Morph(theli,{
						style: 'padding-bottom: 20px;',
						duration: 0.1
				});
			}
		} else {
		}
	});
});

прочети още »

Jan 06

Работя с PHP от около 7 години вече, смея да кажа че го познавам изключително добре но това не ми пречи да се изненадвам понякога от него. Доста често приятно,  или поне като е неприятно гледам да го запомня зада не се повтаря.

По принцип, страшно много си играя с array и със type-cast (особено с type-cast към масив)  и предаването на различни аргументи из функции и методи.  И за това от време на време си патя.

Имах един метод за работа с файлове, който приема масив с възможните файлови разширения + image опция в стандартния случай изглежда така:

array('doc', 'audio', 'flash');
array('doc', 'image' => '20x30'),
array('image' => array('20x30', '190x', '1234x234'));

Част от кода на метода е

class Upload {
	// ... methods ...
	public static function file($file, $directory, $types=false, $fname=false) {
		if (!is_array($file) || !empty($file['error']) || strlen($file['name']) == 0){
			return false;
		}

		if ($types) {
			if (isset($types['image'])){
			// вече този if e така, но за това по-нататък:
			// if (is_array($types) && isset($types['image'])){
				if (self::is($file['name'], 'image')){
					return self::image($file, $directory, array_cut($types, 'image'));
				}
			}

			if (!self::is($file['name'], $types)){
				return false;
			}
		}
		// continue ...
	}
	// ... methods ...
}

Та проблема настъпи когато пробвах това

Upload::file($_FILES['pic'], IMAGES_DIR, 'image');

Целта ми тука е да само да уплоадна една картинка, без никакви магии и т.н. които са в Upload::image, само че се викаше Upload::image.  И защо ли ?

if (isset($types['image'])){

Оказва се че когато подам ‘image’ е true, което е доста странно, но се оправи лесно само със една проверка дали $types е масив. Проблема решен, но защо се появи на първо място ?!

В началото си помислих че isset($type['image']) проверява същност дали стринга е ‘image’,  но после се сетих защо става така. В PHP могат да се извлече даден синвол чрез неговия индекс, все едно е масив, например:

$string = 'radoslav';
echo $string[0]; // r
echo $string[7]; // v
echo isset($string[0]); //  true e
echo isset($string[100]); // false е

И се оказва че когато съм предавал ‘image’ то си го е каствало към int, т.е. става 0, а първия символ е съществувал и за това винаги е било true. Доста интересен урок :)

п.п. Достъпа до даден символ е доста бърз чрез $string[$index], и в някои случаи е изключително удобен.