content top

CodeIgniter TV ajunge in beta

CodeIgniter TV ajunge in beta

In urma cu nu prea mult timp, va spuneam despre o initiativa care m-a bucurat foarte tare la vremea respectiva. CodeIgniter TV era la acel moment doar o idee buna.

O echipa de programatori s-a gandit sa puna la dispozitie o serie de tutoriale video despre CodeIgniter pentru incepatori si nu numai. Iata ca acum, acea idee buna s-a transformat in realitate.

CodeIgniter TV a ajuns in Public Beta si are deja 3 tutoriale publicate. Le gasiti in sectiunea Videos a site-ului. Si ca sa vedeti ca au planuri marete, deja in sectiunea video, troneaza un filtru care va va ajuta sa gasiti ce va intereseaza in multitudinea de tutoriale care vor “aglomera” site-ul in curand.

Si ca sa vedeti ca baietii chiar vor sa ajute comunitatea, site-ul beneficiaza si de o sectiune Requests, in care puteti sa cereti un tutorial despre un subiect anume (atat timp cat are legatura cu CodeIgniter, bineinteles). Eu am trimis un request inca din faza de pre-beta, dar nu va spun inca despre ce e vorba.

Poate apare in curand si va anunt intr-un articol.

Read More

CodeIgniter TV – o intiativa excelenta pentru incepatori si nu numai

CodeIgniter TV – o intiativa excelenta pentru incepatori si nu numai

Am aflat azi de pe Twitter ca se pregateste un proiect foarte util, sub numele de CodeIgniter TV.

Desi numele este cat se poate de sugestiv, am sa explic in cateva cuvinte ce inseamna acest lucru. Echipa din spatele proiectului isi propune sa prezinte tutoriale video de 10 pana la 15 minute care se concentreaza pe realizarea unui singur task.

Desi nu este o initiativa Ellis Lab, ma bucur ca exista un astfel de proiect in desfasurare, mai ales ca Adobe (de exemplu) a inteles de foarte mult timp utilitatea unui astfel de site (vezi tv.adobe.com).

Am descoperit din proprie exeperienta, ca vazand astfel de tutoriale video (chiar si pe teme pe care le cunosti), poti afla lucruri “colaterale” pe care nu le stiai. Si intr-un framework atat de versatil si dinamic, asa cum este CodeIgniter, sunt convins ca vor exista mereu lucruri de vazut.

Se pare ca in acest moment nu exista continut, dar daca mergeti la codeigniter.tv puteti sa le lasati datele de contact si ei promit ca va vor anunta cand sunt gata.

Eu le-am lasat deja si astept cu nerabdare aparitia primelor episoade.

Read More

Si castigatorul cartii de PHP este…

Si castigatorul cartii de PHP este…

Saptamana trecuta am lansat un concurs care avea drept premiu o carte de PHP pusa la dispozitie de libraria online libris.ro.

Am citit si recitit cele cateva comentarii + un trackback pentru ca, asa acum am anuntat inca de la inceput, nu am vrut sa ofer premiul prin tragere la sorti.

Bineinteles ca in felul acesta am reusit sa-mi fac mie viata grea, pentru ca a trebuit sa desemnez castigatorul. N-au fost foarte multi participanti, dar toti au oferit motive solide si bine argumentate pentru care isi doresc aceasta carte. Acest lucru ma bucura. Imi spune ca participantii nu sunt vanatori de concursuri, ci oameni care isi doresc aceasta carte pentru un motiv bine intemeiat.

Si pentru ca acest concurs a mers bine (si am avut participanti), tin sa anunt ca vor mai urma si altele. Voi da in continuare carti de PHP, JavaScript si poate si altele daca exista cerere.

Sa nu mai lungim vorba. Castigatorul cartii Initiere in PHP 5 de Steven Holzner este… Madalin Sandu.

N-am sa argumentez in foarte multe cuvinte alegerea facuta. Aceasta urma sa fie inca de la inceput una subiectiva. Felicitari, Madalin. Vei fi contactat pe adresa de email cu care ai comentat pentru stabilirea detaliilor “tehnice”.

Tin sa multumesc tuturor pentru participare si va asigur ca vor mai urma astfel de concursuri la care va astept cu mare drag.

Read More

Concurs – castiga o carte de PHP de la libris.ro

Concurs – castiga o carte de PHP de la libris.ro

Va spuneam in urma cu ceva vreme, ca am inceput o colaborare cu libris.ro. Eu sunt prins cu cartile pe care pe care deja le-am primit, asa ca m-am gandit ca ar fi momentul sa dau un cadou unuia dintre cititorii mei. Si pentru ca partenerul meu este o librarie online, ce altceva puteam sa pun la bataie, decat o carte.

In ultima vreme, am fost intrebat de mai multe persoane de unde ar putea sa inceapa sa invete PHP? Pentru cei ce nu ma stiu, eu sunt puternic infipt in era digitala. Daca-mi dai de ales intre a citi si a privi un tutorial video, aleg clar tutorialul video.

Cu toate astea, de cand am inceput sa citesc cartea de Algoritmi Fundamentali in Java, mi-am dat seama cat este de important sa ai in fata o pagina tiparita pe care sa poti sa studiezi o bucata de cod pana intelegi ce se intampla acolo. Da, poti sa dai pauza si la un tutorial video, dar nu faci asta; esti prins in ceea ce vezi acolo, vrei sa afli ce face mai departe.

Pe scurt, au si cartile rolul lor. De aceea pun la bataie cartea Initiere in PHP 5 scrisa de Steven Holzner. Astfel, cei care vor sa invete un limbaj de programare web, dar nu stiu de unde sa inceapa vor avea un punct de plecare foarte bun.

Mai mult, cartea nu se adreseaza numai neinitiatilor. Cei care lucreaza de putin timp cu PHP s-ar putea sa o gaseasca foarte utila.

Ce trebuie sa faceti pentru ca castiga? Lasati un comentariu (sau un link/trackback daca va simtiti inspirati) in care sa-mi spuneti de ce va doriti cartea.

Castigatorul nu va fi ales prin tragere la sorti, ci prin “jurizare” din partea mea, asa ca nu e suficient sa spuneti “vreau cartea”.

Nu trebuie sa fie neaparat o poveste care sa ma impresioneze pana la lacrimi. Vreau sa aflu ce va motiveaza sa invatati PHP.

Concursul incepe din momentul in care a fost publicat articolul si se va terminta Vineri 8 Iulie 2011. Imi rezerv dreptul de a anunta castigatorul intr-un articol publicat Luni, dupa finalizarea concursului. De asemenea, va rog sa folositi o adresa de email reala pentru comentariu, pentru ca aceea va fi modalitatea de contactare a castigatorului.

Spor la comentat si mult succes.

Read More

Intreaba-ma: Executarea de scripturi PHP asincron

Intreaba-ma: Executarea de scripturi PHP asincron

Am fost abordat de unul din cititorii mei cu urmatoarea situatie (am sa reproduc felul in care a pus el problema):

Avem de-a face cu o pagina simpla (un HTML, sa zicem) care contine un formular; o vom numi pagina A. Pagina A face submit catre un script PHP, pe care-l vom numi B si care dupa ce termina ce are de facut redirecteaza utilizatorul catre pagina C (un landing page).

Deci care e problema? Pai, problema e ca scriptul B ruleaza cam mult (trimite o serie de email-uri) si utilizatorul sta si asteapta ca browser-ul sa incarce “ceva”.

Gabriel a venit cu o solutie interesanta la aceasta problema. A cautat un preloader care sa ruleze in timp ce se incarca scriptul B. Nu-i rau, dar eu cred ca aici se preteaza bine un AJAX. In general pentru astfel de situatii executarea asincrona este cea mai buna solutie.

Vezi Demo

Avand in vedere noile informatii, abordarea va fi in felul urmator: Pagina A face un request AJAX catre scriptul B si asteapta un raspuns. Intre timp afisaza o imagine de loading… (sau orice altceva). Cand termina ce are de facut, scriptul B il anunta pe A ca este momentul sa faca un redirect; catre landing page-ul C.

Bun, acum ca am vauzut despre ce-i vorba, sa descuram putin itele problemei. Vom incepe prin a da nume descriptive fisierelor, ca sa nu ne mai incurcam in litere.

Fisierul care contine formularul se numeste index.php si contine urmatorul cod:

<!DOCTYPE html>
<html lang="en">

<head>
	<title>AJAX Submitter</title>
	<link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>

	<div id="wrapper">
		<form method="POST" action="submit.php">
			<p>
				<label for="name">Name</label>
				<input type="text" name="name" id="name" />
			</p>
			<p>
				<label for="email">Email</label>
				<input type="text" name="email" id="email" />
			</p>
			<p>
				<label for="message">Message</label><br />
				<textarea name="message" cols="50" rows="7"></textarea>
			</p>
			<p>
				<input type="submit" value="Send" id="submit" />
				<img id="spinner" src="loading.gif" style="display:none; float: right;" />
			</p>
		</form>
	</div>

</body>

</html>

Codul este cat se poate de simplu, ca sa nu pierdem din vedere scopul principal. Dupa cum vedeti, formularul face submit catre un fisier PHP numit sugestiv submit.php.

<?php

session_start();

$name = "No name sumbitted";
if(isset($_POST["name"]))
	$name = $_POST["name"];

$email = "No email sumbitted";
if(isset($_POST["email"]))
	$email = $_POST["email"];

$message = "No message sumbitted";
if(isset($_POST["message"]))
	$message = $_POST["message"];

$_SESSION["name"] = $name;
sleep(3);
$_SESSION["email"] = $email;
sleep(3);
$_SESSION["message"] = $message;
sleep(3);

header("Location: landing.php");

?>

Codul este irelevant. L-am pus acolo doar ca sa execute ceva in spate. Mai mult, observati folosirea functiei sleep() de cateva ori. Asta ca sa simuleze faptul ca scriptul dureaza ceva mai mult decat in mod normal.

Dupa ce se executa codul, trimitem utilizatorul la un landing.php ca sa-l anuntam ca totul s-a intamplat cu succes. Codul arata asa:

<?php session_start(); ?>
<!DOCTYPE html>
<html lang="en">

<head>
	<title>AJAX Landing</title>
	<link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>

	<div id="wrapper">
		<h3>The following data has been sumbitted</h3>
		<p>Name: <?php echo $_SESSION["name"] ?></p>
		<p>Email: <?php echo $_SESSION["email"] ?></p>
		<p>Message: <?php echo $_SESSION["message"] ?></p>
	</div>

</body>

</html>

In momentul de fata avem exact situatia despre care vorbeam mai sus. La click, user-ul este trimis la submit.php unde nu vede decat o fereastra goala pana se executa codul. Abia la final este trimis catre landing.php.

Ca sa rezolvam problema, vom executa scriptul submit.php asincron. Ca sa ne fie mai usor, vom apela la jQuery pentru partea de AJAX.

Mai intai includem libraria jQuery:

	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

Apoi, tot ce trebuie sa facem este sa adaugam cateva linii de cod. Explicatiile le gasiti in comentarii la fiecare linie de cod unde acest lucru este necesar. P.S. Daca vi se pare greu de citit, il aveti mai jos fara comentarii (plus arhiva de la final):

	$(document).ready(function() {
		$("#submit").click(function(event) { // Declansam la click pe Submit
			event.preventDefault(); // Avem grija sa nu mai faca submit clasic
			$.ajax({
				url: "submit.php", // Unde facem requestul AJAX
				beforeSend: function() { // Inainte de request executam:
					$("#submit").css("display", "none"); // Ascundem butonul de submit
					$("#spinner").css("display", "block"); // Incarcam un loader (un gif)
				},
				type: "POST",
				data: ({
							name: $("#name").val(), // Luam valoarea lui 'name' pentru submit
							email: $("#email").val(), // Luam valoarea lui 'email' pentru submit
							message: $("#message").val() // Luam valoarea lui 'message' pentru submit
				}),
				success: function(msg) {
					window.location.replace("landing.php"); // La final, redirectam utilizatorul la landing.php
				}
			});
		});
	});

La final, ar trebui sa obtinem un fisier index.php care arata asa:

<!DOCTYPE html>
<html lang="en">

<head>
	<title>AJAX Submitter</title>
	<link rel="stylesheet" href="style.css" type="text/css" />
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function() {
			$("#submit").click(function(event) {
				event.preventDefault();
				$.ajax({
					url: "submit.php",
					beforeSend: function() {
						$("#submit").css("display", "none");
						$("#spinner").css("display", "block");
					},
					type: "POST",
					data: ({
							name: $("#name").val(),
							email: $("#email").val(),
							message: $("#message").val()
					}),
					success: function(msg) {
						window.location.replace("landing.php");
					}
				});
			});
		});
	</script>
</head>

<body>

	<div id="wrapper">
		<form method="POST" action="submit.php">
			<p>
				<label for="name">Name</label>
				<input type="text" name="name" id="name" />
			</p>
			<p>
				<label for="email">Email</label>
				<input type="text" name="email" id="email" />
			</p>
			<p>
				<label for="message">Message</label><br />
				<textarea name="message" cols="50" rows="7"></textarea>
			</p>
			<p>
				<input type="submit" value="Send" id="submit" />
				<img id="spinner" src="loading.gif" style="display:none; float: right;" />
			</p>
		</form>
	</div>

</body>

</html>

Dupa cum vedeti, n-am schimbat nimic in fisierele submit.php si landing.php. Am schimbat numai modul in care apelam aceste fisiere.

Acestea sunt elementele de baza pe care trebuie sa le stim pentru a oferi utilizatorului o experienta mai eleganta cu ajutorul AJAX.

Descarca arhiva

Read More
content top
  • RSS
  • Twitter
  • Tumblr
  • Facebook