<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tutoriale</title>
	<atom:link href="http://it-nolimit.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://it-nolimit.com</link>
	<description>jQuery, php, html, css,mysql</description>
	<lastBuildDate>Fri, 09 Dec 2011 10:54:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Extragere date din link-ul Youtube cu Codeigniter</title>
		<link>http://it-nolimit.com/2011/07/03/extragere-date-din-link-ul-youtube-cu-codeigniter/</link>
		<comments>http://it-nolimit.com/2011/07/03/extragere-date-din-link-ul-youtube-cu-codeigniter/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 17:23:55 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=611</guid>
		<description><![CDATA[M-am intilnit cu asa o sarcina sa fac extragerea datelor unui clip de pe youtube. Am facut o mica librarie, poate cuiva ii va fi de folos. Controller]]></description>
			<content:encoded><![CDATA[<p>M-am intilnit cu asa o sarcina sa fac extragerea datelor unui clip de pe youtube. Am facut o mica librarie, poate cuiva ii va fi de folos.</p>
<p><span id="more-611"></span></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

/**
*@package Codeigniter  
* @subpackage Libraries  
* @category Youtube
* @author Ciobanu Ion &quot;http://www.it-nolimit.com&quot;
* @version 0.1
*/ 

class Youtube  {
public $id ='';
private $_url = &quot;http://gdata.youtube.com/feeds/api/videos/&quot;;
private $data;
public $width = 640;
public $height = 390;
public $link;
public $title; 	 	

function __construct($param = array())
{
  if (count($param) --&gt; 0) {

    $this-&gt;init($param);

  }
}

	public function init($param = array())
	{
		if (count($param) &gt; 0){

			foreach ($param as $k=&gt;$v){

				if (isset($this-&gt;$k)) {
					$this-&gt;$k = $v;
				}
			}
		}
	}

	/**
	 *@return complete url
	 */
	private function set_url($url)
	{
		return $this-&gt;_url = $url;
	}

	public function set_data($data)
	{
		 $this-&gt;data = $data;
	}

	public function get_data()
	{
		return $this-&gt;data;
	}

	/**
	 *Extragem datele despre clip
	 *@return array()
	 */

	public function get_youtube_data ()
	{

		$this-&gt;set_url($this-&gt;_url.$this-&gt;id);
		$this-&gt;set_data(file($this-&gt;_url));
		$this-&gt;set_data(implode('', $this-&gt;get_data()));
		$this-&gt;set_data(str_replace(array(&quot;\r\n&quot;, &quot;\r&quot;), &quot;\n&quot;, $this-&gt;get_data()));
		preg_match(&quot;&lt;yt:duration seconds='(.*?)'/&gt;&quot;, $this-&gt;get_data(), $duration);
		preg_match('|&lt;title [^&gt;]*&gt;(.*?)&lt;/title&gt;|is', $this-&gt;get_data(), $title);

		$min = floor($duration[1]/60);
       	$sec = $duration[1] %60;

	    $details = array(
	    	'title'=&gt;$title[1],
	    	'duration'=&gt;$min.':'.$sec,

	    );

	    $this-&gt;title = $title[1];

       return $details;

	}

	/**
	 * Player-ul
	 * @return html
	 */

	public function embed_code()
	{
		$outupt = '&lt;object width=&quot;'.$this-&gt;width.'&quot; height=&quot;'.$this-&gt;height.'&quot;&gt;';
                $outupt .= '&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/'.$this-&gt;id.'?version=3&amp;controls=0&amp;rel=0&amp;showinfo=0&amp;feature=player_embedded&quot; /&gt;';
                $outupt .= '&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;';
                $outupt .= '&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;';
                $outupt .= '&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;'.$this-&gt;width.'&quot; height=&quot;'.$this-&gt;height.'&quot; src=&quot;http://www.youtube.com/v/'.$this-&gt;id.'?version=3&amp;controls=0&amp;rel=0&amp;showinfo=0&amp;feature=player_embedded&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;';

		return $outupt;
	}

	/**
	 * Image
	 *@return html
	 */
	public function embed_image()
	{
		$output = '&lt;img title=&quot;.$this-&gt;title.&quot; src=&quot;http://i.ytimg.com/vi/'.$this-&gt;id.'/default.jpg&quot; border=&quot;0&quot; alt=&quot;.$this-&gt;title.&quot; width=&quot;120&quot; height=&quot;90&quot; /&gt;';

		return $output;
	}

	/**
	 * Verifica daca exista asa id
	 *
	 * @param $link format
	 * @return id or FALSE
	 */
	public function check_link($link)
	{
		//Verificam daca este link de youtube
		if (!preg_match('/http:\/\/www\.youtube\.com\/watch\?v=[^&amp;]+/', $link)) {
          return FALSE;
		} else {

    	   	//Extragem ID-ul
			$x = explode('?v=', $link);
			if(!empty($x) &amp;&amp; isset($x[1])){

				$x = explode('&amp;', $x[1]);
				$id = $x[0];

			}

			$header = get_headers($this-&gt;_url.$id);

			//Verificam daca exista asta ID
			if (!strpos($header[0], '200')) {
	    		return FALSE;
			} else {
				return $id;
			}
       	}
	}

}
</pre>
<blockquote>
<h2><strong>Controller</strong></h2>
</blockquote>
<pre class="brush: php; title: ; notranslate">
$v_id = $this-&gt;youtube-&gt;check_link(&quot;http://www.youtube.com/watch?v=mHTx0mhRFws&amp;feature=autoplay&amp;list=PLE74055EAE83B6803&amp;index=4&amp;playnext=25&quot;);

if($v_id){

     $config['id'] = $v_id;
     $config['width'] = 640;
     $config['height']= 390;

     $this-&gt;youtube-&gt;init($config);

     $details = $this-&gt;youtube-&gt;get_youtube_data();

     print_r($details);

     echo $this-&gt;youtube-&gt;embed_image();

     echo  $this-&gt;youtube-&gt;embed_code();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2011/07/03/extragere-date-din-link-ul-youtube-cu-codeigniter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meniu Drop &#8211; Down cu jQuery</title>
		<link>http://it-nolimit.com/2011/01/04/meniu-drop-down-cu-jquery/</link>
		<comments>http://it-nolimit.com/2011/01/04/meniu-drop-down-cu-jquery/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 15:55:44 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[drop down menu]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=506</guid>
		<description><![CDATA[Bună ziua! Bine ați venit la un nou curs! În acest tutorial voi arată cum cu ajutorul lui jQuery puteți crea un buton, care va deshide lista de meniu. Pentru a vedea acest efect, intrati pe psd.tutsplus.com Cînd faceți click pe buton se deschide un bloc cu o listă de link-uri și atunci cînd apasăm [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Bună ziua! Bine ați venit la un nou curs! În acest tutorial voi arată cum cu ajutorul lui jQuery puteți crea un buton, care va deshide lista de meniu. Pentru a vedea acest efect, intrati pe <a href="http://psd.tutsplus.com" target="_blank">psd.tutsplus.com</a><br />
<img class="size-full wp-image-510 aligncenter" title="step1" src="http://it-nolimit.com/wp-content/uploads/2011/01/step1.gif" alt="psd.tutsplus.com" width="600" height="300" /></p>
<p>Cînd faceți click pe buton se deschide un bloc cu o listă de link-uri și atunci cînd apasăm pe un link blocul este minimizat. Acest lucru poate fi realizat cu jQuery și în acest tutorial voi arata cum. În primul rînd trebuie sa creem butonul nostru, ca mai apoi sa ne concentram asupra codului. Puteți crea un buton absolut de orice dimensiune. Dimensiunea la butoanele mele &#8211; <em>182 x 32</em> pixeli. Faceți dublu click pe stratul de fundal și adaugă &#8220;Gradient Overlay&#8221;.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-511" title="Gradient Overlay" src="http://it-nolimit.com/wp-content/uploads/2011/01/step2.gif" alt="Gradient Overlay" width="574" height="347" /></p>
<p style="text-align: center;">În partea dreapta a butonului adaugă o mică săgeată albă și un separator vertical din două culori: <em>#252525</em> și <em>#302f2f</em><br />
<img class="alignnone size-full wp-image-512" title="step3" src="http://it-nolimit.com/wp-content/uploads/2011/01/step3.gif" alt="" width="600" height="258" /></p>
<p style="text-align: left;">La stînga puteți insera o imagine și un text, nu voi intra în detalii la crearea butonului pentru ca fiecare își va crea singur meniul. Aici este butonul meu.(Salvați imaginea în folderul cu imagini.)</p>
<p style="text-align: center;"><img class="size-full wp-image-513 aligncenter" title="step4" src="http://it-nolimit.com/wp-content/uploads/2011/01/step4.gif" alt="" width="184" height="32" /></p>
<p style="text-align: left;">Acum deschideți Notepad și salvați documentul gol ca styles.css în folderul ”sliding menu” de pe desktop. Închideți Notepad, deschideți folderul ”slideng menu” și creați creați două foldere noi ”js” și ”images”. Du-te la jquery.ocom descarcă biblioteca ”jquery-1.4.4.min.js”, redenumiți fișierul doar ”jquery” și salvați-l în folderul ”js”. Deschideți Dreamweaver și creați un fișier nou HTML. Salvați-l direct pe desktop. (Numele fișierul nu joacă nici un rol, de aceea dații ce nume doriți, de exemplu ”sliding_menu.html”). În Dreamweaver comutăm în regim de cod</p>
<p style="text-align: center;"><img class="size-full wp-image-514 aligncenter" title="step5" src="http://it-nolimit.com/wp-content/uploads/2011/01/step5.gif" alt="" width="564" height="190" /></p>
<p>În primul rînd ce trebuie să facem este sa punem referințele către fișierele noastre javascript și css. Pentru aceasta copiem aceasta bucată de cod înt tag-ul <em>HEAD.</em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/slider.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Probabil ați observat ca am menționat 3 fișiere <em>styles.css, jquery.js</em> și <em>slider.js </em>(Desigur ca vă veți întreba de la treilea fișier). Deschideți Notepad și salvați documentul gol într-un folder cu numele de <em>slider.js</em> Acum deschideți fișierul în Dreamweaver și scriți codul de mai jos.</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function () {
    $('img.menu_class').click(function () {
        $('ul.the_menu').slideToggle('medium');
    });
});
</pre>
<p>Permiteți-mi să explic fragmentul de cod de mai sus. Prima linie înseamnă că atunci cînd documentul este încărcat, este apelată funcția(în cazul nostru sliding menu). Următoarea linie înseamnă că, îndată ce faceți click pe imagine cu clasa <em>menu_class</em> meniul se va desfășura.l Urmează al 3-lea rînd.  Meniul se va desfășura în jos la o viteză medie.  Puteți seta viteza <em>slow(lent)</em> sau <em>fast(rapid). </em>Linia a doua și a treia sunt foarte importante deoarece ele conțin elemente legate de CSS și anume <em>img.menu_class</em> și <em>ul.the_menu. </em>Treci la documentul <em>HTML</em> în regim de cod pentru ca să începem să creem meniul nostru.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=&quot;images/button.png&quot; width=&quot;184&quot; height=&quot;32&quot; class=&quot;menu_class&quot; /&gt;
&lt;ul class=&quot;the_menu&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Website #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Website #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Link #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Link #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Website #3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Website #4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Link #3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;A Link #4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>În primul rînd de cod noi inserăm imaginea butonului nostru. Am specificat lățimea și înălțimea, și stabilim clasa <em>menu_class</em>. Clasa este unicul punct de referință pentru fișierul <em>js</em> care noi deja l-am creat. Clasa ne permite să aplicam orice stil <em>CSS</em> prin intermediul <em>.menu_class. </em>După care noi obținem o listă neordonată. Dacă vizualizați meniul în browser-ul dvs., trebuie să arate așa.</p>
<p style="text-align: center;"><img class="size-full wp-image-515 aligncenter" title="step6" src="http://it-nolimit.com/wp-content/uploads/2011/01/step6.gif" alt="" width="251" height="240" /></p>
<p>Deschideți fișierul CSS în Dreamweaver. Acum trebuie să stabilim stilul pentru documentul nostru.</p>
<pre class="brush: css; title: ; notranslate">
body {
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px;
    background-color: #333333;
}
</pre>
<p>Este nevoie de un font și fundal simplu. Setatți dimensiunea fontului după dorință. Am schimbat culoarea fundalului de la alb la gri închis. Creem stil pentru listele neordonate.</p>
<pre class="brush: css; title: ; notranslate">
ul, li {
    margin:0;
    padding:0;
    list-style:none;
}

.menu_class {
    border:1px solid #1c1c1c;
}
</pre>
<p>Următorul stil se aplică pentru meniul care se va desfășura după apăsarea butonului.</p>
<pre class="brush: css; title: ; notranslate">
.the_menu {
    display:none;
    width:300px;
    border: 1px solid #1c1c1c;
}
</pre>
<p>În acest fragment de cod, aveți posibilatea să modificați lățimea blocului meniului desfășurat. Lățimea meniului meu este de <em>300px</em>, dar aveți posibilitatea să specificați orice lățime. Eu am setat și border cu <em>1px. </em>Următoarea parte a codului se referă la culoarea de fundal a meniului desfășurat și stabilește și textului.</p>
<pre class="brush: css; title: ; notranslate">
.the_menu li {
    background-color: #302f2f;
}

.the_menu li a {
    color:#FFFFFF;
    text-decoration:none;
    padding:10px;
    display:block;
}

.the_menu li a:hover {
    padding:10px;
    font-weight:bold;
    color: #F00880;
}
</pre>
<div id="DemoAndSource">
<ul>
<li><a href="/wp-content/tutorials/tut1/demo/demo.html" target="_blank">Demo</a></li>
<li><a href="/wp-content/tutorials/tut1/demo.rar">Download</a></li>
</ul>
</div>
<h4>Sursa: <a href="http://www.net.tutsplus.com" target="_blank">net.tutsplus.com</a></h4>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2011/01/04/meniu-drop-down-cu-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>10 tag-uri HTML, care sunt folosite rar de începători</title>
		<link>http://it-nolimit.com/2011/01/01/10-tag-uri-html-care-sunt-folosite-rar-de-incepatori/</link>
		<comments>http://it-nolimit.com/2011/01/01/10-tag-uri-html-care-sunt-folosite-rar-de-incepatori/#comments</comments>
		<pubDate>Sat, 01 Jan 2011 21:23:01 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=453</guid>
		<description><![CDATA[Fiecare care citește această lecție, cu siguranță știe ce este HTML. Indiferent de nivelul de experiență care îl ai, revizuind cunoștințele de bază poate spori nivelul de cunoștințe și abilitățile dumneavoastră, mai ales într-o continuă evoluția a tehnologiilor web. Se vorbește mult despre schimbările care au adus HTML 5. Fiecare tag menționat în acest articol [...]]]></description>
			<content:encoded><![CDATA[<p>Fiecare care citește această lecție, cu siguranță știe ce este HTML. Indiferent de nivelul de experiență care îl ai, revizuind cunoștințele de bază poate spori nivelul de cunoștințe și abilitățile dumneavoastră, mai ales într-o continuă evoluția a tehnologiilor web.<span id="more-453"></span></p>
<p>Se vorbește mult despre schimbările care au adus HTML 5. Fiecare tag menționat în acest articol sunt acceptate în HTML 4.01 și HTML 5. Deși unele dintre aceste tag-uri sunt utilizate pe scara largă, va fi foarte util de a revizui metodele aplicate .</p>
<h1><strong>1.&lt;!- -&gt;</strong></h1>
<p>Fiecare carte despre programare menționează faptul că este foarte bine de a explica ceea ce face codul. De ce sunt comentariile o idee bună? Acest lucru este foarte util pentru oricine care citește codul, să înțeleagă ceea ce se întîmplă.</p>
<p>Pentru HTML, comentarea pare nejustificată, cu toate acestea, ea poate fi utilizată pentru a defini secțiuni, și vă poate ajuta să păstrați codul organizat și structurat. Etichetarea începutului și sfîrșitul unei secțiuni într-adevăr ajută mult atunci cînd lucrezi la un proiect.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Inceptul navigarii --&gt;
&lt;ul&gt;
        &lt;li&gt;Menu 1&lt;/li&gt;
        &lt;li&gt;Menu 2&lt;/li&gt;
   &lt;/ul&gt;
&lt;!-- Sfirsitul navigarii --&gt;
&lt;!-- Inceptul continului --&gt;
&lt;p&gt;Continutul&lt;/p&gt;
</pre>
<h1><strong>2.&lt;thead&gt;,&lt;tbody&gt;,&lt;tfoot&gt;</strong></h1>
<p>Pentru a face un design mai frumos pentru tabel trebuie sa folosim tag-urile menționate mai sus. Ele toate afectează rîndurile tabelei și poate fi ușor stabilite stiluri.</p>
<table>
<thead>
<tr>
<td>Item</td>
<td>Qty</td>
</tr>
</thead>
<tfoot>
<tr>
<td>Sum</td>
<td>7</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>#1</td>
<td>3</td>
</tr>
<tr>
<td>#2</td>
<td>4</td>
</tr>
</tbody>
</table>
<h2>&lt;thead&gt;</h2>
<p>Se foloseşte pentru a grupa una sau mai multe linii ale tabelului într-un antet al acestuia. <em><br />
</em></p>
<h2>&lt;tbody&gt;</h2>
<p>Se foloseşte pentru a marca grupuri de linii ale tabelului care conţin datele propriu zise. Într-un tabel pot exista mai multe zone<br />
. Dacă tabelul nu are<br />
sau<br />
atunci<br />
poate să lipsească, altfel este obligatoriu.</p>
<h2>&lt;tfoot&gt;</h2>
<p>Se foloseşte pentru a grupa una sau mai multe linii ale tabelului într-un subsol al acestuia.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;table&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;td&gt;Item&lt;/td&gt;
			&lt;td&gt;Qty&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tfoot&gt;
		&lt;tr&gt;
			&lt;td&gt;Sum&lt;/td&gt;
			&lt;td&gt;7&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tfoot&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;#1&lt;/td&gt;
			&lt;td&gt;3&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;#2&lt;/td&gt;
			&lt;td&gt;4&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</pre>
<h1><strong> 3.&lt;optgroups&gt;</strong></h1>
<p>Listele &#8220;<em>drop down</em>&#8220;<em> </em>sunt o modalitate foarte bună de a prezenta date pentru ca utilizatorul sa aleagă. Ele nu numai că ocupă spațiu putin, dar și utilizatorii sunt familiarizați  și ușor de utilizat. Cu proprietatea <em>&lt;optgroup&gt;</em> este posibilitatea de a crea categorii pentru elementele din listă.</p>
<select> <optgroup label="Baseball Teams"><br />
<option value="Detroit Tigers">Detroit Tigers</option>
<option value="Chicago Cubs">Chicago Cubs</option>
<p> </optgroup> <optgroup label="Football Teams"><br />
<option value="Detroit Lions">Detroit Lions</option>
<option value="Chicago Bears">Chicago Bears</option>
<p> </optgroup> </select>
<pre class="brush: xml; title: ; notranslate">
&lt;select&gt;
&lt;optgroup label=&quot;Бейсбольные команды&quot;&gt;
&lt;option value=&quot;Detroit Tigers&quot;&gt;Detroit Tigers&lt;/option&gt;
&lt;option value=&quot;Chicago Cubs&quot;&gt;Chicago Cubs&lt;/option&gt;
&lt;/optgroup&gt;
&lt;optgroup label=&quot;Футбольные команды&quot;&gt;
&lt;option value=&quot;Detroit Lions&quot;&gt;Detroit Lions&lt;/option&gt;
&lt;option value=&quot;Chicago Bears&quot;&gt;Chicago Bears&lt;/option&gt;
&lt;/optgroup&gt;
&lt;/select&gt;
</pre>
<h1>4.<strong>Heading</strong></h1>
<p>Desigur, toată lumea folosește titluri. Dar pentru a fi sincer, cînd ultima oară ați folosit <em>h3</em> sau mai mic. Titlurile vă permit să cronstruiți structuri semantice mai puține, cum ar fi stiluri de text în <em>div</em>.<br />
Nu trebuie să facem muncă suplimentară. Amentiți-vă de aceste tag-uri.</p>
<h1><strong> 5.&lt;fieldset&gt;și&lt;legend&gt;</strong></h1>
<p>La toată lumea le place site-urile unde este ușor de găsit informația necesară care este grupă. <em>&lt;fieldset&gt;</em>grupează elementele formei, desenînd împrejurul lor un dreptunghi. De asemenea, este posibil de adăugat titlu la acest grup cu <em>&lt;legend&gt;</em></p>
<p style="text-align: center;"><em><img class="size-full wp-image-479 aligncenter" title="fieldset" src="http://it-nolimit.com/wp-content/uploads/2011/01/fieldset.png" alt="" width="472" height="360" /></em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;form&gt;
&lt;fieldset&gt;
&lt;legend&gt;General Information: &lt;/legend&gt;
&lt;label&gt;Name: &lt;input type=&quot;text&quot; size=&quot;30&quot; /&gt;&lt;/label&gt;
&lt;label&gt;Email: &lt;input type=&quot;text&quot; size=&quot;30&quot; /&gt;&lt;/label&gt;
&lt;label&gt;Date of birth: &lt;input type=&quot;text&quot; size=&quot;10&quot; /&gt;&lt;/label&gt;
&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<h1><strong>6.&lt;label&gt;</strong></h1>
<p>Tag-ul <em>&lt;label&gt;</em> nu are nici un efect asupra stilului. El afectează funcționalitatea paginii.</p>
<p><em>&lt;label&gt;</em>se utilizează pentru a determina eticheta elementui de intrare. Această proprietate este valabilă pentru cîmpurile de tip text și radio butoane.</p>
<form><label>Numele:</label></p>
<input size="30" type="text" /> <label>Masculin:</label></p>
<input name="sex" type="radio" /> <label>Feminin:</label></p>
<input name="sex" type="radio" /> </form>
<pre class="brush: xml; title: ; notranslate">
&lt;form&gt;
&lt;label&gt;Numele: &lt;input type=&quot;text&quot; size=&quot;30&quot; /&gt;&lt;/label&gt;
&lt;label&gt;Masculin: &lt;input type=&quot;radio&quot; name=&quot;sex&quot; /&gt;&lt;/label&gt;
&lt;label&gt;Feminin: &lt;input type=&quot;radio&quot; name=&quot;sex&quot; /&gt;&lt;/label&gt;
&lt;/form&gt;
</pre>
<h1><strong>7.&lt;blockquote&gt;</strong></h1>
<p>Dacă sunteți în căutarea de a crea un efect dramatic de a atrage atenția la o declarație sau o propoziție, puteți folosi <em>&lt;blockquote&gt;. </em>În mod implicit, înainte și după element se adaugă un spațiu gol.</p>
<p>Exemplu de utilizare a <em>&lt;blockquote&gt;</em></p>
<blockquote><p>Exemplu de utilizare a acestui tag</p></blockquote>
<pre class="brush: xml; title: ; notranslate">
&lt;blockquote&gt;
Exemplu de utilizare a acestui tag
&lt;/blockquote&gt;
</pre>
<h1><strong>8.&lt;cite&gt;</strong></h1>
<p>Nu se poate de spus că <em>&lt;cite&gt;</em> se referă la <em>&lt;blockquote&gt;, </em>de obicei ele sunt folosite împreună. Gîndiți-vă de eticheta <em>&lt;cite&gt;</em>, atunci cînd aveți nevoie de citat pe cineva.<br />
Exemplu:</p>
<blockquote><p><cite>Utilizarea tag-ului cite în tag-ul blockquote </cite></p></blockquote>
<pre class="brush: xml; title: ; notranslate">
&lt;blockquote&gt;
&lt;cite&gt;Utilizarea tag-ului cite în tag-ul blockquote &lt;/cite&gt;
&lt;/blockquote&gt;
</pre>
<h1><strong>9.&lt;dl&gt;</strong></h1>
<p>Listele ne oferă oportunitatea pentru organizarea informației. Toată lumea știe de &lt;<em>ul&gt;</em>, dar cît de des folosiți <em>&lt;ol&gt;</em> și <em>&lt;dl&gt; </em>?<br />
<strong>Tipuri de liste</strong></p>
<ol>
<li>Listă neordonată (ul)</li>
<li>Listă ordonată (ol)</li>
<li>Listă de definiții(dl)</li>
</ol>
<p><strong>Ce fac ele</strong></p>
<ul>
<li><strong>Listă neordonată (ul)</strong>: listă cu buline</li>
<li><strong>Listă ordonată (ol)</strong>: listă numerotată</li>
<li><strong>Listă de definiție(dl)</strong>: O listă de definiţii ale elementelor</li>
</ul>
<p>Modul de afișare a informației în fiecare tip de listă este diferit. Desigur nu trebuie să ma opresc asupra <em>&lt;ul&gt; </em>și<em> &lt;ol&gt;, </em>dar asupra listei de definiții care necesită clarificare suplimentară.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;dl&gt;
&lt;dt&gt;List Item #1&lt;/dt&gt;
&lt;dd&gt;Definiția pentru elementul din Lista #1&lt;/dd&gt;
&lt;dt&gt;List Item #2&lt;/dt&gt;
&lt;dd&gt;Definiția pentru elementul din Lista #2&lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p>În loc de a specifica un element din listă (<em>&lt;li&gt;</em>), vom folosi două etichete: <em>&lt;dt&gt;</em> și <em>&lt;dd&gt;</em>. <em>&lt;dt&gt;</em> definește fiecare element și <em>&lt;dd&gt;</em> descrie elementul de mai sus.</p>
<h1><strong>10.</strong>&amp;#39;(și alte caractere ASCII)</h1>
<p>La folosirea HTML trebuie de folosit codul ASCII, atunci cînd trebuie să inseram un simbol. Această regulă necesită acțiuni suplimentare, dar asigură afișarea simbolului corect pe ecranul utilizatorului.</p>
<h3>Sursa:<a href="http://net.tutsplus.com/tutorials/html-css-techniques/the-10-html-tags-beginners-arent-using/">aici</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2011/01/01/10-tag-uri-html-care-sunt-folosite-rar-de-incepatori/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Chrome vs Firefox</title>
		<link>http://it-nolimit.com/2010/12/06/chrome-vs-firefox/</link>
		<comments>http://it-nolimit.com/2010/12/06/chrome-vs-firefox/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 11:46:02 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[Altele]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=394</guid>
		<description><![CDATA[Zilele acestea am citit un articol unde se spunea despre statistica browserelor  Firefox deține 22% iar Chrome 9.6%.  Google Chrome este într-o continuă ascensiune. Mult timp Firefox era browsererul numărul unu printre utilizatori dar după apariția lui Chrome situația sa schimbat, asta se vede și după statistică. Cei de la google au adus îmbunătățiri foarte [...]]]></description>
			<content:encoded><![CDATA[<p>Zilele acestea am citit un articol unde se spunea despre statistica browserelor  Firefox deține 22% iar Chrome 9.6%.  Google Chrome este într-o continuă ascensiune. Mult timp Firefox era browsererul numărul unu printre utilizatori dar după apariția lui Chrome situația sa schimbat, asta se vede și după statistică. Cei de la google au adus îmbunătățiri foarte bune într-un timp foarte scurt de timp, pe cînd cei de la Firefox nici acum nu le-au facut.<span id="more-394"></span></p>
<p>În Chrome poți instala extensiile și le folosi fără să faci restart la browser, taburile sunt izolate în procesere separate în caz ca cade un tab browser-ul rămîne în funcționare.</p>
<p>Un lucru foarte bun pentru utilizatorii de Chrome este că cei de la google aduc modificări treptat ceea ce face ca utilizatorul repede să prindă firul, pe cînd cei de la Firefox fac o lista întreaga  de modificări și apoi scot o versiune nouă.</p>
<p>Pe mine personal mă deranjează la Firefox consumul mare de  memorie.</p>
<p>Cei de la google au implimentat sincronizarea , acum permite si sincronizarea extensiilor .  Odată cu apariția la Firefox 4 ei ne promit Sincronizarea și o modalitate practică de organizare a taburilor(vedem ce se va primi).</p>
<p>Dar totuși Firefox este puternic la cîteva capitole:</p>
<ul>
<li>ca web-developer nu am găsit nimic bun ca Firebug (Firebug Lite este un început pentru Chrome)</li>
<li>dacă descarci mult de pe internet Firefox are o extensie foarte utilă care în Chrome  nu este asa ceva <strong><em>DownThemAll</em></strong></li>
</ul>
<p>P.S.  Ca web-developer folosesc <em>Firefox</em> ca simplu utilizator folosesc <em>Chrome</em></p>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/12/06/chrome-vs-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soluții CSS3 pentru Internet Explorer</title>
		<link>http://it-nolimit.com/2010/11/13/solu%c8%9bii-css3-pentru-internet-explorer/</link>
		<comments>http://it-nolimit.com/2010/11/13/solu%c8%9bii-css3-pentru-internet-explorer/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 22:28:42 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=323</guid>
		<description><![CDATA[Probabil CSS3 este cea mai mare tendință în web design, permițînt dezvoltatorilor posibilitatea de a pune în aplicare o serie de soluții în proiectele lor doar cu CSS, evitînd să utilizeze markup non-standard, imagini suplimentare și a procedurilor complexe în JavaScript. Din păcate, nu este o surpriză că Internet Explorer, chiar și în versiunea sa [...]]]></description>
			<content:encoded><![CDATA[<p>Probabil CSS3 este cea mai mare tendință în web design, permițînt dezvoltatorilor posibilitatea de a pune în aplicare o serie de soluții în proiectele lor doar cu CSS, evitînd să utilizeze markup non-standard, imagini suplimentare și a procedurilor complexe în JavaScript. Din păcate, nu este o surpriză că Internet Explorer, chiar și în versiunea sa cea mai recentă, încă nu suportă majoritatea proprietăților și caracteristicile introduse în CSS3.<span id="more-323"></span></p>
<p><img class="size-full wp-image-324" title="InternetExplorer" src="http://it-nolimit.com/wp-content/uploads/2010/11/InternetExplorer.jpg" alt="" width="500" height="441" /></p>
<p>Doar dezvoltatorii se confruntă cu faptul că clienții insistă asupra faptului cross-browser utilizînd soluțiile CSS3, cerînd punerea lor în aplicare, chiar și în IE6. În acest caz, am colectat o serie de opțiuni care dezvoltatorii pot lua în considerare atunci cînd se lucrează în aceste condiții, atunci cînd sprijinul CSS3 este necesar în toate versiunile de Internet Explorer (IE6, IE7, IE8 &#8211; toate au un număr semnificativ de utilizatori).</p>
<h3><strong>Opacity / Transparency</strong></h3>
<p>Probabil, că toți dezvoltatorii sunt uimiți de faptul ca Internet Explorer încă nu acceptă aceastră populară proprietate(deși e problematic). Aceasta este ulitilizată peste tot atît de mult timp că toți au uitat că, de fapt este proprietatea din CSS3. Deși nu suportă propietatea <em>opacity</em>, el ne oferă efect asemănator cu ajutorul proprietății lui <em>filter:</em></p>
<pre class="brush: css; title: ; notranslate">
#myElement {
	opacity: .4; /* Alte browsere */
	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); /* Funcționează în IE6, IE7, și IE8 */
	-ms-filter: &quot;progid:DXImageTransform.Microsoft.Alpha(opacity=40)&quot;; /* Functionează numai în IE8 */
}
</pre>
<p>Defapt aveți nevoie doar a doua linie, care lucrează în toate cele trei versiuni de Internet Explorer.  Dar dacă dintr-un motiv trebuie folosiți transparența numai în IE8, va trebuie doar linia a treia, pe care versiunile mai vechi nu recunosc.</p>
<p>Valoarea <em>opacity</em> care este la sfîrșitul fiecărei linie pentru IE, lucrează ca și <em>opacity</em> luînd un număr de la 0-100(proprietatea <em>opacity </em>se un numar între 0 &#8211; 1 . De exemplu &#8220;44&#8243;  pentru IE este echivalent cu  &#8220;0.44 &#8221; pentru alte browsere ). Proprietatea <em>opacity</em> va fi moștenită de toți copii, ceea ce poate să ne ducă în eroare.</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<div style="width: 250px; height: 100px; margin: 0pt 0pt 20px; background: none repeat scroll 0% 0% #0000ff; text-align: center; color: white; padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif; opacity: 0.4;">
<p>Acest element are culoarea de fundal albastra (#0000FF), dar cu opacity  60%</p>
</div>
<div style="width: 250px; height: 90px; margin: 0pt 0pt 20px; background: none repeat scroll 0% 0% #0000ff; text-align: center; color: white; padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif;">
<p>Același element fara proprietatea opacity</p>
</div>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>Proprietatea <em>filter </em>este folosită doar în produsele Microsoft, ceea ce face ca CSS -ul sa nu treacă validarea</li>
<li>Ca și în cazul folosirii <em>opacity </em>, valoarea proprietății <em>filter</em> IE este moștenită de toții copii.</li>
</ul>
<h3><strong>Rounded Corners (border-radius)</strong></h3>
<p>Proprietatea<em> border-radius</em> (des întîlnită în CSS3 ca colțuri rotunjite) &#8211; altă prorietate populară în CSS3. Această proprietate a permis dezvoltatorilor să evite scriputuri în JavaScript sau poziționarea de elemnte suplimentar pentru a atinge acest efect. Dar încă o dată, Microsoft nu vrea să coopereze, astfel IE nu suportă această proprietate.</p>
<p>Din fericire, cel puțin o persoană a venit cu o soluție foarte utilă. <a href="http://www.htmlremix.com/about" target="_blank">Remiz Rahnas</a> a creat un <a href="http://en.wikipedia.org/wiki/HTML_Components" target="_blank">fişier de HTC</a> care este numit <a href="http://www.htmlremix.com/css/curved-corner-border-radius-cross-browser" target="_blank">colţuri rotunjite</a> (îl puteți descărca de pe <a href="http://code.google.com/p/curved-corner/">Google Code</a>)</p>
<p>Cel mai mare lucru despre această bucată de cod este că nu necesită întreținere din partea dvs. Trebuie doar linkul către CSS și scriptul va analiza automat codul CSS, pentru a găsi proprietatea <em>border-radius.</em></p>
<p>Codul va arăta cam asa:</p>
<pre class="brush: css; title: ; notranslate">
.box-radius {
	border-radius: 15px;
	behavior: url(border-radius.htc);
}
</pre>
<p>În mod ideal, utilizați proprieatea <em>behavior </em>doar ăn foia de stil pentru IE, folosînd aceeși selectori în CSS, astfel script-ul va prelua volorile razelor<br />
.</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<p>Avînd în vedere că tehnica necesită utilizarea unui fișier HTC extern, demonstrația poate fi gasită  <a href="http://www.impressivewebs.com/css3-rounded-corners-in-internet-explorer/" target="_blank">aici</a> (pagina trebuie să fie deschisă în IE).</p>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>fișierul HTC are 142 de linii de cod(minimizarea sau arhivarea pot ajuta, dar nu elimină problema complet)</li>
<li>proprietatea <em>behavior </em>face ca CSS-ul sa nu fie validat</li>
<li>serverul dvs. trebuie sa poată încărca fișierul HTC pentru a utiliza această tehnologie</li>
<li>se pare că IE8 are aceeși problemă atunci cînd se utilizează fișierul HTC elemente cu colțuri rotunjite, care au valoarea negativă la proprietatea z-index</li>
</ul>
<h3><strong>Shadow Box</strong></h3>
<p>Proprietatea<em> box-shadow </em>este o altă proprietate utilă din CSS3, care va adăuga elementului o umbră naturală. IE nu acceptă propietatea <em>box-shadow</em>, dar proprietatea <em>filter </em>oferă o alternativă decentă.</p>
<p>Trebuie remarcat faptul că proprietatea <em>box-shadow</em> a fost  <a href="http://www.w3.org/TR/css3-background/#the-box-shadow">scoată din Backgrounds CSS3 şi Module Borders</a> astfel încît nu se știe viitorul în prezent.</p>
<pre class="brush: css; title: ; notranslate">
.box-shadow {
	-moz-box-shadow: 2px 2px 3px #969696; /* pentru Firefox 3.5+ */
	-webkit-box-shadow: 2px 2px 3px #969696; /*pentru Safari и Chrome */
	filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=145, Strength=3);
}
</pre>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% #eeeeee; margin: 0pt 0pt 20px; text-align: center; color: #444444; padding: 35px 15px 0pt; font-family: Arial,Helvetica,sans-serif;">
<p>Acest element are umbră care functionează în Internet Explorer.</p>
</div>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>Setările pentru umbră în IE nu corespunde cu proprietatea <em>box-shadow.</em> Pentru ca să arate la fel, trebuie să vă jucați cu volorile care poate provoca dureri de cap.</li>
<li>Proprietatea <em>filter</em> nu este validată , dar nici proprietățile <em>webkit și Mozilla, </em>astfel încît aceasta este un neajuns la toate browserele</li>
</ul>
<h3><strong>Text Shadow</strong></h3>
<p>Adăugarea umbră la etichetele text în design și paginele web se practică de mulți ani. În web design de obicei problema este rezolvată prin imagini sau duplarea textului și pozitionarea lui. CSS3 oferă dezvoltatorilor un mod simplu de a adăuga umbre la text, cu o proprietate simplă și flexibilă<em> text-shadow.</em></p>
<p>Din păcate, adăugînd o umbră la text în Internet Explorer nu este un proces simplu, chiar și cu folosirea unui filtru. Pentru a rezolva aceastră problemă există <a href="http://kilianvalkhof.com/2008/javascript/text-shadow-in-ie-with-jquery/">un plugin jQuery</a> scris de un web designer <a href="http://kilianvalkhof.com/">Kilian Valkhof</a><br />
În primul rînd trebuie în CSS să setați proprietatea<em> text-shadow:</em></p>
<pre class="brush: css; title: ; notranslate">
.text-shadow {
text-shadow: #aaa 1px 1px 1px;
}
</pre>
<p>Valorile specifică culoarea umbrei, poziția pe axa orizontală, poziția pe axa verticală și gradul de neclaritate.<br />
După conectarea bibliotecii jQuery și a plugin-ului, dumneavoastră puteți apela cu jQuery plugin-ul:</p>
<pre class="brush: jscript; title: ; notranslate">
// include bliblioteca jQuery
// include link la plugin
$(document).ready(function(){
$(&quot;.text-shadow&quot;).textShadow();
});
</pre>
<p>Plugin-ul vă permite să utilizați opțiunie</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<p>Deoarece această tehnică necesită utilizarea bibliotecii jQuery și un plugin extern, puteți vedea o demonstrație <a href="http://www.impressivewebs.com/css3-text-shadow-in-internet-explorer/" target="_blank">aici</a></p>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>Pentru ca umbrele să arate asemănător in toate browserele, trebuie să utilizați setări doar pentru IE, adăugînd la timpul de dezvoltare și întreținere</li>
<li>Trebuie de conectat bibliotica jQuery, plus plugin-ul care are 61 de linii</li>
<li>Umbra în IE nu va arata exact ca în celelalte browsere</li>
<li>Utilizarea parametrilor pentru plugin care modifică valorile proprietăților în CSS, plugin-ul nu funcționează corect, afișarea umbrelor este urităi</li>
<li>Spre deosebire de CSS3, plugin-ul nu suportă mai multe umbre</li>
<li>Indiferent de motive, în scopul ca în IE sa lureze este nevoie elementul de dat proprietatea <em>z-index</em></li>
</ul>
<h3><strong>Gradients</strong></h3>
<p>Createa unui gradient pentru fundal este o tehnică excelentă în CSS3, care ajută la scutirea timpului de dezvoltare. Deși Internet Explorer nu suține proprietatea din CSS3, se face foarte ușor folosind o sintaxă specifică.</p>
<pre class="brush: css; title: ; notranslate">
#gradient {
	background-image: -moz-linear-gradient(top, #81a8cb, #4477a1); /* Firefox 3.6 */
	background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0, #4477a1),color-stop(1, #81a8cb)); /* Safari &amp;amp; Chrome */
	filter:  progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1'); /* IE6 &amp;amp; IE7 */
	-ms-filter: &quot;progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1')&quot;; /* IE8 */
}
</pre>
<p>Pentru IE <em>GradientType</em> poate avea valori &#8220;1&#8243;(orizontal) sau &#8220;0&#8243;(vertical).</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<div style="width: 250px; height: 90px; margin: 0pt 0pt 20px; text-align: center; color: #ffffff; padding: 25px 15px 0pt; font-family: Arial,Helvetica,sans-serif; background-image: -moz-linear-gradient(center top , #81a8cb, #4477a1);">Acest element are un gradient liniar, care funcționează în Internet Explorer.</div>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>CSS-ul nu va trece validarea, de asemenea și WebKit și Mozilla</li>
<li>Cod suplimentar pentru IE, care crește timpul de dezvoltare</li>
<li>Gradientul WebKit și Mozilla va permite să declarați un <em>stops</em>, care nu este posibil în IE</li>
</ul>
<h3><strong>Transparent Background Colors (RGBA)</strong></h3>
<p>CSS3 are altă metodă de a folosi transparența, se face acest lucru printr-un canal alpha pentru culori de fundal. Internet Explorer nou acceptă aceastră proprietate, dar se poate de facut</p>
<p>Sintaxa CSS3 pentru stabilirea canalului alpha</p>
<pre class="brush: css; title: ; notranslate">
#rgba p {
	background: rgba(98, 135, 167, .4);
}
</pre>
<p>Pentru a simula în Internet Explorer se poate utiliza un filtru pentru a crea un gradient cu aceleaşi culori iniţiale şi finale care corespund la valoarea de transparenţă. O astfel de proprietate poate fi incluse în foaia de stil, numai pentru IE, care ar anula setările anterioare.</p>
<pre class="brush: css; title: ; notranslate">
#rgba p {
	filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#886287a7', endColorstr='#886287a7');
}
</pre>
<p>Gradient arată la fel în IE și alte browsere, dublicînd efectul de transparenţă RGBA.</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<p>Primul exemplu lucrează in browserele care suportă RGBA, iar al 2-lea lucrează numai în Internet Explorer</p>
<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% lightblue; margin: 0pt 0pt 20px; text-align: center; color: #444444; padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif;">
<p style="background: none repeat scroll 0% 0% rgba(98, 135, 167, 0.4); color: white; padding: 10px; margin: 0pt;">Acest paragraf are o culoare de fundal cu opacitatea de  40%, dar de RGBA (nu funcționează în IE).</p>
</div>
<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% lightblue; margin: 0pt 0pt 20px; text-align: center; color: #444444; padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif;">
<p style="color: white; padding: 10px; margin: 0pt;">This paragraph has an IE-only filter applied to mimic RGBA transparency (only works in IE).</p>
</div>
<ul>
<li>Proprieatea <em>filter</em> nu trece validarea</li>
<li>Aveți nevoie de linii suplimentare de CSS pentru IE</li>
</ul>
<h3><strong>Multiple Backgrounds</strong></h3>
<p>Aceasta este o altă tehnică CSS3, poți găsi multe aplicații practice utiizînd aceasta metodă. În prezent IE și Opera nu acceptă această tehnică. Dar este interesant că IE versiunea 5.5 a fost posibil folosirea de fundaluri multiple pentru același element.<br />
În Firefox, Sahari, Chrome pentru utilizarea fundalurilor multiple trebuie de urmat următoare regulă CSS:</p>
<pre class="brush: css; title: ; notranslate">
#multi-bg {
	background: url(images/bg-image-1.gif) center center no-repeat, url(images/bg-image-2.gif) top left repeat;
}
</pre>
<p>Pentru aplicarea a două fundaluri pentru același element în IE este următorea regulă:</p>
<pre class="brush: css; title: ; notranslate">
#multi-bg {
	background: transparent url(images/bg-image-1.gif) top left repeat;
	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src='images/bg-image-2.gif', sizingMethod='crop'); /* IE6-8 */
	-ms-filter: &quot;progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/bg-image-2.gif', sizingMethod='crop')&quot;; /* IE8 numai*/
}
</pre>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<p>Mai jos este un element cu fundaluri multiple care va fi vizibil în Chrome, Safari și Firefox(în IE nu se va putea vedea)</p>
<p>Mai jos este un elemnt cu două fundaluri care se va vedea numai în IE (în alte browsere va fi doar un fundal).</p>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>CSS nu va trece validarea</li>
<li>A doua imagine, folosind proprietatea <em>filter</em>, apare întotdeauna sus și nu se repetă. Astfel metoda este foarte limitată în utilizare</li>
<li>Pentru a plasa elementul în centru (ca în alte browsere), aveți nevoie de a crea o imagine cu un spatțiu alb suplimentar în jurul ei, pentru a imita o centrarea</li>
</ul>
<h3><strong>Element Rotation (CSS Tranformations)</strong></h3>
<p>CSS3 are un set de transformări și animații care unele pot parea nepotrivite pentru CSS. Cu toate acestea, există o modalitate de a simula rotația elementului în Internet Explorer? deși într-o formă limitată<br />
Rotația elementului la 180 grade (rotire pe verticală):</p>
<pre class="brush: css; title: ; notranslate">
#rotate {
	-webkit-transform: rotate(180deg);
	-moz-transform: rotate(180deg);
}
</pre>
<p>Pentru o astfel de acțiune în IE se folosește filtru:</p>
<pre class="brush: css; title: ; notranslate">
#rotate {
	filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
}
</pre>
<p>Parametrul <em>rotation</em> poate avea valori 1,2,3 sau 4. Care corespunde rotației la 90, 180,270 sau 360</p>
<h2><span style="color: #6c1818;"><strong>Demonstrație</strong></span></h2>
<p>Elementul de mai jos ar trebui să apară cu susul în jos în Internet Explorer utilizînd proprietatea<em> filter</em></p>
<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% #eeeeee; margin: 0pt 0pt 20px; text-align: center; color: #444444; padding: 30px 15px 0pt; font-family: Arial,Helvetica,sans-serif; border-bottom: 3px solid #bbbbbb;">
<p>Capul în jos.</p>
</div>
<h2><span style="color: #6c1818;"><strong>Dezavantaje</strong></span></h2>
<ul>
<li>CSS nu va trece validarea</li>
<li>În timp ce Mozilla și WebKit permite modificări de rotație la creștea cîte un grad(de exemplu 33grade), filtru IE permite rotație doar 4 etape, minimizînd flexibiliatatea</li>
</ul>
<h3><strong>Concluzii</strong></h3>
<p>Deși IE nu suportă CSS3, aceasta nu înseamnă ca este imposibil de implimentat astfel de proprietăți</p>
<h4><strong>SURSA:</strong></h4>
<p><a href="http://http://www.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer/" target="_blank"> aici</a></p>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/11/13/solu%c8%9bii-css3-pentru-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stocare ierarhică a datelor într-o baza de date</title>
		<link>http://it-nolimit.com/2010/11/02/stocare-ierarhica-a-datelor-intr-o-baza-de-date/</link>
		<comments>http://it-nolimit.com/2010/11/02/stocare-ierarhica-a-datelor-intr-o-baza-de-date/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 09:30:00 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=265</guid>
		<description><![CDATA[Fie ca vrei să-ți construiești propriul forum, publica mesajele dintr-o lista de discuții pe site-ul tau sau să scrii propiul CMS. Va veni un moment cînd vei dori sa stocezi datele ierarhic într-o bază de date. Și daca nu folosești o bază de date  XML, tabelele nu sunt ierarhice; acestea sunt doar o un fișier [...]]]></description>
			<content:encoded><![CDATA[<p>Fie ca vrei să-ți construiești propriul forum, publica mesajele dintr-o lista de discuții pe site-ul tau sau să scrii propiul CMS. Va veni un moment cînd vei dori sa stocezi datele ierarhic într-o bază de date. Și daca nu folosești o bază de date  XML, tabelele nu sunt ierarhice; acestea sunt doar o un fișier plat.  Există 2 metode importante: modelul listei adiacente și algoritmul parcurgerii arborelui cu preordine modificată.</p>
<p><span id="more-265"></span></p>
<p>În acest articol vom explora aceste 2 metode. Ca exemplu vom folosi arborele unui magazin alimentar fictiv. Acest magazin își sorteaza produsele dupa categorie, culoare și tip</p>
<p><img class="size-full wp-image-267 alignnone" style="border: 0pt none;" title="sitepoint_tree" src="http://it-nolimit.com/wp-content/uploads/2010/11/sitepoint_tree.gif" border="0" alt="" width="231" height="259" /><br />
Acest articol conține o serie de exmple de cod, care arată cum se salvează și se restabilesc datele. Deoarece folosesc eu însumi acest limbaj și mulți alți oameni îl folosesc sau îl cunosc, am ales să scriu exemple în PHP. Putem cu ușurință sa-l traducem in limbajul care îl doriți.</p>
<p><strong>Metoda recursivă</strong></p>
<p>Prima și cea mai elegantă metodă pe care o vom încerca se numește <em>metoda recursivității.</em> Este o metodă elegantă pentru ca avem nevoie de o simplă funcție care să se repete în arborele dumneavoastră.  În magazinul nostru de alimente tabelul arată astfel:</p>
<p><img class="alignnone size-full wp-image-272" title="table01" src="http://it-nolimit.com/wp-content/uploads/2010/11/table01.gif" border="0" alt="" width="154" height="236" /></p>
<p>După cum vedeți  salvați &#8220;părintele&#8221; fiecărui nod. Putem vedea că &#8220;Pear&#8221; este copil al lui &#8220;Green&#8221; care este un copil al &#8220;Fruit&#8221; s.a.m.d Nodul rădăcină &#8220;Food&#8221; nu are o valoare parentală. Pentru simplificare, am folosit valoarea &#8220;title&#8221; pentru a identifica fiecare nod. Bineînțeles, într-o bază de date reală ar trebui să folosiți id-ul numeric al fiecărui nod.</p>
<p><strong>Dați-mi arborele</strong></p>
<p>Acum că am introdus arborele nostru în baza de date, e timpul sa scriem funcția de afișare. Această funcție va trebui să înceapă de la nodul rădăcină &#8211; nodul fără nici un părinte &#8211; și ar trebui să afișeze apoi toți copiii din acel nod.  Pentru fiecare dintre acești copii, funcția va trebui să restabilească și să arate toate nodurile copii ale acelui copil. Pentru acești copii, funcția ar trebui să arate din nou toți copiii și așa mai departe.</p>
<p>După cum s-ar putea să fi observat, există un model regulat în descrierea funcției. Putem scrie pur si simplu o singură funcție, care preia copiii unui anumit nod părinte. Această funcție ar trebui să pornească o altă instantă a ei însăși pentru fiecare dintre acești copii, pentru a-i arăta pe toți copii acestora. Acesta este mecanismul recursiv care-i dă metodei numele de <em>metoda recursivității.</em></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// $parent este parintele copiilor pe care vrem sa-i vedem
// $level creste cand inaintam in arbore, pentru a arata arborele frumos
function display_children($parent, $level)
    {
    // restabileste toti copiii $parent
    $result = mysql_query('SELECT title FROM tree '.'WHERE parent=&quot;'.$parent.'&quot;;');
    // arata fiecare copil
    while ($row = mysql_fetch_array($result))
        {
        // indenteaza si arata titlul acestui copil
        echo str_repeat(' ',$level).$row['title'].&quot;\n&quot;;

       // copiii acestui copil
        display_children($row['title'], $level+1);
        }
    }
?&gt;
</pre>
<p>Pentru a afișa întregul arbore, vom rula funcția cu un șir gol cur ar fi <em>$parent </em>și <em>$level = 0; display_children(&#8216; &#8216;,0).</em></p>
<p>Pentru arborele magazinului nostru funcția returnează:</p>
<blockquote><p><em>Food<br />
Fruit<br />
Red<br />
Cherry<br />
Yellow<br />
Banana<br />
Meat<br />
Beef<br />
Pork</em></p></blockquote>
<p>Rețineți că, dacă vreți să vedeți un sub-arbore, puteți indica funcția să pornească cu-n alt nod. De exemplu, pentru a arăta sub-arborele <em>Fruit</em>, ar trebui să puneți în aplicare <em>display_children(&#8216;Fruit&#8217;,0);</em></p>
<p><strong>Calea către un nod</strong></p>
<p>Aproape cu aceeași funcție, este posibil pentru a căuta calea spre un nod dacă știi doar numele sau id-ul acelui nod. De exemplu calea spre &#8220;<em>Cherry&#8221; </em>este<em> &#8220;Foot&#8221; &gt; &#8220;Fruit</em><em>&#8221; </em>&gt; &#8220;<em>Red</em>&#8220;<em>. </em>Pentru a obține această cale, funcția noastră va trebui sa înceapă de la nivelul cel mai profund: <em>&#8220;Cherry&#8221;. </em>Dupa care, ea  se uită in sus la părintele acestui nod și-l adaugă la această cale. În exemplul nostru, acest lucru ar fi &#8220;<em>Red</em>&#8221; este părinte pentru &#8220;<em>Cherry</em>&#8220;, putem calcula calea spre &#8220;<em>Cherry</em>&#8220;<em>, </em>folosind calea spre &#8220;<em>Red</em>&#8220;<em>. </em>Și acest lucru ne este dat de funcția care am folosit-o: căutînd în mod recursiv părinții, vom obține calea către orice nod din arbore.</p>
<pre class="brush: php; title: ; notranslate">
// $node este numele nodului a carui cale o dorim
function get_path($node)
    {
    // cauta parintele acestui nod
    $result = mysql_query('SELECT parent FROM tree '.'WHERE title=&quot;'.$node.'&quot;;');
    $row = mysql_fetch_array($result);
    // salveaza calea in aceasta ordine
    $path = array();
    // continua numai daca acest Snod nu este nodul radacina
     if ($row['parent']!='')
        {
        // ultima parte a caii spre $nod, este numele
        // parintelui lui $node
        $path[] = $row['parent'];
        // ar trebui sa adaugam calea spre parintele acestui nod la cale
        $path = array_merge(get_path($row['parent']), $path);
        }
    // returneaza calea
    return $path;
    }
</pre>
<p>Această funcție returnează calea spre un nod dat. Returnează calea în <em>array</em>, pentru a arăta aclea putem folosi <em>print_r(get_path(&#8216;Cherry&#8217;));</em></p>
<p>Dacă facem acest lucru pentru <em>&#8220;Cherry&#8221;, </em>vom vedea:</p>
<blockquote><p>Array<br />
(<br />
[0] =&gt; Food<br />
[1] =&gt; Fruit<br />
[2] =&gt; Red<br />
)</p></blockquote>
<p><strong>Dezavantaje</strong></p>
<p>După cum ați văzut, aceasta este o metodă excelentă. Este ușor de  înțeles, și codul de care avem nevoie este simplu. Atunci care sunt dezavantajele modelului acestei structuri de date? În majoritatea limbajelor de programare, este lentă și ineficientă. Aceasta se datorează recursivității. Avem nevoie de o interogare în baza de date pentru fiecare nod din arbore.</p>
<p>Fiecare interogare ia ceva timp, acest lucru face foarte lentă funcția atunci cînd se aplică la arbori foarte mari.</p>
<p>Al doilea motiv pentru care această metodă nu este atît de rapidă, este limbajul de programare pe care probabil îl veți folosi. Spre deosebire de limbajele cum ar fi Lips, cele m ai multe limbaje nu sunt proiectate pentru recursivitate. Pentru fiecare nod, funcția pornește o altă instanță a ei însăși. Deci, pentru un arbore cu patru nivele, veți pune în aplicare patru instanțe ale funcției in același timp. Și cum fiecare funcție ocupă o felie de memorie și are nevoie de ceva timp pentru a porni, recursivitatea este foarte lentă atunci cînd este aplicată pentru arbori mari.</p>
<p><strong>Parcurgerea în preordine modificată a arborelui</strong></p>
<p>Acum, haideți să aruncăm o privire asupra altei metode de stocare a arborilor. Recursivitatea poate fi lentă, așă că n-ar trebui să folosim o funcție recursivă. Am dori de asemenea să micșorăm numărul interogărilor în baza de date. Preferabil ar fi dacă am avea o singură interogare pentru fiecare activitate.</p>
<p>Vom începe prin așezarea aborelui nostru în poziție orinzontală. Pornim de la nodul rădăcină (&#8220;<em>Food</em>&#8220;) și scriem 1 în stînga lui. Urmăm arborele spre &#8220;<em>Fruit</em>&#8221; și scriem 2 lîngă el. În acest fel, mergem de-a lungul marginilor arborelui în timp ce scriem cîte un număr în stînga și în dreapta fiecărui nod. Ultimul număr este scris în dreapta nodului &#8220;<em>Food</em>&#8220;. În această imagine, putem vedea întregul arbore numerotat și cîteva săgeți care arată ordinea numerotării.</p>
<p><img class="alignnone size-full wp-image-291" title="sitepoint_numbering" src="http://it-nolimit.com/wp-content/uploads/2010/11/sitepoint_numbering.gif" border="0" alt="" width="411" height="166" /></p>
<p>Vom numi aceste numere la stînga și la dreapta. (de exemplu valoarea stînga pentru &#8220;<em>Food</em>&#8221; este 1, valoarea dreapta este 18 ). După cum puteți vedea, aceste cifre indică relația dintre fiecare nod. Deoarece &#8220;<em>Red</em>&#8221; are numerele 3 și 6, este un descendent a 1-18 &#8220;<em>Food</em>&#8220;. În același fel, putem spune că toate nodurile cu valorile de stînga mai mari decît 2 și valorile din dreapta mai mici decît 11 sunt descendenți ai nodului 2-11 &#8220;<em>Fruit</em>&#8220;. Structura arborelui este acum stocată în valorile din stînga și din dreapta. Această metodă de a merge imprejurul arborelui și de a număra nodurile se numește algoritmul &#8220;<em>Parcurgerea în preordine modificată a arborelui</em>&#8220;.</p>
<p>Înainte de a continua, să vedem cum arată aceste valori în tabelul nostru:</p>
<p><img class="alignnone size-full wp-image-293" title="table02" src="http://it-nolimit.com/wp-content/uploads/2010/11/table02.gif" alt="" width="243" height="193" /></p>
<p>Rețineți că termenii <em>left </em>și <em>right</em> au o semnificație specială în <em>SQL</em>. Prim urmare, vom utiliza &#8220;<em>lft</em>&#8221; și &#8220;<em>rgt</em>&#8221; pentru a identifica coloanele. Observați de asemenea că nu prea avem nevoie de coloana părinte. Avem acum valorile  &#8220;<em>lft</em>&#8221; și &#8220;<em>rgt</em>&#8221; pentru a stoca structura arborelui.</p>
<p><strong>Extragerea datelor din arbore</strong></p>
<p>Dacă doriți să afișați arborele cu ajutorul unui tabel cu valorile <em>stînga </em>și <em>dreapta, </em>va trebui mai întii mai întii să identificați nodurile pe care vreți să le restabiliți. De exemplu, dacă vreți subarbore &#8220;<em>Fruit</em>&#8220;, vei avea pentru a selecta numai nodurile cu o valoare de stînga între 2 și 11. În <em>SQL, aceasta ar însemna:</em></p>
<blockquote><p><em>SELECT * FROM tree WHERE lft BETWEEN 2 AND 11;</em></p></blockquote>
<p>Această interogare returnează:</p>
<p><img class="alignnone size-full wp-image-299" title="table03" src="http://it-nolimit.com/wp-content/uploads/2010/11/table03.gif" alt="" width="243" height="130" /></p>
<p>Ei bine, iată un arbore întreg într-o singură interogare. Pentru a arăta acest arbore așa cum am procedat cu funcția noastră recursivă, va trebui să adăugam o clauză <em>ordonara după (order by) </em>pentru această interogare. Dacă adăugați și ștergeți rînduri din tabelul dvs, probabil că el nu va fi în ordinea corectă. De aceea, ar trebui să ordonăm rîndurile după valoarea lor din stînga.</p>
<blockquote><p><em>SELECT * FROM tree WHERE lft BETWEEN 2 AND 11 ORDER BY lft ASC; </em></p></blockquote>
<p>Singura problemă care ne-a mai rămas este identarea.</p>
<p>Pentru a arăta structura arborelui, copiii ar trebui indentați ceva mai mult decît părintele lor. Putem face aceasta, păstrînd o stivă a volorilor din dreapta. De fiecare dată când începeţi cu copiii unui nod, adăugaţi valoarea din  dreapta a acelui nod la stivă. Ştiţi că toţi copiii acelui nod au o  valoare-dreapta mai mică decât valoarea din dreapta a părintelui, aşa  că, dacă o să comparaţi valoarea din dreapta a nodului curent cu ultimul  nod din dreapta aflat în stivă, o să puteţi vedea dacă încă mai arătaţi  copiii acelui părinte. Când aţi terminat de arătat un nod, îndepărtaţi  valoarea sa din partea dreaptă din stivă. Dacă veţi număra elementele  din stivă, veţi obţine nivelul nodului curent.</p>
<pre class="brush: php; title: ; notranslate">

function display_tree($root)
    {
    //restabileste toti descendentii nodului $root
    $result = mysql_query('SELECT lft, rgt FROM tree '.'WHERE title=&quot;'.$root.'&quot;;');
    $row = mysql_fetch_array($result);
    // incepe cu o stiva goala  $right
    $right = array();
    // restabileste toti descendentii nodului $root
    $result = mysql_query('SELECT title, lft, rgt FROM tree '.
        'WHERE lft BETWEEN '.$row['lft'].' AND '.
        $row['rgt'].' ORDER BY lft ASC;');
    // arata fiecare rand
    while ($row = mysql_fetch_array($result))
        {
        // verifica stiva numai daca exista una
        if (count($right)&amp;gt;0)
            {
            // verifica daca ar trebui sa indepartam un nod din stiva
            while ($right[count($right)-1]&amp;lt;$row['rgt'])
                {
                array_pop($right);
                }
            }
        // arata titlul nodului indentat
        echo str_repeat(' ',count($right)).$row['title'].&quot;\n&quot;;
        // adauga acest nod la stiva
        $right[] = $row['rgt'];
        }
    }
</pre>
<p>Dacă veţi folosi acest cod, veţi obţine exact acelaşi arbore pe care  l-aţi obţinut cu funcţia recursivă discutată mai sus. Noua noastră  funcţie va fi probabil mai rapidă, nu este recursivă şi foloseşte doar  două interogări</p>
<p><strong>Calea către un nod</strong></p>
<p>Cu acest nou algoritm, va trebui de asemenea să găsim un nou mod de a  obţine calea către un anumit nod. Pentru a obţine această cale, vom avea  nevoie de o listă a tuturor strămoşilor acelui nod.</p>
<p>Cu structura noului nostru tabel, nu este foarte greu. Când vă uitaţi,  de exemplu, la nodul 4-5 &#8221;<em>Cherry</em>&#8220;, o să vedeţi că valorile din stânga  ale tuturor strămoşilor sunt mai mici decât 4, în timp ce toate valorile  din dreapta sunt mai mari decât 5. Pentru a obţine toţi strămoşii,  putem folosi această interogare:</p>
<blockquote><p><em>SELECT title FROM tree WHERE lft &lt; 4 AND rgt &gt; 5 ORDER BY lft ASC;</em></p></blockquote>
<p>Observaţi că, întocmai ca în investigaţia noastră precedentă, trebuie să folosim clauza <em>ORDONEAZA DUPA</em> pentru a sorta nodurile. Această interogare va returna:</p>
<blockquote><p>+&#8212;&#8212;-+<br />
| title   |<br />
+&#8212;&#8212;-+<br />
| Food |<br />
| Fruit |<br />
| Red   |<br />
+&#8212;&#8212;-+</p></blockquote>
<p>Acum nu ne rămâne decât să intrăm pe fiecare rând pentru a găsi calea spre &#8220;<em>Cherry</em>&#8220;.</p>
<p><strong>Cîţi descendenţi </strong></p>
<p>Dacă îmi daţi valorile din stânga şi din dreapta ale unui nod, vă pot spune căţi descendenţi are, folosind puţină matematică.<br />
Deoarece fiecare descendent incrementează valoarea din dreapta a  nodului cu 2, numărul descendenţilor poate fi calculat cu:</p>
<p>$descendants = (right &#8211; left &#8211; 1) / 2</p>
<p>Cu această formulă simplă, vă pot spune că nodul 2-11 &#8220;<em>Fruit&#8221;</em> are 4  noduri descendenţi şi că nodul 8-9 &#8220;<em>Banana</em>&#8221; este doar un copil, nu un  părinte.</p>
<p><strong>Automatizarea parcurgerii arborelui </strong></p>
<p>Acum că aţi văzut câteva dintre lucrurile uşoare pe care le puteţi  face cu acest tabel, e timpul să învăţăm cum putem automatiza crearea  acestui tabel. Cu toate că este un exerciţiu plăcut atunci când e  făcut prima dată şi cu un arbore mic, avem cu adevărat nevoie de un  scenariu care să facă toată această numărătoare şi înconjur al arborelui  pentru noi.</p>
<p>Să scriem un scenariu care transformă o listă adiacentă într-un tabel traversal al arborelui cu preordine modificată.</p>
<pre class="brush: php; title: ; notranslate">

function rebuild_tree($parent, $left)
    {
    // valoarea din dreapta a acestui nod este valoarea din stanga + 1
    $right = $left+1;
    // obtine toti copiii acestui nod
    $result = mysql_query('SELECT title FROM tree '.'WHERE parent=&quot;'.$parent.'&quot;;');
    while ($row = mysql_fetch_array($result))
        {
        // executarea recursiva a acestei functii pt fiecare copil al acestui nod
        // $right este valoarea dreapta curenta, care este incrementata de functia rebuild_tree()
        $right = rebuild_tree($row['title'], $right);
        }
    // am obtinut valoarea din stanga, si acum ca am procesat
    // copiii acestui nod stim si valoarea din dreapta
    mysql_query('UPDATE tree SET lft='.$left.', rgt='.$right.' WHERE title=&quot;'.$parent.'&quot;;');
    // returneaza valoarea din dreapta a acestui nod + 1
    return $right+1;
    }
</pre>
<p>ceasta este o funcţie recursivă. Ar trebui s-o porniţi cu</p>
<p><em>rebuild_tree(&#8216;FOOD&#8217;,1); </em></p>
<p>atunci funcţia restabileşte toţi copiii nodului &#8220;Food&#8221;.<br />
Dacă nu există copii, ea stabileşte valorile din stânga şi din dreapta  ale acestui nod. Valoarea din stânga este dată, 1, iar valoarea din  dreapta este valoarea din stânga plus 1. Dacă există copii, această  funcţie se repetă şi ultima valoare din dreapta este restabilită.  Această valoare este folosită atunci ca valoare din dreapta a nodului  &#8220;Food&#8221;.</p>
<p>Recursivitatea face ca această funcţie să fie, prin complexitatea ei,  destul de greu de înţeles. Totuşi, ea ajunge la acelaşi rezultat la care  am ajuns noi manual la începutul acestui capitol. Ea merge în jurul  arborelui, adăugând câte un nod pentru fiecare nod pe care îl vede. După  ce aţi pus în aplicare această funcţie, veţi vedea că valorile din  stânga şi din dreapta rămân aceleaşi (o verificare rapidă, valoarea din  dreapta a nodului rădăcină ar trebui să fie egală cu de două ori numărul  nodurilor).</p>
<p><strong>Adăugarea unui nod </strong></p>
<p>Cum adăugăm un nod la arbore? Există două abordări: puteţi păstra  coloana părinte în tabelul dvs şi doar să porniţi din nou funcţia <em>rebuild_tree()</em> – o funcţie simplă dar nu aşa de elegantă; sau puteţi reactualiza  valorile din stânga şi din dreapta ale tuturor nodurilor în partea  dreaptă a fiecărui nod nou.</p>
<p>Prima opţiune este simplă. Folosiţi metoda listei adiacente pentru  reactualizare şi algoritmul parcurgerii arborelui cu preordine  modificată pentru restabilire. Dacă vreţi să adăugaţi un nou nod,  adăugaţi-l la tabel şi setaţi coloana părinte. Apoi, nu vă rămâne decât  să reporniţi funcţia <em>rebuild_tree()</em>. Această opţiune este uşoară, dar nu foarte eficientă cu arbori mari.</p>
<p>Cea de-a doua modalitate de a adăuga şi şterge noduri constă în  reactualizarea valorilor din stânga şi din dreapta ale tuturor nodurilor  în partea dreaptă a noului nod. Să ne uităm la un exemplu. Vrem să  adăugăm un nou tip de fruct, o &#8220;<em>Strawberry</em>&#8220;, ca ultim nod şi copil al  &#8220;<em>Red</em>&#8220;. Mai întâi, va trebui să facem puţin loc. Valoarea &#8211; dreapta de la  &#8220;<em>Red</em>&#8221; ar trebui schimbată din 6 în 8, iar nodul 7-10 &#8220;<em>Yellow</em>&#8221; ar trebui  schimbat în 9-12 etc. Reactualizarea nodului &#8220;<em>Red</em>&#8221; înseamnă că va  trebui să adăugăm 2 la toate valorile din stanga şi din dreapta mai mari  decât 5.<br />
Vom folosi interogarea:</p>
<blockquote><p><em>UPDATE tree SET rgt=rgt+2 WHERE rgt&gt;5;<br />
UPDATE tree SET lft=lft+2 WHERE lft&gt;5;</em></p></blockquote>
<p>Acum putem adăuga un nou nod &#8220;<em>Strawberry</em>&#8221; pentru a umple noul spaţiu. Acest nod are valoarea &#8211; stânga 6 şi valoarea &#8211; dreapta 7.</p>
<blockquote><p><em>INSERT INTO tree SET lft=6, rgt=7, title=&#8217;Strawberry&#8217;;</em></p></blockquote>
<p>Dacă pornim funcţia noastră <em>display_tree();</em>, vom vedea că noul nostru nod &#8220;<em>Strawberry</em>&#8221; a fost introdus cu succes în arbore:</p>
<blockquote>
<pre>Food
  Fruit
    Red
      Cherry
      Strawberry
    Yellow
      Banana
  Meat
    Beef
    Pork</pre>
</blockquote>
<p><strong>Dezavantaje</strong></p>
<p>În primul rând, algoritmul parcurgerii arborelui cu preordine  modificată pare greu de înţeles. Este cu siguranţă mai greu decât metoda  listei adiacente. Totuşi, odată ce v-aţi obişnuit cu proprietăţile  valorilor din stânga şi din dreapta, este evident că puteţi face cu  această tehnică aproape tot ce făceaţi cu metoda listei adiacente şi că  algoritmul traversal al arborelui cu preordine modificată este mult mai  rapid. Reactualizarea arborelui impune mai multe investigaţii, ceea ce  durează mai mult, dar restabilirea nodurilor se realizează cu o singură  interogare.</p>
<p><strong>Concluzie</strong></p>
<p>Acum v-aţi familiarizat cu ambele metode de stocare a arborilor într-o  bază de date. Deşi prefer oarecum parcurgerea arborelui cu preordine  modificată, în cazul dvs. metoda listei adiacente ar putea fi mai bună.  Vă las să judecaţi singuri.</p>
<p><strong>Lecturi suplimentare </strong></p>
<p>Mai multe despre Arbori în SQL de specialistul în baze de date Joe Celko:<br />
<a href="http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html" target="_blank">http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html</a></p>
<p>Alte două metode pentru a opera cu datele ierarhice:<br />
<a href="http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html" target="_blank">http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html</a></p>
<p>Xindice, baza de date XLM nativă:<br />
<a href="http://xml.apache.org/xindice/" target="_blank">http://xml.apache.org/xindice/</a></p>
<p>O explicaţie a recursivităţii:<br />
<a href="http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html" target="_blank">http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html</a></p>
<h1><strong>Sursa</strong>:<a href="http://articles.sitepoint.com/print/hierarchical-data-database" target="_blank">aici</a></h1>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/11/02/stocare-ierarhica-a-datelor-intr-o-baza-de-date/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cum sa invat programarea?</title>
		<link>http://it-nolimit.com/2010/10/25/cum-sa-invat-programarea/</link>
		<comments>http://it-nolimit.com/2010/10/25/cum-sa-invat-programarea/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 20:05:23 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[Altele]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=248</guid>
		<description><![CDATA[Zilele acestea am primit asa o intrebare Cum sa invat programarea?(eu ma refer la domeniul WEB). De la ce sa incep? da-mi niste carti, exemple &#8230; ceva ceva de la ce sa incep. Hai sa incepem de la inceput. Stii elementele de baza HTML/CSS ? Atunci incepe de la ele. Eu am vazut o pagina [...]]]></description>
			<content:encoded><![CDATA[<p>Zilele acestea am primit asa o intrebare <strong>Cum sa invat programarea?</strong>(eu ma refer la domeniul WEB). De la ce sa incep? da-mi niste carti, exemple &#8230; ceva ceva de la ce sa incep.</p>
<p>Hai sa incepem de la inceput. Stii elementele de baza <em>HTML/CSS ?</em> Atunci incepe de la ele.<span id="more-248"></span></p>
<p>Eu am vazut o pagina WEB am salvat pagina si am zis: <em>Da eu ce nu pot sa fac asa ceva ?Daca altii au facut inseamna ca este posibil si pentru mine. </em>De aici rezulta ca in primul rind este <strong>DORINTA.</strong></p>
<p>In primul rind propuneti un proiect de exemplu un CMS. Desigur o sa zici ca este plin internetul de ele si sunt open-source, dar cite din ele sunt facut de tine. Pentru a face un CMS de la zero ai nevoie de cunostinte tot ce tine de web.   Vreau sa spun ca numai prin munca si efort vei avea rezultate. Nu are rost sa citesti carti care sunt intinse pe sute de pagini. Eu am invat in felul urmator. Am vazut ceva am zis: Cum este facut ? hai sa incer sa fac si eu. Si asa a inceput cunostintele.</p>
<p>Ar fi bine totusi sa inveti citeva CMS-uri cum ar fi Joomla, WordPress, Drupal. Iti pui intrebarea DE CE? Pentru ca sunt clienti care au auzit de aceste CMS-uri si doresc sa fie facut pe ele &#8230;</p>
<p>Dupa ce ati capatat cunostinte pentru rezolvarea unor probleme standart, nu stati locului cautati probleme mai greu de rezolvat.  Sa fii la curent cu tot ce este nou in domeniul WEB. Foloseste un feed reader pentru  a stii tot ce se misca in domeniul tau.</p>
<p>SUCCES!!!</p>
<p><strong>P.S. </strong><em>Nu toate mustele fac miere</em></p>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/10/25/cum-sa-invat-programarea/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ce Editor PHP sa folosesc ?</title>
		<link>http://it-nolimit.com/2010/10/09/ce-editor-php-sa-folosesc/</link>
		<comments>http://it-nolimit.com/2010/10/09/ce-editor-php-sa-folosesc/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 10:55:24 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[Altele]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=228</guid>
		<description><![CDATA[De mult timp imi pun intrebarea  ce Editor PHP sa folosesc. Care este cel mai universal? Asa ca o sa incep fac o analiza la o serie de Editore. 1.Dreamweaver CS5 Ce-mi place: 1. &#8220;live view&#8221; &#8211; poti vedea in timp real modificarile facute de tine 2.BrowserLab &#8211; poti  testa site-ul tau in diferite rezolutii [...]]]></description>
			<content:encoded><![CDATA[<p>De mult timp imi pun intrebarea  ce Editor PHP sa folosesc. Care este cel mai universal?</p>
<p>Asa ca o sa incep fac o analiza la o serie de Editore.</p>
<blockquote><p><strong>1.Dreamweaver CS5</strong></p></blockquote>
<p>Ce-mi place:</p>
<p>1. &#8220;live view&#8221; &#8211; poti vedea in timp real modificarile facute de tine</p>
<p>2.BrowserLab &#8211; poti  testa site-ul tau in diferite rezolutii si browsere</p>
<p>3.Inspectia codului CSS.<span id="more-228"></span></p>
<p>Ce nu-mi place:</p>
<p>1. Nu pot sa pun teme pentru sintaxa. De exemplu vreau pentru php sau CSS. Trebuie pentru fiecare imparte eu sa fac si nu le pot exporta ca si altii sa le foloseaca.</p>
<p>2. Nu are expand/collapse la div-uri. Cum este la Eclipse &#8230;.</p>
<p>3.Nu are autocomplete la functiile de tine.</p>
<p style="text-align: left;">4.Cind lucrezi in regim <strong>Split</strong> se desparte codul / design pe verticala.<a href="http://it-nolimit.com/wp-content/uploads/2010/10/split.jpg"><img class="aligncenter size-full wp-image-232" title="split" src="http://it-nolimit.com/wp-content/uploads/2010/10/split.jpg" alt="" width="668" height="197" border="0" /></a></p>
<p>Pentru monitoarele <strong>wide</strong> este bine, dar pentru standarte de exemplu ca la mine ma deranjeaza, macar sa fie undeva din optiune de schimbat. (Eu nu am gasesc. Poate gasiti voi. ). Versiunele vechi era pe orizontal.</p>
<p>Si nu in ultimul rind este cu bani <img src='http://it-nolimit.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p><strong>2Eclipse PHP</strong></p></blockquote>
<p>Ce-mi place:<br />
1.Este gratuit</p>
<p>2.Are expand/collapse la div-uri</p>
<p>3.Autocomplete la functiile tale, chiar si titind apasat tasta CTRL + Click  se deschide fisierul unde este functia. (un avataj foarte mare)</p>
<p>Ce nu-mi place :</p>
<p>1.Nu are implicit autocomplete la CodeIgniter,  se poate de pus, dar oricum nu lucreaza suta la suta.</p>
<blockquote><p><strong>3. Php Designer</strong><br />
<strong><br />
</strong>
</p></blockquote>
<p>Ce-mi place:</p>
<p>1.Are implicit autocomplete la CodeIgniter</p>
<p>2.Theme pentru sintaxa, Import / Export</p>
<p>Ce nu-mi place:</p>
<p>1.Nu are exapand la div-uri</p>
<p>2.Nu este gratuit</p>
<p>Si mai sunt o multime de PHP editore</p>
<p>Apatana Studio, Zend Studio, Net Beans. NotePad++. Toate aceasta sunt gratuite.</p>
<p>Eu ma folosesc de phpDesigner(pentru CodeIgniter) si Apta Studio pentru ca are aceleasi plusuri ca la Eclipse.</p>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/10/09/ce-editor-php-sa-folosesc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Framework-ul CodeIgniter</title>
		<link>http://it-nolimit.com/2010/08/28/framework-ul-codeigniter/</link>
		<comments>http://it-nolimit.com/2010/08/28/framework-ul-codeigniter/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 10:03:22 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[codeigniter]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=198</guid>
		<description><![CDATA[1. Ce este un Framework PHP? 2. Ce este CodeIgniter? 3. Ce este MVC ? 4. De ce CodeIgniter? Ce este un Framework PHP? Mai intii de toate, ce este PHP? PHP (acronim recursiv pentru PHP: Hypertext Preprocessor) este un limbaj de scripting de uz general, cu cod-sursă deschis (open source), utilizat pe scară largă, [...]]]></description>
			<content:encoded><![CDATA[<p>1. Ce este un Framework PHP?</p>
<p>2. Ce este CodeIgniter?</p>
<p>3. Ce este MVC ?</p>
<p>4. De ce CodeIgniter?</p>
<p><span id="more-198"></span></p>
<blockquote><p><strong>Ce este un Framework PHP?</strong></p></blockquote>
<p>Mai intii de toate, ce este PHP? <acronym title="PHP: Hypertext Preprocessor">PHP</acronym> (acronim recursiv pentru <em>PHP: Hypertext     Preprocessor</em>) este un limbaj de scripting de uz general, cu cod-sursă     deschis (open source), utilizat pe scară largă, și care este potrivit în     special pentru dezvoltarea aplicațiilor web și poate fi integrat în HTML.</p>
<p>Un Framework PHP este o colectie de metode si clase pre-scrise, care sunt deja securizate, optimizate si bine documentate si sunt gata de utilizare.</p>
<blockquote><p><strong>Ce este CodeIgniter?</strong></p></blockquote>
<p>Este un Framework PHP care lucreza pe PHP4 si PHP5.  El ofera un set bogat de librarii ceea ce ofera posibilitatea de a crea cele mai frecvente sarcini intilnite. Se poate de creat foarte repede aplicatii mici si mijlocii. El foloseste tiparul <strong>MVC</strong>.</p>
<blockquote><p><strong>Ce este MVC?</strong></p></blockquote>
<p>MVC, sau Model-View-Controller este un sablon arhitectural folosit in industria de software development(inclusiv si web development). Aceasta modalitate de lucru reuseste cu succes izolarea partii logice de interfata proiectului, rezultind in aplicatii extrem de usor de modificat. In MVC, modelul reprezinta informatia (datele) de care are nevoie aplicatia, viewerul corespunde cu elemente de interfata iar controller-ul reprezinta sistemul comunicativ si decizional ce proceseaza datele informationale, facind legatura intre model si view.</p>
<p><a href="http://it-nolimit.com/wp-content/uploads/2010/08/MVC.jpg"><img class="aligncenter size-full wp-image-205" title="MVC" src="http://it-nolimit.com/wp-content/uploads/2010/08/MVC.jpg" border="0" alt="" width="500" height="400" /></a></p>
<p><strong>Modelul </strong>reprezinta partea de hard-programming, partea logica a aplicatiei. El are in responsabilitate actiunile si operatiile asupra datelor, autentificarea utilizatorilor, integrarea diverselor clase ce permit procesarea informatiilor din diverse baze de date.</p>
<p><strong>View</strong>-ul se ocupa de afisarea datelor, practic  aceasta parte a programului va avea grija de cum vede end-userul  informatia procesata de controller. O data ce functiile sunt executate  de model, viewului ii sunt oferite rezultatele, iar acesta le va trimite  catre browser. In general viewul este o mini-aplicatie ce ajuta la  randarea unor informatii, avand la baza diverse template-uri.</p>
<p><strong>Controller</strong>-ul reprezinta creierul aplicatiei.  Aceasta face legatura intre model si view, intre actiunile userului si  partea decizionala a aplicatiei. In functie de nevoile utilizatorului,  controllerul apeleaza diverse functii definite special pentru sectiunea  de site in care se afla userul. Functia se va folosi de model pentru a  prelucra (extrage, actualiza) datele, dupa care informatiile noi vor fi  trimise catre view, ce le va afisa apoi prin template-uri.</p>
<blockquote><p><strong>De ce CodeIgniter?</strong></p></blockquote>
<p>Mai intii de toate are structura <strong>MVC</strong>.</p>
<p>Este foarte usor de invatat, are o documentatie foarte bogata (ceea ce face mai usor de invat). Are o<a href="httphttp://codeigniter.com/forums/" target="_blank"> comunitate</a> puternica si activa de useri.</p>
<p>Foarte putin ocupa fata de celelalte framework-uri <strong>2.1mb </strong>(asta tot cu documentatie). Faceti comparatie cu celelalte:</p>
<p>1.    <strong>Zend Framework 1.10.2 Full – 24 MB</strong></p>
<p>2.    <strong>symfony 1.4.3 – 5.1 MB</strong></p>
<p>3.    <strong>CakePHP 1.2.6 – 4.5 MB</strong></p>
<p>CodeIgniter consuma foarte putine resurse in comparatie cu alte  		  framework-uri. Librariile aditionale, necesare anumitor sarcini, sunt incarcate in mod dinamic,<strong> doar la cerere</strong>.</p>
<p>Cu siguranta cel mai rapid framework PHP. Un motiv important pentru 		  viteza foarte buna il reprezinta consumul mic de resurse.</p>
<p>Este foarte usor de instalat si de configurat, dar asta poate in alt articol .</p>
<p><strong>Surse: </strong> <a href="http://codeigniter.com">CodeIgniter.com</a></p>
<p style="padding-left: 60px;"><a href="http://www.worldit.info">http://www.worldit.info</a></p>
<p style="padding-left: 60px;"><a href="http://www.thetechlabs.com">http://www.thetechlabs.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/08/28/framework-ul-codeigniter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Magazin Virtual (Librarie Online) &#8211; Use Case Diagram</title>
		<link>http://it-nolimit.com/2010/05/04/magazin-virtual-librarie-online-use-case-diagram/</link>
		<comments>http://it-nolimit.com/2010/05/04/magazin-virtual-librarie-online-use-case-diagram/#comments</comments>
		<pubDate>Tue, 04 May 2010 17:22:44 +0000</pubDate>
		<dc:creator>nolimit</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://it-nolimit.com/?p=128</guid>
		<description><![CDATA[Pentru a arata cum va fi construit Magazinul voi folosi UML. Diagramele le voi face in programul Enterprise Architect. Il puteti descarca de aici pentru 30zile. Ne punem intrebarea ce este UML? UML este un limbaj vizual de modelare, el nu este inca un limbaj vizual de programare, deoarece nu dispune de intreg sprijinul semantic [...]]]></description>
			<content:encoded><![CDATA[<p>Pentru a arata cum va fi construit Magazinul voi folosi UML. Diagramele le voi face in programul <em>Enterprise Architect</em>. Il puteti descarca de <a href="http://www.sparxsystems.com/products/ea/trial.html" target="_blank">aici</a> pentru 30zile.</p>
<p style="padding-left: 30px;"><strong>Ne punem intrebarea ce este UML?</strong></p>
<p><strong>UML</strong> este un limbaj vizual de modelare, el nu este inca un limbaj vizual de programare, deoarece nu dispune de intreg sprijinul semantic si vizual pentru a inlocui limbajele de programare. Limbajul este destinat vizualizarii, specificarii, construirii si documentarii sistemelor de aplicatii, dar are limitari in ceea ce priveste generarea codului. UML reuneste cele mai bune tehnici si practici din domeniul ingineriei programarii, care si-au dovedit eficienta in construirea sistemelor complexe.<span id="more-128"></span></p>
<p>Pentru elaborarea unui sistem este un curs intreg. Acest curs eu il am la UTM si se numeste <em><strong>Ingineria programarii</strong></em></p>
<p>Mai mult despre acest curs puteti sa cititi aici <a href="http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm">Ingineria programarii</a></p>
<p>Proiectul consta din elaborarea a 7 lucrari de laborator. De aceea voi incerca si eu sa fac proietul in baza acestor 7 lucrari de laborator(doar la nivel de documentare).  Dar mai tirziu voi face si la nivel de programare.</p>
<p><strong>Diagrama cazurilor de utilizare (Use Case Diagram).</strong></p>
<p>In doua cuvinte o sa spun despre Use Case. Elementele componente ale unei diagrame use case sunt:</p>
<p>-<em>use case</em>-uri;</p>
<p>-<em>actori</em>;</p>
<p>-<em>relatiile</em> care stabilesc intre use case-uri, intre actori si intre use case-uri si actori</p>
<p>Mai multe detalii gasiti <a href="http://it-nolimit.com/wp-content/uploads/2010/05/L1_diagrame_use_case.pdf">L1_diagrame_use_case</a></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<div class="wp-caption aligncenter" style="width: 580px"><img class="  " title="usecase user" src="http://it-nolimit.com/wp-content/uploads/2010/05/use_case_ecommerce_user.png" alt="" width="570" height="500" /><p class="wp-caption-text">Use Case pentru Utilizator</p></div>
<div class="wp-caption aligncenter" style="width: 570px"><img title="use case administrator" src="http://it-nolimit.com/wp-content/uploads/2010/05/Use-Case-Administrator.png" alt="" width="560" height="512" /><p class="wp-caption-text">Use case pentru administrator</p></div>
<h2>P.S. Pe parcurs vor aparea modificari. Nu este diagrama finala.</h2>
]]></content:encoded>
			<wfw:commentRss>http://it-nolimit.com/2010/05/04/magazin-virtual-librarie-online-use-case-diagram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

