<?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>Prootime &#187; Html</title>
	<atom:link href="http://prootime.ru/category/html/feed" rel="self" type="application/rss+xml" />
	<link>http://prootime.ru</link>
	<description>Блог человека увлекающегося Javascript, PHP, Css, Jquery ...</description>
	<lastBuildDate>Fri, 06 Jan 2012 18:22:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Как открывать перетащенные файлы с помощю HTML5</title>
		<link>http://prootime.ru/html-dargdrop2</link>
		<comments>http://prootime.ru/html-dargdrop2#comments</comments>
		<pubDate>Fri, 30 Dec 2011 21:22:39 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=1040</guid>
		<description><![CDATA[В предыдущей статье было расказанно, как использовать HTML5 File API, как получать информацию о перетащенных файлах. Сегодня попытаемся загружать фалы со стороны клента, то есть выводить их, если это допустим картинка. Зачем открывать локальные файлы через JavaScript? Загрузка файлов через обычные HTML формы очень неудобна. Люди часто используют его допустим при передаче нескольких мегобайт фотографий [...]]]></description>
			<content:encoded><![CDATA[<p>В предыдущей <a href="/html5-dragdrop">статье</a> было расказанно, как использовать <em>HTML5</em> <em>File API</em>, как получать информацию о перетащенных файлах. Сегодня попытаемся загружать фалы со стороны клента, то есть выводить их, если это допустим картинка.</p>
<p><span id="more-1040"></span></p>
<h2>Зачем открывать локальные файлы через <em>JavaScript</em>?</h2>
<p>Загрузка файлов через обычные <em>HTML</em> формы очень неудобна. Люди часто используют его допустим при передаче нескольких мегобайт фотографий со своей камеры на сервер. Если предположить что они знают местоположение фотографий, то загрузка может занять несколько минут, но это только если все будет хорошо и форматы и разамеры будут подходящими, а что если нет? До сих пор разработчикам приходилось пологаться на <em>Flash</em> или другие плагины для обеспечение удобства. Предварительная обработка с помощю <em>Javascript</em>&#8216;a имеет ряд преимуществ:
<ul>
<li>Локальная обработка файлов происходит на много быстрей.</li>
<li>Файлы могут быть проанализированны, чтобы убедиться, что они в правильном формате и ниже, орпеделенного размера.</li>
<li>Такие файлы как картинки могут быть просмотренны перед загрузкой.</li>
<li>Можно обрезать или изменить размер изображения перед загрузкой с помощю <em>canvas</em>.</li>
</ul>
<h2>Объект FileReader.</h2>
<p><em>FileReader</em> является частью <em>W3C File API</em> и предостовляет четыре метода для асинхронной загрузки данных из ссылки к объекту <em>File</em>.</p>
<ul>
<li><em>.readAsText(File f, [кодировка])</em> &#8211; считывает файл как строку. По умолчанию в кодировке <em>UTF-8</em>, но можно передать и другой формат.</li>
<li><em>.readAsDataURL(File f)</em> &#8211; как закодированный <em>URL</em>.</li>
<li><em>.readAsBinaryString(File f)</em> &#8211; как двоичный код.</li>
<li><em>.readAsArrayBuffer(File f)</em> &#8211; как объект <em>ArrayBuffer</em>.</li>
</ul>
<p>В следующем коде будем использовать превые два метода для загрузки и отображения текста и картинок.</p>
<h2>Асинхронное открытие файлов с помощю <em>Javascipt</em>.</h2>
<p>Вот наша исхлдная функция ParseFile() в который предаются выбранные или перетащенные на элемент <em>#filedrag</em> файлы.</p>
<pre class="prettyprint">
function ParseFile(file) {

	Output(
		"&lt;p&gt;Информация о файле: &lt;strong&gt;" + file.name +
		"&lt;/strong&gt; тип: &lt;strong&gt;" + file.type +
		"&lt;/strong&gt; размер: &lt;strong&gt;" + file.size +
		"&lt;/strong&gt; байт&lt;/p&gt;"
	);

}
</pre>
<p>После обновления статуса, мы проверяем является ли переданный файл текстовым <em>(text/plain, text/html, text/css, и т.д.)</em>, загружаем его используя метод FileReader.readAsText() и выводим результат:</p>
<pre class="prettyprint">
// выводим текст
if (file.type.indexOf("text") == 0) {
	var reader = new FileReader();
	reader.onload = function(e) {
		Output(
			"&lt;p>&lt;strong&gt;" + file.name + ":&lt;/strong>&lt;/p&gt;&lt;pre&gt;" +
			e.target.result.replace(/&lt;/g, "&lt;").replace(/&gt;/g, "&gt;") +
			"&lt;/pre&gt;"
		);
	}
	reader.readAsText(file);
}
</pre>
<p>Точно также мы можем проверить, если у нас файл является картинкой <em>(image/jpeg, image/gif, image/png и т.д.)</em> загрузить его как data URL используя метод FileReader.readAsDataURL() и передать это все дело как src атрибут для элемента <em>img</em>:</p>
<pre class="prettyprint">
// выводим картинку
if (file.type.indexOf("image") == 0) {
	var reader = new FileReader();
	reader.onload = function(e) {
		Output(
			"&lt;p&gt;&lt;strong&gt;" + file.name + ":&lt;/strong&gt;&lt;br /&gt;" +
			'&lt;img src="' + e.target.result + '" /&gt;&lt;/p&gt;'
		);
	}
	reader.readAsDataURL(file);
}
</pre>
<p class="hight1"><a href="http://purefinance.ru/prodazha-gotovich-firm" title="продажа фирм">Продажа фирм</a></p>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag2/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag2/html5drag2.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/html-dargdrop2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Drag&amp;Drop</title>
		<link>http://prootime.ru/html5-dragdrop</link>
		<comments>http://prootime.ru/html5-dragdrop#comments</comments>
		<pubDate>Sat, 01 Oct 2011 21:12:51 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=993</guid>
		<description><![CDATA[Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей HTML5. Я опишу как: сделать возможным перетаксивание файлов на элемент web страницы. анализировать перенесенные файлы с помошью JavaScript. загружать и парсить файлы со стороны клиента. асинхронно загружать файлы на сервер используя XMLHttpRequest2 показать прогресс бар пока идет загрузка файлов В этой статье расмотрим [...]]]></description>
			<content:encoded><![CDATA[<p>Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей <em>HTML5</em>.<span id="more-993"></span> Я опишу как:</p>
<ol>
<li>сделать возможным перетаксивание файлов на элемент web страницы.</li>
<li>анализировать перенесенные файлы с помошью <em>JavaScript</em>.</li>
<li>загружать и парсить файлы со стороны клиента.</li>
<li>асинхронно загружать файлы на сервер используя <em>XMLHttpRequest2</em></li>
<li>показать прогресс бар пока идет загрузка файлов</li>
</ol>
<p>В этой статье расмотрим первые три пункта. В итоге получим примерно такую форму:</p>
<div class="image"><img src="http://prootime.ru/wp-content/uploads/2011/10/drag1.png" alt="html форма drag&amp;drop " title="drag1" width="538" height="201" class="aligncenter size-full wp-image-1019" /></div>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<h2>Поддержка браузеров</h2>
<p>Прежде чем начать, нужно отметить что поддержка перетаскивания файлов браузерами будет неравномерной. Код работает в современных браузерах, но вполне возможно API будет меняться.</p>
<ul>
<li>Последние версии <em>Firefox</em> и <em>Chrome</em> поддерживают все функции и превосходно работают с перетаскиванием.</li>
<li>Опера может парсить файлы в <em>JavaScript</em>, но не поддерживает перетаскивание файлов и загрузку с помощю <em>XMLHttpRequuest2</em></li>
<li>IE и десктоповые версии Safari не поддерживают ничего из нужного API.</li>
</ul>
<h2>HTML и CSS</h2>
<p>Далее идет код стандартной формы с инпутом типа файл. Единственное <em>HTML5</em> нововведение в форме это атрибут <em>&#8220;multiple&#8221;</em> который позволяет пользователю выбирать любое количество файлов.</p>
<p>Со стороны сервера загрузка файлов будет проводиться средствани <em>PHP</em>, но независимо от того какую технологию вы используете на сервере <em>JavaScript</em> код останется тем же. Скрытое поле <em>MAX_FILE_SIZE</em> определяет <em>300,000 байт</em>, размер будем проверять и на стороне клиента и на стороне сервера, чтобы предотвротить загрузку огромного размера файлов.</p>
<pre class="prettyprint">
&lt;form id="upload" action="upload.php" method="POST" enctype="multipart/form-data"&gt;
	&lt;fieldset&gt;
		&lt;legend&gt;HTML Загрузка Файлов&lt;/legend&gt;
		&lt;input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" /&gt;
		&lt;div&gt;
			&lt;label for="fileselect"&gt;Выберите файлы для загрузки:&lt;/label&gt;
			&lt;input type="file" id="fileselect" name="fileselect[]" multiple="multiple" /&gt;
			&lt;div id="filedrag" &gt;Или перетащите их сюда&lt;/div&gt;
		&lt;/div&gt;
		&lt;div id="submitbutton"&gt;
			&lt;button type="submit"&gt;Загрузить файлы&lt;/button&gt;
		&lt;/div&gt;
	&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>Элемент <em>#filedrag</em> будет использоваться как облясть в которую необходимо пренести файлы. Элемент в CSS стилях скрыт, но он будет отображаться средствами <em>JavaScript</em> если перетаскивание поддерживается браузером:</p>
<pre class="prettyprint">
*{
     margin: 0px;
}
body{
     background: none repeat scroll 0% 0% #EFEFEF;
}
.wrapper{
     background: none repeat scroll 0% 0% #FFFFFF;
     margin: 150px auto;
     border: 2px solid #3DA8BA;
     padding: 10px;
     width: 500px;
}
fieldset{
	border:2px solid #efefef;
}
#filedrag{
	border-radius: 7px 7px 7px 7px;
	border: 2px dashed #3DA8BA;
	color: #555555;
	cursor: default;
	display: none;
	margin: 1em 0pt;
	padding: 1em 0pt;
	text-align: center;
	background:#f9f9f9;
}
#filedrag.hover {
	border-style: solid;
	box-shadow: 0pt 3px 4px #dbdbdb inset;
}
#messages{
	margin-top:10px;
	padding:5px;
	font-size:14px;
}
#messages p{
	border-bottom:1px solid #efefef;
	margin-bottom:5px;
}
</pre>
<p>Для элемента также определенн класс <em>.hover</em> который меняет стили когдо пользователь перетаксивает файлы на элемент. Браузеры не поддерживают стили <em>:hover</em> в этой ситуации, но мы можем добовлять класс спомощю Javascript когда происходит нужное событие.</p>
<h2>File API</h2>
<p><a href="http://www.w3.org/TR/file-upload/" target="_blank">W3C File API</a> предостовляет несколько объектов которые мы будем использовать:</p>
<ul>
<li><strong>FileList</strong>: предостовляет массив выбранных файлов.</li>
<li><strong>File</strong>: предстовляет единственный файл.</li>
<li><strong>FileReader</strong>: интерфейс который позволяет нам считать информацию о файле со стороны клиента и использовать в <em>JavaScript</em>.</li>
</ul>
<h2>JavaScript события</h2>
<p>Пришло время писать <em>JavaScript</em> код. Мы не будем использовать <em>JavaScript</em> фреймфроков, поэтому напишем пару фуннкций для сохронения нашего времени. Это функция которая достает нужный элемент по ид и функция выводящая сообщения</p>
<pre class="prettyprint">
/* getElementById */
function $id(id) {
	return document.getElementById(id);
}

/* вывод сообщений */
function Output(msg) {
	var m       = $id("messages");
	m.innerHTML = msg + m.innerHTML;
}
</pre>
<p>Далее проверим поддержку <em>File API</em> и вызовем функцию инициализации <em>Init()</em>:</p>
<pre class="prettyprint">
/* проверка поддержки API */
if (window.File &#038;&#038; window.FileList &#038;&#038; window.FileReader){
	Init();
}
/* инициализация */
function Init(){

	var fileselect   = $id("fileselect"),
		filedrag     = $id("filedrag"),
		submitbutton = $id("submitbutton");

	/* выбор файла */
	fileselect.addEventListener("change", FileSelectHandler, false);

	/* проверка поддержки XHR2 */
	var xhr = new XMLHttpRequest();
	if (xhr.upload){

		/* сброс файла */
		filedrag.addEventListener("dragover", FileDragHover, false);
		filedrag.addEventListener("dragleave", FileDragHover, false);
		filedrag.addEventListener("drop", FileSelectHandler, false);
		filedrag.style.display = "block";

		/* удаление кнопки сабмитта */
		submitbutton.style.display = "none";
	}

}
</pre>
<p>Функция <em>Init():</em></p>
<ol>
<li>Устонавливает обработчик события к изменению инпута типа файл.</li>
<li>Отоброжает элемент <em>#filedrag</em>.</li>
<li>Устанавливает обработчики событий <em>&#8220;dragover&#8221; и &#8220;dragleave&#8221;</em> для динамического изменения стилей элемента #filedrag.</li>
<li>Устанавливает обработчик события &#8220;drop&#8221; для элемента <em>#filedrag</em>.</li>
<li>Скрывает кнопку сабмитта формы &#8211; он пока не требуется, так как мы будем просто анализировать файлы.</li>
</ol>
<p>Также вы можете скрыть инпут типа файл, если перетаскивание поддерживается. Но я не буду этого делать чтобы пользователь мог воспользоваться удобным ему вариантом.</p>
<p>Проверка поддержки метода XMLHttpRequest.upload предотврощает проблемы с Оперой. Браузер поддерживает объекты <em>File, FileList и FileReader</em>, но не поддерживает перетаскивание файлов или <em>XMLHttpRequest2</em>. Поэтому мы отоброжаем информацию о файле, но оставляем скрытым элемент <em>#filedrag</em>.</p>
<h2>Изменение стилей при переносе</h2>
<p>Мало кто испытал перетаскивание файлов в браузер. На самом деле, многие опытные интернет пользователи считают это невозможным. Поэтому написали внутри элемента &#8220;перетащите сюда файлы&#8221;. А следующая функция будет добвлять класс к элементу, когда файл уже будет находится непосредственно над элементом, тем самым будут меняться стили.</p>
<pre class="prettyprint">
// Файл над нужной областью
function FileDragHover(e){
	e.stopPropagation();
	e.preventDefault();
	e.target.className = (e.type == "dragover" ? "hover" : "");
}
</pre>
<h2>Анализирование перетащенных или выбранных файлов</h2>
<p>Будем использовать функцию <em>FileSelectHandler()</em> не зависимо от того обин или несколько файлов были выбранны или перетащенны на элемент <em>#filedrag</em>:</p>
<pre class="prettyprint">
// выбор файла
function FileSelectHandler(e){

	FileDragHover(e);

	// проходимся по объекту FileList
	var files = e.target.files || e.dataTransfer.files;

	// парсим все объекты типа File
	for (var i = 0, f; f = files[i]; i++){
		ParseFile(f);
	}

}
</pre>
<p>Функция:</p>
<ol>
<li>Вызываем функцию <em>FileDragHover()</em> чтобы убрать стиля при <em>hover</em> и предотвратить выполнение событий браузера. Это очень важно, так как браузер может попытаться отобразить файл</li>
<li>Проходимся по объекту <em>FileList</em>.</li>
<li>Наконец функция проходит по всем объектам типа <em>File</em> в объекте <em>FileList</em> и передает их как аргумент в функцию <em>ParseFile()</em></li>
</ol>
<pre class="prettyprint">
function ParseFile(file) {
	Output(
		"&lt;p&gt;File information: &lt;strong&gt;" + file.name +
		"&lt;/strong&gt; type: &lt;strong&gt;" + file.type +
		"&lt;/strong&gt; size: &lt;strong&gt;" + file.size +
		"&lt;/strong&gt; bytes&lt;/p&gt;"
	);
}
</pre>
<p>Функция выводит информация используя три основные свойства представленные объектом <em>File</em> только для чтения.</p>
<ul>
<li><b>.name</b>: имя файла (не включая путь к файлу)</li>
<li><b>.type</b>: MIME тип, например: image/jpeg, text/plain, и т.д.</li>
<li><b>.size</b>: размер файла в байтах</li>
</ul>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/html5-dragdrop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery плагин  5Graph</title>
		<link>http://prootime.ru/5graph-jquery-pugin</link>
		<comments>http://prootime.ru/5graph-jquery-pugin#comments</comments>
		<pubDate>Sun, 31 Jul 2011 10:25:10 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=965</guid>
		<description><![CDATA[Последнее время занимался jQuery плагином для построения HTML5 графиков. После чего начал писать для него генератор чтоб людям было удобней пользоваться им, так как плагин очень гибкий и требует очень много обязательных параметров, точнее все параметры обязательны. Поэтому рекомендую использовать генератор, ниже видео с инструкцией, которое также можно найти на странице graph.prootime.ru/howtouse. Видео без звука [...]]]></description>
			<content:encoded><![CDATA[<p>Последнее время занимался jQuery плагином для построения HTML5 графиков. После чего начал писать для него генератор чтоб людям было удобней пользоваться им, так как плагин очень гибкий<span id="more-965"></span> и требует очень много обязательных параметров, точнее все параметры обязательны. Поэтому рекомендую использовать генератор, ниже видео с инструкцией, которое также можно найти на странице <a href="http://graph.prootime.ru/howtouse" target="_blank">graph.prootime.ru/howtouse</a>. Видео без звука придется читать титры:</p>
<div class="video">
<object width="560" height="349"><param name="movie" value="http://www.youtube.com/v/OabSrvnTqh8?version=3&amp;hl=ru_RU"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OabSrvnTqh8?version=3&amp;hl=ru_RU" type="application/x-shockwave-flash" width="560" height="349" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</div>
<p>Плагин позволяет строить только одного типа графики, зато имеет большое количество настроек позволяющие подстраивать под дизайн своего сайта. Также есть возможность построения нескольких графиков одновременно.</p>
<p>
Конечно <em>5Graph</em> уступает другим подобным плагинам по функционалу построению диаграмм и все такое. Это все в дальнейшем будет нарабатываться, сейчас пока хотелось сделать его гибким при настройке дизайна. Ведь все остальные пдагины встречающиеся мне в основном не позволяют этого делать.
</p>
<p>На этом пока все. Пожалуйста остовляйте свои комментарии, высказывайте свое мнение о 5Graph мне очень интересно. Сайт плагина размещен по адресу <a href="http://graph.prootime.ru" target="_blank">graph.prootime.ru</a></p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/5graph-jquery-pugin/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ЕГЭ информатика B8</title>
		<link>http://prootime.ru/ege-informatika-b8</link>
		<comments>http://prootime.ru/ege-informatika-b8#comments</comments>
		<pubDate>Tue, 22 Mar 2011 18:12:42 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=834</guid>
		<description><![CDATA[Мобильное приложение для решения задания B8 ЕГЭ по информатике. Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ. Готовясь к информатике заметил что почти во всех заданиях B8 [...]]]></description>
			<content:encoded><![CDATA[<p>Мобильное приложение для решения задания B8 ЕГЭ по информатике.</p>
<p><span id="more-834"></span></p>
<p>Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ.</p>
<p> Готовясь к информатике заметил что почти во всех заданиях B8 встречается одна и та же по типу задача, в которой обычно требуется найти последовательность букв с какой то позиции по какую то. Пример задания:</p>
<blockquote><p>Строки (цепочки символов латинских букв) создаются по следующему правилу: первая строка состоит из одного символа &#8211; латинской буквы “A”. Каждая из последующих цепочек создается такими действиями: в очередную строку сначала дважды записывается предыдущая строка, затем справа приписывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i &#8211; м шаге пишется “i” &#8211; я буква алфавита).<br />
Вот первые 4 строки созданные по этому правилу:<br />
1) A<br />
2) AAB<br />
3) AABAABC<br />
3) AABAABCAABAABCD<br />
<i>Латинский алфавит (для справки):</i><br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
Запишите шесть символов подряд, стоящие в восьмой строке с 100-го по 105-место (считая слева направо).</p></blockquote>
<p>Встречаются разные варианты этой задачи в некоторых требуется найти количество определенных букв в какой то строке, встречаются еще и с русским алфавитом.</p>
<p>Итак цель написать web приложение которое смогло бы решить все варианты этой задачи и была бы удобна для использования с телефона. Не знаю о чем подумали вы, но я подумал о jQuery Mobile. Почитав немного <a href="http://jquerymobile.com/demos/1.0a3/" target="_blank">документации</a>  написал разметку. Приложение будет состоять из одной страницы в которой будет выводиться форма состоящая из 4х полей это: поле для выбора алфавита, количества строк, начальной позиции и конечной позиции. Стилей писать не придется так как jQuery Mobile так устроен, остается написать разметку</p>
<p>Получилась она вот такой:</p>
<pre class="prettyprint">
   &lt;div data-role="page" data-theme="c"&gt;
       &lt;div data-role="header"&gt;
           &lt;h1&gt;Информатика B8&lt;/h1&gt;
       &lt;/div&gt;
       &lt;div data-role="content"&gt;
           &lt;form action="" method="get"&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="select-choice-1" class="select"&gt;Выберите алфавит:&lt;/label&gt;
                   &lt;select name="lang" id="select-choice-1"&gt;
					   &lt;option value="lt">Латинский&lt;/option&gt;
					   &lt;option value="ru">Русский&lt;/option&gt;
                   &lt;/select&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="line">Количество строк:&lt;/label&gt;
                   &lt;input type="number" name="line" id="line"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="beg_pos"&gt;Начальная позиция:&lt;/label&gt;
                   &lt;input type="number" name="beg_pos" id="beg_pos"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="end_pos">Конечная позиция:&lt;/label&gt;
                   &lt;input type="number" name="end_pos" id="end_pos"&gt;
               &lt;/div&gt;
               &lt;button type="submit" data-theme="b" name="calc" value="calc"&gt;Посчитать&lt;/button&gt;
           &lt;/form&gt;
       &lt;/div&gt;
       &lt;div data-role="footer"&gt;
           &lt;h4&gt;&lt;a href="http:\\prootime.ru"&gt;prootime.ru&lt;/a&gt;&lt;/h4&gt;
       &lt;/div&gt;
   &lt;/div&gt;
</pre>
<p>В header&#8217;е нужно подключить вот эти скрипты:</p>
<pre class="prettyprint">
stylesheet - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css
script - http://code.jquery.com/jquery-1.4.3.min.js
script - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js
</pre>
<p>На вид примерно что то вроде этого:</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/03/infp_ege8.png" alt="" title="infp_ege8" width="300" height="466" class="alignnone size-full wp-image-841" /></p>
<p>Осталось написать PHP код. Он будет очень даже простой, просто поставим на сабмит формы PHP код и будем выполнять алгоритм который был дан в задании:</p>
<pre class="prettyprint">
if(!empty($_REQUEST['calc'])){

   //язык
   $language = $_REQUEST['lang'];

   if($language == 'lt'){

       $arr = range('A','Z');

   }
   else{

       $arr = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

   }

   //номер строки
   $str_num = $_REQUEST['line'];

   //начальная и конечная позицим
   $beg_pos = $_REQUEST['beg_pos'];
   $end_pos = $_REQUEST['end_pos'];

   if($beg_pos > $end_pos){

       echo 'Ошибка! Значения начала отреза больше конеца.';

   }
   else{

       //конечная строка
       $end_str = '';

       for($i = 0; $i <= $str_num-1; $i++){

           $end_str = $end_str.$end_str.$arr[$i];

       }

       echo mb_substr($end_str, $beg_pos-1, $end_pos - $beg_pos + 1, 'utf8');
       echo '<br/>Всего букв - '.strlen($end_str);

       for($i = 0; $i <= $str_num-1; $i++){

           echo '<br/>'.$arr[$i].' - '.mb_substr_count($end_str,$arr[$i], 'utf8');

       }

   }

}</pre>
<p>Единственное на что бы хотел обратить внимание это на функции начинающиеся с <b>mb_</b> это нестандартные функции и требуют модуль <b>mbstring</b> если он не подключен то они конечно не сработают. А вообще выполняют то же самое что эти же функции без <b>mb_</b>. Почему я их использовал, потому что этим функциям можно передать третьим параметром кодировку в которой функция должна работать. А так как нам нужно работать еще и с кирилицей это то что нам нужно.</p>
<div class="demo">
<a href="http://prootime.ru/demos/inf8/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://paste.netsago.org/ru/view/0/dzantiev/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/ege-informatika-b8/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS оформление select</title>
		<link>http://prootime.ru/select-css</link>
		<comments>http://prootime.ru/select-css#comments</comments>
		<pubDate>Sat, 15 Jan 2011 20:35:49 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=761</guid>
		<description><![CDATA[Есть наверное куча плагинов предоставляющие возможность изменения обычных select на необычные, или такие которые хотя бы отображались бы во всех браузерах одинаково. Но нам же это не интересно , сейчас попробуем сделать из обычного селекта необычный т.е. будет выглядеть примерно так: В демке представлено 4 селекта смотрим. ДЕМО ВЕРСИЯпосмотреть в действииСКАЧАТЬскачать на компьютер Вконтакте извините [...]]]></description>
			<content:encoded><![CDATA[<p>Есть наверное куча плагинов предоставляющие возможность изменения обычных select на необычные, или такие которые хотя бы отображались бы во всех браузерах одинаково. Но нам же это не интересно <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , сейчас попробуем сделать из обычного селекта необычный <span id="more-761"></span>т.е. будет выглядеть примерно так:</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/01/select1.png" alt="select css" title="select1" width="205" height="133" class="size-full wp-image-762" /></p>
<p>В демке представлено 4 селекта смотрим.</p>
<p><br/></p>
<div class="demo">
<a href="http://jsfiddle.net/axelru/QBHjY/21/embedded/result/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://jsfiddle.net/axelru/QBHjY/21/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<p><br/></p>
<p>Вконтакте извините я спер у вас оформление и цвета селекта <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Возьмем обычный select с несколькими option примерно вот:</p>
<pre class="prettyprint">
&lt;select id="ourselect1"&gt;
           &lt;option value="eee"&gt;Значение 19&lt;/option&gt;
           &lt;option value="222"&gt;Значение 18&lt;/option&gt;
           &lt;option value="444"&gt;Значение 17&lt;/option&gt;
           &lt;option value="123"&gt;Значение 16&lt;/option&gt;
           &lt;option value="122"&gt;Значение 15&lt;/option&gt;
           &lt;option value="113"&gt;Значение 14&lt;/option&gt;
           &lt;option value="124"&gt;Значение 13&lt;/option&gt;
&lt;/select&gt;
</pre>
<p>Обернем его в div с классом &#8220;sel_wrap&#8221;, в начале которого выстроим структуру нашего селекта дивами. Если представить это все дело на картинке то получится следующая картина:
</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/01/select-structure.png" alt="select-structure" title="select-structure" width="502" height="487" class="size-full wp-image-771" /></p>
<p>А код получится следующим:</p>
<pre class="prettyprint">
&lt;div class="sel_wrap"&gt;
    &lt;div class="sel_imul"&gt;
        &lt;div class="sel_selected"&gt;
            &lt;div class="selected-text"&gt;Значение 19&lt;/div&gt;&lt;div class="sel_arraw"&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="sel_options"&gt;
            &lt;div class="sel_option" value="eee"&gt;Значение 19&lt;/div&gt;
            &lt;div class="sel_option" value="222"&gt;Значение 18&lt;/div&gt;
            &lt;div class="sel_option" value="444"&gt;Значение 17&lt;/div&gt;
            &lt;div class="sel_option" value="123"&gt;Значение 16&lt;/div&gt;
            &lt;div class="sel_option" value="122"&gt;Значение 15&lt;/div&gt;
            &lt;div class="sel_option" value="113"&gt;Значение 14&lt;/div&gt;
            &lt;div class="sel_option" value="124"&gt;Значение 13&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;select id="ourselect1"&gt;
        &lt;option value="eee"&gt;Значение 19&lt;/option&gt;
        &lt;option value="222"&gt;Значение 18&lt;/option&gt;
        &lt;option value="444"&gt;Значение 17&lt;/option&gt;
        &lt;option value="123"&gt;Значение 16&lt;/option&gt;
        &lt;option value="122"&gt;Значение 15&lt;/option&gt;
        &lt;option value="113"&gt;Значение 14&lt;/option&gt;
        &lt;option value="124"&gt;Значение 13&lt;/option&gt;
    &lt;/select&gt;
&lt;/div&gt;
</pre>
</p>
<p>Далее приступим к стилям. Естественно скрываем наш обычный селект, а структуру эмилирующую селект стилизуем как нам хочется:</p>
<pre class="prettyprint">
.sel_wrap{
    background:#efefef;
    margin-bottom:5px;
    padding:7px;
}
.sel_wrap select{
    display:none;
}
.sel_imul{
    width:300px;
}
.sel_imul .sel_selected{
    background:#fff;
    border:1px solid #bbb;
    padding:3px 6px;
    font-size:14px;
    font-family:Times;
    cursor:pointer;
    position:relative;
}
.sel_imul.act .sel_selected{
    background:#efefef;
}
.sel_selected .sel_arraw{
    height:100%;
    width:20px;
    background:url('http://bit.ly/gudLNa') 50% 50% no-repeat;
    position:absolute;
    top:0px;
    right:0px;
}
.sel_imul:hover .sel_selected .sel_arraw{
    background-color:#e0e0e0;
    border-left:1px solid #bbb;
}
.sel_imul.act .sel_selected .sel_arraw{
    background-color:#e0e0e0;
    border-left:1px solid #bbb;
}
.sel_imul .sel_options{
    background:#fff;
    border:1px solid #dbdbdb;
    border-top:none;
    overflow:auto;
    position:absolute;
    width:298px;
    display:none;
    z-index:10;
}
.sel_options .sel_option{
    padding:3px 4px;
    font-size:14px;
    font-family:Times;
    border:1px solid #fff;
    border-right:none;
    border-left:none;
}
.sel_options .sel_option:hover{
    border-color:#dbdbdb;
    cursor:pointer;
}
.sel_options .sel_option.sel_ed{
    background:#dbdbdb;
    border-color:#dbdbdb;
}

/*second variant*/
.sec .sel_imul{
    width:200px;
}
.sec .sel_imul .sel_selected{
    border:1px solid #C0CAD5;
}
.sel_imul.act .sel_selected{
    background:#fff;
}
.sec .sel_imul:hover .sel_selected .sel_arraw{
    background-color:#e1e8ed;
    border-left:1px solid #d2dbe0;
}
.sec .sel_imul.act .sel_selected .sel_arraw{
    background-color:#e1e8ed;
    border-left:1px solid #d2dbe0;
}
.sec .sel_imul .sel_options{
    background:#fff;
    border:1px solid #d2dbe0;
    width:198px;
}
.sec.overf .sel_imul .sel_options{
    height:100px;
}
.sec .sel_options .sel_option:hover, .sec .sel_options .sel_option.sel_ed{
    background:#587da1;
    border:1px solid #2a5883;
    color:#fff;
    cursor:pointer;
}
.sec .sel_imul .sel_selected .sel_arraw{
    background-image:url('http://vkontakte.ru/images/darr_dd_out.gif');
}

.sec.round .sel_imul .sel_selected{
    -webkit-border-radius:5px;
}
.sec.round .sel_imul .sel_selected .sel_arraw{
    -webkit-border-radius:0 5px 5px 0;
}
.sec.round .sel_imul .sel_options{
    -webkit-border-radius:0 0 5px 5px;
}
/*green*/
.sec.green .sel_imul .sel_selected{
    border-color:#FFAD99;
}
.sec.green .sel_imul:hover .sel_selected .sel_arraw,
.sec.green .sel_imul.act .sel_selected .sel_arraw{
    background-color:#FFD6CC;
    border-left:1px solid #FFAD99;
}
.sec.green .sel_options .sel_option:hover,
.sec.green .sel_options .sel_option.sel_ed{
    background:#FF9980;
    border:1px solid #FF704D;
    color:#fff;
    cursor:pointer;
}
</pre>
<p>Здесь уже стили предусматривающие работу javascript&#8217;а, и несколько типов селектов.
</p>
<p>Дальше приступим к <strong>javascript</strong>&#8216;у. Во первых сделаем так чтобы при клике на див эмулирующий select, открывался или закрывался список option&#8217;ов:</p>
<pre class="prettyprint">
$('.sel_imul').live('click', function() {

    $('.sel_imul').removeClass('act');
    $(this).addClass('act');

    if ($(this).children('.sel_options').is(':visible')) {

        $('.sel_options').hide();

    }
    else {

        $('.sel_options').hide();
        $(this).children('.sel_options').show();

    }

});
</pre>
</p>
<p>Теперь пишем событие которое будт менять значение обычного, скрытого, селекта и значение у эмулирующего селекта:</p>
<pre class="prettyprint">
$('.sel_option').live('click', function() {

    //меняем значение на выбранное
    var tektext = $(this).html();
    $(this).parent('.sel_options').parent('.sel_imul').children('.sel_selected').children('.selected-text').html(tektext);

    //активируем текущий
    $(this).parent('.sel_options').children('.sel_option').removeClass('sel_ed');
    $(this).addClass('sel_ed');

    //устанавливаем значение для селекта
    var tekval = $(this).attr('value');
    tekval = typeof(tekval) != 'undefined' ? tekval : tektext;
    $(this).parent('.sel_options').parent('.sel_imul').parent('.sel_wrap').children('select').children('option').removeAttr('selected').each(function() {
        if ($(this).val() == tekval) {
            $(this).attr('selected', 'select');
        }
    });
});
</pre>
</p>
<p>Ну еще напишем меленький код который будет закрывать селект при холостом клике, blur так зказать:</p>
<pre class="prettyprint">
var selenter = false;
$('.sel_imul').live('mouseenter', function() {
    selenter = true;
});
$('.sel_imul').live('mouseleave', function() {
    selenter = false;
});
$(document).click(function() {
    if (!selenter) {
        $('.sel_options').hide();
        $('.sel_imul').removeClass('act');
    }
});
</pre>
</p>
<p>Напишем функцию которая будет превращать из обычного селекта такой т.е. писать за нас код, назовем его <b>reselect()</b>:</p>
<pre class="prettyprint">
function reselect(select, addclass) {

    addclass = typeof(addclass) != 'undefined' ? addclass : '';

    $(select).wrap('&lt;div class="sel_wrap ' + addclass + '"/&gt;');

    var sel_options = '';
    $(select).children('option').each(function() {
        sel_options = sel_options + '&lt;div class="sel_option" value="' + $(this).val() + '"&gt;' + $(this).html() + '&lt;/div&gt;';

    });

    var sel_imul = '&lt;div class="sel_imul"&gt;\
                &lt;div class="sel_selected"&gt;\
                    &lt;div class="selected-text"&gt;' + $(select).children('option').first().html() + '&lt;/div&gt;\
                    &lt;div class="sel_arraw"&gt;&lt;/div&gt;\
                &lt;/div&gt;\
                &lt;div class="sel_options"&gt;' + sel_options + '&lt;/div&gt;\
            &lt;/div&gt;';

    $(select).before(sel_imul);

}
</pre>
<p>Здесь что то нормально не удается показать функцию, можете посмотреть ее в демке
</p>
<div class="demo">
<a href="http://jsfiddle.net/axelru/QBHjY/21/embedded/result/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://jsfiddle.net/axelru/QBHjY/21/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/select-css/feed</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Красивый input file</title>
		<link>http://prootime.ru/custumize-input-file</link>
		<comments>http://prootime.ru/custumize-input-file#comments</comments>
		<pubDate>Mon, 08 Nov 2010 20:13:20 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=742</guid>
		<description><![CDATA[Столкнулся с такой проблемой как input типа file, наверное все знают что он выглядит в разных браузерах по разному, и применять к нему какие то стили нету смыла так как они будут работать везде по разному. В общем цель сделать красивый выглядящий везде одинаково input типа file. Начнем с HTML, пытаться применить к инпуту стили [...]]]></description>
			<content:encoded><![CDATA[<p>Столкнулся с такой проблемой как input типа file, наверное все знают что он выглядит в разных браузерах по разному, и применять к нему какие то стили нету смыла так как они будут работать везде по разному. В общем цель сделать красивый выглядящий везде одинаково input типа file.<span id="more-742"></span><br />
Начнем с HTML, пытаться применить к инпуту стили даже не будем и искать Jquery плагин тоже, хотя можно было б найти наверно подходящий. Давайте просто сэмулируем внешний вид инпута, а при нажатии на симулированную кнопку будем пытаться javascript&#8217;ом открыть диалоговое окно выбора файла, а чтоб было лучше давайте расположим настоящий инпут над симулированной кнопкой &#8220;Обзор&#8221;, и сделаем его прозрачным, выглядеть это будет примерно так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/11/1img.jpg" alt="" title="1img" width="557" height="193" class="alignnone size-full wp-image-743" /></center><br />
Ну и разметка</p>
<pre class="prettyprint">
&lt;div class="f_imulation_wrap"&gt;
    &lt;div class="im_input"&gt;
        &lt;input type="text"/&gt;
    &lt;/div&gt;
    &lt;div class="im_button"&gt;
        &lt;span class="inptext"&gt;Обзор&lt;/span&gt;
        &lt;input type="file" id="imulated" size="30"/&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Теперь нужно как то расположить это правильно как я уже говорил &#8220;CSS&#8221;:</p>
<pre class="prettyprint">
.im_input{
    float:left;
}
.im_input input{
    border:1px solid #9f9f9f;
    padding:2px;
    font-size:12px;
    width:250px;
    margin-right:4px;
}
.im_button{
    width:60px;
    height:19px;
    overflow:hidden;
    background:#aeaeae;
    border:1px solid #949494;
    position:relative;
}
.im_button.act{
    background:#bfbfbf;
}
.inptext{
    font-size:13px;
    line-height:19px;
    margin-left:12px;
    position:absolute;
}
#imulated{
    width:60px;
    border:none;
    opacity:0;
    filter: alpha(opacity=0);
    padding:0px;
    margin:0px;
    position:absolute;
}
</pre>
<p>Сейчас наша штука выглядит так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/11/2img.jpg" alt="" title="2img" width="346" height="40" class="alignnone size-full wp-image-744" /></center><br />
В принципе все работает но при выборе файла текстовое поле слева остается пустым исправим это &#8220;Javascript&#8221;<br />
Будем при onchange настоящего инпута типа файл, менять значение текстового поля. Конечно будем использовать Jquery:</p>
<pre class="prettyprint">
$('#imulated').change(function(){

    $('.im_input input').val($(this).val());

});
</pre>
<p>Сделаем еще эффект при наведении для кнопки обзор, будем добавлять ему класс:</p>
<pre class="prettyprint">
$('#imulated').mouseover(function(){

    $('.im_button').addClass('act');
    $(this).css('cursor','pointer');

});

$('#imulated').mouseout(function(){

    $('.im_button').removeClass('act');

});
</pre>
<p>Простым Css это к сожалению не получиться потому что :hover для имулирующей кнопки не срабатывает так как над ним находится прозрачный input.<br />
Ну и последнее будем пробовать нажимать на инпут при нажатии на текстовое поле:</p>
<pre class="prettyprint">
$('.im_input input').click(function(){

    $('#imulated').trigger('click');

});
</pre>
<p>К сожалению работать эта функция будет только в хроме и в сафари так как при онклик в других браузерах на инпут типа файл не срабатывает диалоговое окно.</p>
<blockquote><p>Если вам нужно обменять валюту вам сюда -><a href="http://monitoring-obmenov.ru/">обмен валюты</a></p></blockquote>
<p>Ну и напоследок несколько видов того как он может выглядеть ото че то сероватый получился<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/11/3img.jpg" alt="" title="3img" width="346" height="140" class="alignnone size-full wp-image-745" /></center><br />
С фантазией у меня не очень так что дальше сами фантазируйте со стилями</p>
<div class="demo">
<a href="http://jsfiddle.net/axelru/yuSmP/11/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://jsfiddle.net/axelru/yuSmP/11/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/custumize-input-file/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Редактируемый список</title>
		<link>http://prootime.ru/editeble-list</link>
		<comments>http://prootime.ru/editeble-list#comments</comments>
		<pubDate>Sat, 25 Sep 2010 21:01:41 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=721</guid>
		<description><![CDATA[В этом уроке попробуем создать редактируемый список, то есть элементы списка можно будет перемещать вверх, вниз, а также удалять элементы списка. Внешне это все будет выглядеть примерно так: Конечно же будем использовать javascript также библиотеку jQuery, для перемещения элементов по списку. Ну а начнем как всегда с html. HTML Для начала создадим простой неупорядоченный список [...]]]></description>
			<content:encoded><![CDATA[<p>В этом уроке попробуем создать редактируемый список, то есть элементы списка можно будет перемещать вверх, вниз, а также удалять элементы списка. Внешне это все будет выглядеть примерно так:<span id="more-721"></span><br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/img1.jpg" alt="uledit" title="img1" width="277" height="165" class="alignnone size-full wp-image-722" /></center><br />
Конечно же будем использовать javascript также библиотеку jQuery, для перемещения элементов по списку. Ну а начнем как всегда с html.</p>
<h2>HTML</h2>
<p>Для начала создадим простой неупорядоченный список с пару элементами:</p>
<pre class="prettyprint">
&lt;ul class="mylist"&gt;
	&lt;li&gt;1. Element1&lt;/li&gt;
	&lt;li&gt;2. Element2&lt;/li&gt;
	&lt;li&gt;3. Element3&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Теперь нам надо как то структурировать наши элементы для для удобного обращения к ним через javascript, также создадим три кнопки вверх, вниз и кнопку удаления. После преобразований код элемента выглядит следующим образом:</p>
<pre class="prettyprint">
&lt;li&gt;
	&lt;span class="num"&gt;1.&lt;/span&gt;
	&lt;span class="subj"&gt;Element1&lt;/span&gt;

	&lt;div class="top"&gt;&lt;/div&gt;
	&lt;div class="bottom"&gt;&lt;/div&gt;
	&lt;div class="delete"&gt;&lt;/div&gt;
&lt;/li&gt;
</pre>
<p>Далее нужно проделать тоже самое со всеми элементами. Теперь наши элементы имеют следующую структуру:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/img2.jpg" alt="editeble ul" title="editeble ul" width="600" height="200" class="alignnone size-full wp-image-723" /></center><br />
С html вроде все понятно давайте теперь приведем это все в божеский вид. Приступим к CSS.</p>
<h2>CSS</h2>
<p>Зададим списку какую нибудь ширину и расположим посередине, еще уберем отступы зададим фон в общем вот:</p>
<pre class="prettyprint">
.mylist{
    background:#eee;
    padding:0px;
    list-style:none;
    margin:0px;
    width:250px;
    margin:0px auto;
    border:1px solid #aaa;
    border-top:none;
  }
</pre>
<p>Дальше приступим к самим элементам списка, установим отступы (pdding), ну и какой нибудь эффект при наведении:</p>
<pre class="prettyprint">
.mylist li{
    border-top:1px solid #aaa;
    padding:4px 7px;
    overflow:hidden;
  }
.mylist li:hover{
    background:#bbb;
  }
</pre>
<p>Теперь уже приступим к содержимому самих элементов это два span&#8217;a и три div&#8217;a начнем со span&#8217;ов:</p>
<pre class="prettyprint">
.mylist .num{
    color:#000;
    width:30px;
    float:left;
  }
.mylist .subj{
    color:#444;
    width:150px;
    float:left;
  }
</pre>
<p>Цвет текста, ширины и float&#8217;a думаю достаточно, все таки это пост не о том как красивее оформить список <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Дальше приступим к div&#8217;ам , кнопкам, скроем их и будем показывать только при наведении на элемент списка, ну еще разукрасим в разные цвета чтоб они отличались, допустим кнопка вверх будет зеленым цветом, вниз &#8211; оранжевым, кнопка удаления &#8211; красным:</p>
<pre class="prettyprint">
.mylist div{
    visibility:hidden;
    cursor:pointer;
  }
.mylist li:hover div{
    visibility:visible;
  }
.mylist .top{
    height:17px;
    width:17px;
    float:left;
    background:green;
  }
.mylist .bottom{
    height:17px;
    width:17px;
    float:left;
    background:orange;
  }
.mylist .delete{
    height:17px;
    width:17px;
    float:left;
    background:red;
  }
</pre>
<p>Теперь мы имеем готовый стилизованный кое как список выглядящий вот так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/img3.jpg" alt="" title="img3" width="271" height="161" class="alignnone size-full wp-image-724" /></center><br />
Осталось написать javascript функции управления этим списком, приступим.</p>
<h2>Javascript</h2>
<p>Начнем раздел javascript чуть чуть не с javascript&#8217;a , я решил все таки вынести этот пункт сюда. Нашим кнопка следует прописать <b><i>onclck</i></b> равным функциям которые будут вызываться по нажатию на определенный тип кнопки. Вот список того кому че нужно прописывать:</p>
<ul>
<li>top &#8211; onclick=&#8221;move_top([здесь порядковый номер элемента в списке])&#8221;</li>
<li>bottom &#8211; onclick=&#8221;move_bottom([здесь порядковый номер элемента в списке])&#8221;</li>
<li>delete &#8211; onclick=&#8221;delete([здесь порядковый номер элемента в списке])&#8221;</li>
</ul>
<p>В итоге элемент, допустим второй будет выглядеть так:</p>
<pre class="prettyprint">
&lt;li class="li2"&gt;

  &lt;span class="num"&gt;2.&lt;/span&gt;
  &lt;span class="subj"&gt; Elemen2&lt;/span&gt;

  &lt;div class="top" onclick="move_top(2)"&gt;&lt;/div&gt;
  &lt;div class="bottom" onclick="move_bottom(2)"&gt;&lt;/div&gt;
  &lt;div class="delete" onclick="delete_li(2)"&gt;&lt;/div&gt;

&lt;/li&gt;
</pre>
<p>И наконец приступим к javascript&#8217;у для начала создадим функцию создания элемента входным параметрами которого будут порядковый номер элемента в списке и текст создаваемого элемента:</p>
<pre class="prettyprint">
function create_new_li(el_id,el_text){

    return '&lt;li class="li'+el_id+'"&gt;\
      \
      &lt;span class="num"&gt;'+el_id+'.&lt;/span&gt;\
      &lt;span class="subj"&gt; '+el_text+'&lt;/span&gt;\
      \
      &lt;div class="top" onclick="move_top('+el_id+')"&gt;&lt;/div&gt;\
      &lt;div class="bottom" onclick="move_bottom('+el_id+')"&gt;&lt;/div&gt;\
      &lt;div class="delete" onclick="delete_li('+el_id+')"&gt;&lt;/div&gt;\
      \
      \
    &lt;/li&gt;';  

}//end of the function create_new_li
</pre>
<p>Функция как вы заметили не создает а просто возвращает строку содержащую разметку нового элемента. Начнем написание функция которые мы прописывали для кнопок. Итак функция <b><i>move_top</i></b>:</p>
<pre class="prettyprint">
function move_top(el_id){

  if(el_id!=1){

    //узнаем ид верхнего li
    var top_li_id = el_id-1;

    //узнаем текст верхнего li
    var top_li_text = $('li.li'+top_li_id+' .subj').html();

    //удаляем верхний li
    $('li.li'+top_li_id).remove();

    //узнаем текст перемещаемого элемента
    var per_li_text = $('li.li'+el_id+' .subj').html();

    //создаем копию перемещаемого вверх элемента над ни же с другим ид
    var newli = create_new_li(top_li_id,per_li_text);
    $('li.li'+el_id).before(newli);

    //удаляем перемещаемый элемент
    $('li.li'+el_id).remove();

    //зодаем под до этого созданным элементом эелемент который был до этого над
    //перемещаемым вверх, создаем его с ид на 1 меньше
    var newli = create_new_li(el_id,top_li_text);
    $('li.li'+top_li_id).after(newli);

  }//end if

}//end of the function move_top
</pre>
<p>Вкратце как работает эта функция, она сперва удаляет элемент расположенный над перемещаемым, в данном случае вверх, и создает на его место копию своего элемента, но уже с другим порядковым номером и ид на один меньше, так как счет идет сверху вниз (ид и порядковый номер соводают точнее конец ид), затем она удаляет перемещаемый элемент и создает на его месте до этого удаленный элемент, опять же с другим ид (в этот раз на 1больше).<br />
Тперь разберемся с другой функцией, которая перемещает наоборот вниз <b><i>move_bottom</i></b>:</p>
<pre class="prettyprint">
function move_bottom(el_id){

   //узнаем количество элементов в списке
   var li_count = $('.mylist li').size();

   //проверяем не пытаемся ли мы сместить вниз последний элемент
   if(el_id!=li_count){

     //узнаем порядковый номер нижнего элемента
    var bot_li_id = el_id+1;

    //узнаем текст элемента расположенного под перемещаемым
    var bot_li_text = $('li.li'+bot_li_id+' .subj').html();

    //удаляем елемент расположенный под перемещаемым
    $('li.li'+bot_li_id).remove();

    //узнаем текст перемещаемого элемента
    var per_li_text = $('li.li'+el_id+' .subj').html();

    //создаем копию перемещаемого вниз элемента под ним же с другим ил +1
    var newli = create_new_li(bot_li_id,per_li_text);
    $('li.li'+el_id).after(newli);

    //удаляем перемещаемый элемент
    $('li.li'+el_id).remove();

    //создаем над созданным элементом копию элемнета котрый был расположен под
    //перемещаемым элементом
    var newli = create_new_li(el_id,bot_li_text);
    $('li.li'+bot_li_id).before(newli);

   }//end if

}//end function move_bottom
</pre>
<p>В принципе эта функция делает то же самое что и предыдущая только наоборот, даже описвать ниче не надо <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , комментариев тоже думаю достаточно.<br />
Ну и последняя фукция для кнопки удаления элемента <b><i>delete</i></b>:</p>
<pre class="prettyprint">
function delete_li(el_id){

  //узнаем количество элементов в списке
  var li_count = $('.mylist li').size();

  //если елемент не последний пересоздаем нижние элементы
  //с другими ид
  if(el_id!=li_count){

    //узнаем количество элементов после удаляемого
    var dif = li_count - el_id;

    //удаляем удаляемый элемент
    $('li.li'+el_id).remove();

    //копмруем порядковый номер удоля
    var count = el_id;

    //проходим циклом под элементам расположенныым под удаленным
    //и пересоздаем их
    for(i=1;i<=dif;i++){

      //узнаем порядковый номер следующего элемента
      var next_el = count*1 + 1;

      //узнаем текст следующего элемента
      var next_li_text = $('li.li'+next_el+' .subj').html();

      //пересоздаем элемент
      var newli = create_new_li(count,next_li_text);
      $('li.li'+next_el).before(newli);

      //удаляем элемент
      $('li.li'+next_el).remove();

      count++
    }

  }
  //если элемент последний просто удоляем его
  else{

    //удаляем элемент
    $('li.li'+el_id).remove();

  }//end else

}//end function delete_li
</pre>
<p>Функция сперва проверяет последний ли проверяемы элемент или нет, если последний просто удаляем его а если не последний удаляем элемент и пересоздаем нижние элементы с новыми порядковыми номерами.<br />
<a href="http://stavkisport.ru/">Прогнозы на спорт</a><br />
Вот и все вот и tutorial'у конец <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Смотрим тестируем комментируем -></p>
<div class="demo">
<a href="http://jsbin.com/adeco3/2" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/uledit/uledit.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/editeble-list/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS хаки для IE</title>
		<link>http://prootime.ru/css-hacks</link>
		<comments>http://prootime.ru/css-hacks#comments</comments>
		<pubDate>Sun, 12 Sep 2010 13:50:29 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=715</guid>
		<description><![CDATA[В этом маленьком уроке хочу показать вам как написать CSS стили которые будут работать только в IE6, IE7 или IE8. Эти хаки, которые я вам покажу, очень полезны особенно при появлении проблем с кроссбраузерностью. Никому не секрет что IE очень часто, криво отображает сайты которые во всех остальных браузерах работают нормально. Существует несколько видов CSS [...]]]></description>
			<content:encoded><![CDATA[<p>В этом маленьком уроке хочу показать вам как написать CSS стили которые  будут работать только в IE6, IE7 или IE8. Эти хаки, которые я вам покажу, очень полезны особенно при появлении проблем с кроссбраузерностью. Никому не секрет что IE очень часто, криво отображает сайты которые во всех остальных браузерах работают нормально<span id="more-715"></span>. Существует несколько видов CSS хаков, начнем с самых распространенных условных комментарий.</p>
<h2>Условные комментарии</h2>
<p>Условные комментарии работают только на IE под Windows для других браузеров это обычные HTML комментарии и они их игнорируют. Структура условных комментариев следующая:</p>
<pre class="brush: html;">
&lt;!--[if условие]&gt; HTML &lt;![endif]--&gt;
</pre>
<p>Условие в комментариях можно поставить довольно токи гибкое. Вот список операторов которые можно использовать в условии:</p>
<ul>
<li>! &#8211; отрицание</li>
<li>lt &#8211; меньше</li>
<li>gt &#8211; больше</li>
<li>lte &#8211; меньше или равно</li>
<li>gte &#8211; больше или равно</li>
</ul>
<p>Примерно так их надо использовать:</p>
<pre class="prettyprint">
&lt;!--[if gte IE 6]&gt;
	HTML код расположенный здесь будет работать только для браузеров IE6 и выше соответственно IE7, IE8
&lt;![endif]--&gt;
</pre>
<p>Наверное вы заметили что в списке нет оператора равно, а он и не нужен так как можно просто указать версию браузера в условии код между комментариями будет работать только для этого браузера:</p>
<pre class="prettyprint">
&lt;!--[if IE 6]&gt;
	HTML код расположенный здесь будет виден только для IE 6
&lt;![endif]--&gt;
</pre>
<p>Чаще всего условные комментарии используют для подключения стилей для определенного браузера, вот)). С условными комментариями вроде все. Далее рассмотрим хаки которые пишутся внутри самих стилей путем добавления звездочек и все такое.</p>
<h2>Хаки для IE6</h2>
<p>Первый способ это добавление знака подчеркивания(_) перед свойством тем самым это свойство будет восприниматься только IE6. Например так:</p>
<pre class="prettyprint">
body{
    _background:#ooo;
}
</pre>
<p>Второй способ добавление следующего кода вот этого *html перед селекторами тем самым теперь уже все свойства становятся видны для IE6 и ниже. Примерно так:</p>
<pre class="prettyprint">
*html body{
    background:#000;
}
</pre>
<h2>Хаки для IE7</h2>
<p>Для IE7 существует большое количество хаков все даже наверное не получиться рассмотреть, потому что я их все и не знаю <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ну начнем с хака который похож на последний рассмотренный хак для IE6, полоучается он путем добавления *+html перед селектором. Пример:</p>
<pre class="prettyprint">
*+html body{
    background:#000;
}
</pre>
<p>Следующий хак будет виден не только  IE7 , а наоборот всем современным браузерам кроме IE7 хак опять же добавляется в начало селектора. Пример:</p>
<pre class="prettyprint">
html>/**/body {
    background:#000;
}
</pre>
<p>Следующий хак опять же добавляется перед селектором после чего свойства работают только для IE7, но на мой взгляд он немножко громоздкий *:first-child+html вот собственно что нужно добавить перед селектором. Пример:</p>
<pre class="prettyprint">
*:first-child+html body{
    background:#000;
}
</pre>
<p>Хак который рассмотрим далее будет работать в IE7 и во всех современных браузерах, наверное такое тоже иногда бывает нужно <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Пример:</p>
<pre class="prettyprint">
html>body {
    background:#000;
}
</pre>
<p>Ну и последний хак для ie7, добавляем перед свойством звездочку и все чики пуки:</p>
<pre class="prettyprint">
body {
    *background:#000;
}
</pre>
<h2>Хак для IE8</h2>
<p>Для IE8 встречался только с одним хаком, не знаю может и существует другие если попадется обязательно дополню статью. Собственно хак:</p>
<pre class="prettyprint">
body {
 background: #000\0/;
}
/*свойство следует добавлять в последнюю очередь*/
</pre>
<p>Вот и все вроде как, если кто знаком еще с какими то хаками пишем в комментарии <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/css-hacks/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Создание lightbox как в Facebook</title>
		<link>http://prootime.ru/facebook-like-lightbox</link>
		<comments>http://prootime.ru/facebook-like-lightbox#comments</comments>
		<pubDate>Sun, 05 Sep 2010 09:53:58 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=697</guid>
		<description><![CDATA[В этом уроке попробуем создать всплывающее окно(lightbox) как в Facebook, в котором можно будет размещать не только картинки но и любой другой контент, кто не видел фесбуковкий лайтбокс снизу показано: Будем конечно же использовать javascript как и в любых других lightbox&#8217;ах, но начнем мы с HTML и CSS. HTML &#038; CSS Для начала создадим div [...]]]></description>
			<content:encoded><![CDATA[<p>В этом уроке попробуем создать всплывающее окно(lightbox) как в Facebook, в котором можно будет размещать не только картинки но и любой другой контент, кто не видел фесбуковкий лайтбокс снизу показано:<span id="more-697"></span><br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/Facebook-Pages-Popup-Box.jpg" alt="" title="Facebook-Pages-Popup-Box" width="510" height="314" class="alignnone size-full wp-image-704" /></center><br />
Будем конечно же использовать javascript как и в любых других lightbox&#8217;ах, но начнем мы с HTML и CSS.</p>
<h2>HTML &#038; CSS</h2>
<p>Для начала создадим div который покроет все окно, нужно для того чтобы задняя часть лайтбокса была неактивной, также мы сможем сделать ее темнее, ну это уже по желанию. Создаем:</p>
<pre class="prettyprint">
&lt;div id="gogo_overly"&gt;&lt;/div&gt;
</pre>
<p>Указываем для этого div&#8217;a следующие стили</p>
<pre class="prettyprint">
height:100%;
width:100%;
opacity:0.5;
position:fixed;
top:0;
z-index:100;
</pre>
<p>Тоесть указываем диву 100% ширину и высоту, фиксированное позиционирование чтоб при скроллинге он не съезжал, и указываем 100ый z-index можно было поставить и поменьше но для надежности 100 <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  z-index помогает делать все остальные элементы у которых z-index меньше 100 неактивными точнее они будут активными но будут расположены нашим дивом и не будут кликабельными, а активными будут только те элементы у которых z-index больше 100 , а это будут элементы нашего лайтбокса&#8217;.<br />
Дальше собственно приступаем к созданию самого лайтбокса HTML будет примерно следующим- это четыре вложенных дива первые два для позиционирования по центру так удобней <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  третий для эффекта прозрачных границ мы же хотим как в Facebook так как сами границы прозрачными не получиться седлать создаем этот третий див который будет больше последнего четвертого дива, и будет иметь прозрачный фон в итоге получиться такой эффект, ну и последний четвертый див в котором будет располагаться весь нужный контент. Естественно все дивы имеют разные ид:</p>
<pre class="prettyprint">
&lt;div id="gogo_wrap"&gt;
&lt;div id="gogo_box" class="gogobox" style="top:125px; width:522px;"&gt;
		&lt;div id="gogo_contant"&gt;
			&lt;div id="gogo_last_cont"&gt;
				&lt;h2 id="gogo_head"&gt;Загаовок лайтбокса&lt;/h2&gt;
				&lt;div id="gogo_must_change"&gt;
				Здесь будет контент
&lt;/div&gt;
&lt;div id="gogo_close_panel"&gt;
&lt;button name="close-gogo_box" id="close-gogo_box" onclick="close_gogo_box();"&gt;Закрыть&lt;/button&gt;
&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Стили для дива с ид gogo_box вытащили наружу для того чтобы в дальнейшем нам было удобней управлять шириной и расположением лайтбокса через javascript, ну это все потом, а сейчас приступим к CSS. Ну для первых двух дивов которые мы как я говорил создали для позиционирования указываем следующие стили:</p>
<pre class="prettyprint">
#gogo_wrap{
	height:0;
	left:0;
	overflow:visible;
	position:absolute;
	top:0;
	width:100%;
	z-index:101;
}
#gogo_box{
	height:0;
	margin:auto;
	overflow:visible;
	position:relative;
}
</pre>
<p>Далее стилизуем следующий див, а это див с id gogo_contant он должен иметь скругленные углы и прозрачный серый фон:</p>
<pre class="prettyprint">
#gogo_contant{
	-moz-border-radius:8px;
	-webkit-border-radius:8px;
	-border-radius:8px;
	background:none repeat scroll 0 0 rgba(163, 163, 163, 0.7);
	padding:10px;
}
</pre>
<p>Как видно мы указали 8 пиксельное скругление углов, и сделали прозрачный фон, а padding нужен для того чтобы в дальнейшем он был больше следующего дива и получился эффект прозрачных границ в нашем случае границы будут шириной 10px. Далее преходим к стилизации остальных элементов нашего lightbox&#8217;а. Самое главное нужно указать для следующего дива непрозрачный, белый фон:</p>
<pre class="prettyprint">
#gogo_last_cont{
	background:#fff;
}
h2#gogo_head{
	background:#829ACE;
	font-size:16px;
	font-weight:normal;
	padding:4px 6px;
	color:#fff;
	border-bottom:1px solid #333;
}
#gogo_close_panel{
	text-align:right;
	height:30px;
	border-top:1px solid #ccc;
	margin-top:4px;
}
button#close-gogo_box{
	border:1px solid #333;
	padding:3px;
	margin:3px 5px 3px 3px;
	background:#4B6EB9;
}
button#close-gogo_box:hover{
	color:#E6E6E6;
	cursor:pointer;
}
</pre>
<p>Вот и все со стилизацией мы закончили, в итоге у нас получилось то что показано снизу на картинке.<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/light-1.jpg" alt="" title="light-1" width="543" height="113" class="alignnone size-full wp-image-705" /></center></p>
<h2>Javascript</h2>
<p>Теперь давайте сделаем так чтобы эта вся штука появлялась по нажатию на что нибудь, допустим кнопку:</p>
<pre class="prettyprint">
&lt;button id="show_gogo_box"&gt;Открыть gogo_box&lt;/button&gt;
</pre>
<p>Теперь давайте сделаем функцию которая будет создавать на нашей странице наш lightbox для этого будем использовать Jquery подключаем его, допустим с гугловсого архива:</p>
<pre class="prettyprint">
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js" type="text/javascript" language="javascript"&gt;&lt;/script&gt;
</pre>
<p>Вот подключили, начинаем писать функцию сделаем ее чуточку гибкой так сказать, добавим возможность передавать функции заголовок и будущий контент содержащийся в лайтбоксе. Выглядит наша функция вот так:</p>
<pre class="prettyprint">
function create_gogo_box(title,contant){
		$("body").append('&lt;div id="gogo_wrap"&gt;\
			&lt;div id="gogo_box" class="gogobox" style="top:125px; width:522px;"&gt;\
				&lt;div id="gogo_contant"&gt;\
					&lt;div id="gogo_last_cont"&gt;\
						&lt;h2 id="gogo_head"&gt;'+title+'&lt;/h2&gt;\
						&lt;div id="gogo_must_change"&gt;\
						'+contant+'\
						&lt;/div&gt;\
						&lt;div id="gogo_close_panel"&gt;\
							&lt;button name="close-gogo_box" id="close-gogo_box" onclick="close_gogo_box();"&gt;Закрыть&lt;/button&gt;\
						&lt;/div&gt;\
					&lt;/div&gt;\
				&lt;/div&gt;\
			&lt;/div&gt;\
		&lt;/div&gt;\
		&lt;div id="gogo_overly"&gt;&lt;/div&gt;');
	}
</pre>
<p>Далее делаем так чтоб при клике на кнопку которую мы создали до этого, а она была с ид show_gogo_box, вызывалась наша функция:</p>
<pre class="prettyprint">
$('#show_gogo_box').click(function(){

	create_gogo_box('Здесь заголовок','Здесь контэнт')}

	);
</pre>
<p>Вот и все теперь осталось написать функцию для удаления лайтбокса со страницы, называться она должна close_gogo_box так как мы уже прописали ее для нашей кнопки, пишем:</p>
<pre class="prettyprint">
function close_gogo_box(){
	$('#gogo_wrap').remove();
	$('#gogo_overly').remove();
	}
</pre>
<p>Ну а вот так он будет выглядеть с картинкой:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/09/screen2.jpg" alt="" title="screen2" width="541" height="378" class="alignnone size-full wp-image-708" /></center><br />
Вот теперь точно все.</p>
<div class="demo">
<a href="http://prootime.ru/demos/gogo-box" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/gogo-box/gogo-box.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/facebook-like-lightbox/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Создание календаря средствами PHP и CSS</title>
		<link>http://prootime.ru/calendar-php</link>
		<comments>http://prootime.ru/calendar-php#comments</comments>
		<pubDate>Fri, 27 Aug 2010 11:25:52 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=510</guid>
		<description><![CDATA[Сейчас мы попробуем сделать простенький календарь для сайта или еще для чего нибудь, не знаю ). Календарь будет не совсем простым можно будет переключатся между месяцами, а текущий день будет выделен среди других дней также другим цветом(красным) будут выделены выходные, правда только воскресения субботы я чето не стал выделять, ну это не важно. Так как [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас мы попробуем сделать простенький календарь для сайта или еще для чего нибудь, не знаю ). Календарь будет не совсем простым можно будет переключатся между месяцами, а текущий день будет выделен среди других дней также другим цветом(красным)<span id="more-510"></span> будут выделены выходные, правда только воскресения субботы я чето не стал выделять, ну это не важно.<br />
Так как календарь будет переключатся между месяцами мы должны это как то передавать например методом GET т.е. через url адрес. Также напишем для календаря простенькие CSS чтоб можно было смотреть)) так это календарь удобней всего оформить его в виде таблицы. Внешне календарь будет выглядеть примерно так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css.jpg" alt="cakendar witht-css" title="witht-css" width="600" class="alignnone size-full wp-image-521" /></center><br />
На PHP мы создадим две переменные $calendar_head и $calendar_body соответственно в $calendar_head мы будем записывать html код верхней части календаря т.е. название месяца, дни недели и две ссылки по краям для выбора месяца. А в $calendar_body будем сохранять остальной код то есть таблицу дней недели. Ниже на скрине показано:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css-metki.jpg" alt="" title="witht-css-metki" width="600" height="232" class="alignnone size-full wp-image-526" /></center><br />
Теперь рассмотрим сам php код:</p>
<pre class="prettyprint">
// проверяем передали ли нам месяц и год
if(isset($_GET["ym"])){

	$year  = (int)substr($_GET["ym"], 0, 4);
	$month = (int)substr($_GET["ym"], 4, 2);

}
else{ // иначе выводить текущие месяц и год

	$month = date("m", mktime(0,0,0,date('m'),1,date('Y')));
	$year  = date("Y", mktime(0,0,0,date('m'),1,date('Y')));

}

$skip          = date("w", mktime(0,0,0,$month,1,$year)) - 1; // узнаем номер дня недели
if($skip < 0){
	$skip = 6;
}
$daysInMonth   = date("t", mktime(0,0,0,$month,1,$year));	// узнаем число дней в месяце
$calendar_head = '';	// обнуляем calendar head
$calendar_body = '';	// обнуляем calendar boday
$day = 1;	// для цикла далее будем увеличивать значение

for($i = 0; $i < 6; $i++){ // Внешний цикл для недель 6 с неполыми

	$calendar_body .= '&lt;tr&gt;';	// открываем тэг строки
	for($j = 0; $j < 7; $j++){	// Внутренний цикл для дней недели

		if(($skip > 0)or($day > $daysInMonth)){ // выводим пустые ячейки до 1 го дня ип после полного количства дней

			$calendar_body .= '&lt;td class="none"&gt;&nbsp;&lt;/td&gt;';
			$skip--;

		}
		else{

			if($j == 0)	// если воскресенье то омечаем выходной
				$calendar_body .= '&lt;td class="holiday"&gt;'.$day.'&lt;/td&gt;';
			else{	// в противном случае просто выводим день в ячейке
				if ((date(j)==$day)&#038;&#038;(date(m)==$month)&#038;&#038;(date(Y)==$year)){//проверяем на текущий день
					$calendar_body .= '&lt;td class="today"&gt;'.$day.'&lt;/td&gt;';
				}
				else{
					$calendar_body .= '&lt;td class="day"&gt;'.$day.'&lt;/td&gt;';
				   }
				 }
			$day++; // увеличиваем $day
		}

	}
	$calendar_body .= '&lt;/tr&gt;'; // закрываем тэг строки
}

// заголовок календаря
$calendar_head = '
  &lt;tr&gt;
	&lt;th colspan="2"&gt;&lt;a href="?ym='.date("Ym", mktime(0,0,0,$month-1,1,$year)).'"&gt;&laquo; Пред&lt;/a&gt;&lt;/th&gt;
  	&lt;th colspan="3"&gt;'.date("F, Y", mktime(0,0,0,$month,1,$year)).'&lt;/th&gt;
  	&lt;th colspan="2"&gt;&lt;a href="?ym='.date("Ym", mktime(0,0,0,$month+1,1,$year)).'"&gt;След &raquo;&lt;/a&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Понедельник&lt;/th&gt;
    &lt;th&gt;Вторник&lt;/th&gt;
    &lt;th&gt;Среда&lt;/th&gt;
    &lt;th&gt;Четверг&lt;/th&gt;
    &lt;th&gt;Пятница&lt;/th&gt;
    &lt;th&gt;Суббота&lt;/th&gt;
    &lt;th&gt;Воскресенье&lt;/th&gt;
  &lt;/tr&gt;';
</pre>
<p>Я думаю здесь уже нечего объяснять комментариев кажется достаточно, единственно я бы хотел пояснить почему 6 строк ведь недель в месяце всего четыре так вот, так как мы месяц начинаем выводить не с понедельника, то есть месяц не всегда начинается с понедельника, у нас появляются неполные недели и посчитав максимальное количество неполных и полных недель вы получите шесть недель вот поэтому и шесть). Но так как 6 недель встречаются не очень часто, то последняя строка в таблице чаще всего будет пустой.<br />
Далее осталось написать HTML код и вывести в нужных местах $calendar_head и $calendar_body, ну и прописать CSS стили. Рассмотрим содержание тега &lt;body&gt;:</p>
<pre class="prettyprint">
&lt;!-- таблица для вывода календаря --&gt;
&lt;table id="calendar" width="710" border="1" cellspacing="0" cellpadding="5"&gt;
	&lt;thead&gt;
		&lt;?php echo $calendar_head; ?&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;?php echo $calendar_body; ?&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- таблица для вывода календаря --&gt;
</pre>
<p>Как видим календарь состоит полностью из таблицы заголовка и тела. Теперь наш календарь выглядит примерно аот так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/without-css.jpg" alt="calendar without css" title="without-css" width="600" class="alignnone size-full wp-image-529" /></center><br />
То есть осталось прописать CSS стили, ну примерно вот такие:</p>
<pre class="prettyprint">
body{
	margin:0 auto;
	width:800px;
	padding:10px;
}
#calendar{
	border:0px;
}
#calendar tbody tr{
	height:40px;
}
#calendar td{
	width:80px;
	border:0px;
	border:solid 1px #99FF99;
	font-size:22px;
	text-align:center;
}
#calendar th{
	background-color:#4DDBFF;
	border:solid 1px #00CCFF;
	color:#ffffff;
}
#calendar td.none{
	border:0px;
}
#calendar td.holiday{
	background-color:#FF6633;
	border-color:#FF531A;
	color:#94E4FF;
}
.day{
	background-color:#CCFFCC;
	color:#00B32D;
}
#calendar td.today{
	background-color:#FFFF99;
	border-color:#FF531A;
}
</pre>
<p>Ну вот и все теперь календарь выглядит примерно так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css.jpg" alt="cakendar witht-css" title="witht-css" width="600" class="alignnone size-full wp-image-521" /></center><br />
Весь исходный код можете посмотреть <a href="http://gist.github.com/443457" target="blank">здесь</a></p>
<div class="demo">
<a href="http://prootime.ru/demos/calendar" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/calendar/calendar.rar" id="demo" target="blank">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/calendar-php/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

