Если Вам нужен качественный хостинг и Вы непротив сэкономить 10% на его покупке, то Вы можете воспользоваться моим специальным предложением по скидке на хостинг от компании Ютекс.

*


Система Orphus


Создание виджета для чтения RSS каналов

Вы будете очень удивлены, узнав какое количество информации доступно в Интернете через RSS и ATOM каналы - поиск в твиттере, напоминания гугл, собственные и другие блоги и многое другое. Вам просто необходимо найти оранжевую иконку и Вы точно найдете массу полезной информации, которая так и ждет, чтобы быть задействованной.

Сегодня мы займемся созданием красивого виджета для чтения подобных лент. Он будет извлекать любую ленту и отображать ее в любом месте сайта. Вы можете настроить его таким образом, чтобы он отображал последние сообщения с разных категорий блога, или упоминания о Вас в твиттере, или все что угодно :).

Решение проблем

Прежде чем начать разработку, нам необходимо прояснить что именно мы хотим и какие проблемы реализации у нас могут возникнуть. И найти их решения, конечно же.

Проблема 1 - чтение лент

Виджет не содержит серверной части, поэтому нам необходимо найти способ считывать ленты с помощью JavaScript. Ajax великолепная технология, но она имеет ограничения безопасности и позволяет работать только в пределах одного домена. Это означает, что внешние ленты нам будут недоступны.

И тут нам поможет YQL. Этот сервис читает ленту и делает ее доступной нашему скрипту в качестве JSON объекта, который мы можем вывести на странице.

YQL - бесплатный API сервис от Yahoo, с помощью которого Вы можете делать намного больше, чем просто читать ленты. Он служит шлюзом между Вашим и любым другим АПИ и позволяет Вам манипулировать ими с помощью легкого синтаксиса по типу SQL. Больше информации можно найти тут.

Настройка YQL требует небольших усилий, однако (нам необходимо динамически включить тег <script> в шапку сайта). К счастью, jQuery способен на это - есть метод под названием getJSON.

Проблема 2 - Разные форматы лент

Существуют разные форматы лент - RSS1, RSS2 и ATOM. Они отличаются друг от друга. Наш код должен уметь считывать результаты, которые выдает YQL и выводить их на страницу.

Эту проблему мы решим с помощью отдельной функции с несколькими логическими или\или ( || ) в нашем коде.

Проблема 3 - Недостаточно места

Тут уже проблема разметки, но она не менее важна. Поскольку боковые панели у сайтов обычно маленькие нам необходимо вместить несколько лент в довольно маленькое место. Вкладки тут вряд ли помогут, а вот выпадающий список будет в самый раз.

Приступим к созданию...

Шаг 1 - XHTML

Первая часть урока содержит базовую разметку.

demo.html

<div id="feedWidget">
<div id="activeTab">
<!-- Название -->
</div>
<div class="line"></div>
<div id="tabContent">
<!-- Содержимое -->
</div>
</div>

Поскольку все в нашем виджете зависит от JavaScript его нет смысла показывать, при отключенном в браузере JS. И поэтому feedWidget спрятан с помощью display:none в стилях. А показывается он с помощью метода jQuery show().

Шаг 2 - CSS

styles.css - часть 1

#feedWidget{
	background:url(img/bg.png) repeat-x #47525c;
	border:2px solid #48535e;
	margin:0 auto;
	width:200px;
	padding:5px;
	position:relative;

	/* при выключенном JS ничего не отображается: */
	display:none;
	z-index:20;
}

#activeTab.hover,.dropDownList{
	background:url(img/drop_arrow.png) no-repeat 95% 50% #47525c;
	border:1px solid #38434d;

	margin:-1px;

	cursor:pointer;

	/* CSS3 скругленные углы: */
	-moz-border-radius:5px;
	-webkit-border-radius:5px;
	border-radius:5px;

}

#activeTab,.dropDownList div{
	color:white;
	cursor:pointer;
	font-size:20px;
	margin:0 2px 0 0;
	padding:5px;

	text-shadow:0 1px 1px black;
}

.line{
	height:1px;
	overflow:hidden;
	background-color:#2b353d;
	border-bottom:1px solid #687581;
	margin:10px 0;
}

Обратите внимание на то, что мы определяем специальный класс при наведении на слой #activeTab, вместо обычного :hover псевдокласса. Это сделано потому, что стиль при наведении должен быть применен только в случае наличия нескольких источников лент, что невозможно определить используя CSS. Это будет сделано с помощью JS.

styles.css - часть 2

.dropDownList{
	background-image:none;
	position:absolute;

	border-top:none;
	padding:5px;

	-moz-border-radius-topleft: 0;
	-moz-border-radius-topright: 0;
	-webkit-border-top-left-radius: 0;
	-webkit-border-top-right-radius: 0;
	border-top-left-radius: 0;
	border-top-right-radius: 0;
}

.dropDownList div:hover{
	background-color:#505e6b;
}

#tabContent div{
	/* тут будут сообщения с ленты */

	background-color:#EEEEEE;
	color:#555555;
	font-size:10px;
	margin-bottom:10px;
	padding:5px;
	position:relative;

	-moz-border-radius:5px;
	-webkit-border-radius:5px;
	border-radius:5px;

	/* CSS3 тень ячейки: */
	-moz-box-shadow:0 1px 1px black;
	-webkit-box-shadow:0 1px 1px black;
	box-shadow:0 1px 1px black;
}

Тут мы оформляем внешний вид зоны, в которой будут выводиться сообщения.

Шаг 3- jQuery

После подключения фреймворка в шапке документа мы можем использовать методы для построения сложных взаимодействий.

script.js - часть 1

/* Настройки: */

var tabs = {
	"@tutorialzine" : {
		"feed"		: "http://twitter.com/statuses/user_timeline/67315866.rss",
		"function"	: twitter
	},

	"Latest Tutorials": {
		"feed"		: "http://feeds.feedburner.com/Tutorialzine",
		"function"	: rss
	},

	"Smashing Mag": {
		"feed"		: "http://rss1.smashingmagazine.com/feed/",
		"function"	: rss
	},

	"Script & Style" : {
		"feed"		: "http://feeds2.feedburner.com/ScriptAndStyle",
		"function"	: rss
	}
}

$(document).ready(function(){

	/* Считаем количество источников: */
	var totalTabs=0;
	$.each(tabs,function(){totalTabs++;})

	$('#feedWidget').show().mouseleave(function(){

		/* Если курсор покинул виджет, спрятать выпадающий список: */
		$('.dropDownList').remove();
		$('#activeTab').removeClass('hover');

	}).mouseenter(function(){

		if(totalTabs>1) $('#activeTab').addClass('hover');

	});

	$('#activeTab').click(showDropDown);

	/* используем метод LIVe */

	$('.dropDownList div').live('click',function(){

 		/* Calling the showDropDown function, when the drop down is already shown, will hide it: */
		showDropDown();
		showTab($(this).text());
	});

	/* показываем один из источников после загрузки страницы: */

	showTab('@tutorialzine');
});

Объект tabs содержит записи о разных источниках, которые мы будем использовать вместе с функцией, которая будет выводить ленты на страницу. В конце мы выводим один источник (в скобках функции showTab) для отображения сразу после загрузки страницы.

script.js - часть 2

function showTab(key)
{
	var obj = tabs[key];
	if(!obj) return false;

	var stage = $('#tabContent');

	/* формируем query: */
	var query = "select * from feed where url='"+obj.feed+"' LIMIT 5";

	/* Формируем URL lkz YQL: */
	var url = "http://query.yahooapis.com/v1/public/yql?q="+encodeURIComponent(query)+"&format=json&callback=?";

	$.getJSON(url,function(data){

		stage.empty();

		/* элемент существует в RSS и ATOM лентах: */

		$.each(data.query.results.item || data.query.results.entry,function(){

			try{
				/* Пробуем вызвать функцию юзера, "this" остаток информации ленты: */
				stage.append(obj['function'](this));

			}
			catch(e){
				/* Информируем о возможных ошибках: */
				var f_name =obj['function'].toString().match(/function\s+(\w+)\(/i);
				if(f_name) f_name = f_name[1];

				stage.append('<div>There is a problem with your '+f_name+ ' function</div>');
				return false;
			}
		})

	});

	$('#activeTab').text(key);
}

function showDropDown()
{
	if(totalTabs<2) return false;

	if($('#feedWidget .dropDownList').length)
	{
	/* Если выпадающий список уже показан, спрятать его: */

	$('.dropDownList').slideUp('fast',function(){ $(this).remove(); })

	return false;

	}

	var activeTab = $('#activeTab');

	var offsetTop = (activeTab.offset().top - $('#feedWidget').offset().top )+activeTab.outerHeight() - 5;

	/* Создание выпадающего слоя на лету: */

	var dropDown = $('<div>').addClass('dropDownList').css({

		'top'	: offsetTop,
		'width'	: activeTab.width()

	}).hide().appendTo('#feedWidget')

	$.each(tabs,function(j){

		if(j==activeTab.text()) return true;

		$('<div>').text(j).appendTo(dropDown);
	})

	dropDown.slideDown('fast');

}

Функция showTab берет название вкладки в качестве параметра и показывает ее в виджете, после формирования YQL URL, и чтения его с помощью метода getJSON. После этого, ответ проходит цикл с помощью $.each и вызывается функция.

script.js - часть 3

function twitter(item)
{
	/* Форматируем твиты, превращая хештеги, упоминания в ссылках URLS в правильные гиперлинки: */

	return $('<div>').html(
		formatString(item.description || item.title)+
		' <a href="'+(item.link || item.origLink)+'" target="_blank">[tweet]</a>'
	);
}

function rss(item)
{
	return $('<div>').html(
		formatString(item.title.content || item.title)+
		' <a href="'+(item.origLink || item.link[0].href || item.link)+'" target="_blank">[read]</a>'
	);
}

function formatString(str)
{

	str = str.replace(/<[^>]+>/ig,'');
	str=' '+str;
	str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');
	str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');
	str = str.replace(/([^\w])\#([\w\-]+)/gm,'$1<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');
	return str;
}

В последней части у нас 2 функции - twitter и rss. Они берут объект (переданный из $.each d showTab()) и находят путь к ссылке и названию элемента ленты.

Вот и все готово! Пользуйтесь! :)

Данный урок подготовлен для Вас командой сайта http://ruseller.com
Источник урока: www.tutorialzine.com

*
* Рейтинг: 5
Урок создан: 12.2.2010   Просмотров: 6390   Правила перепечатки

Оценивать уроки могут только зарегистрированные пользователи

Если хотите не упустить данный урок, добавьте его в закладки

Пять последних добавленных уроков в рубрике Разное:

*

»Хотите использовать JSON, но не знаете с чего начать?
Слово JSON часто появляется когда кто-нибудь заводит речь об Ajax. Известно, что JSON является другим форматом данных, что он замещает XML, и что многие программисты активно поддерживают его. Но что такое в действительности JSON и в чем его преимущества?


*

»Обзор инструментов для кросс-браузерного тестирования.
Проверка веб приложения на кросс-браузерность является важной частью процедуры разработки проекта. Количество используемых браузеров постоянно растет, что чётко определяет необходимость автоматического инструмента, который окажется хорошим подспорьем для обеспечения усложняющегося процесса проверки. В данной статье приводится краткий обзор различных приложений и сервисов для проверки на кросс-браузерную совместимость.


*

»7 пунктов JavaScript, которые облегчат жизнь новичкам
Изучение языка программирования может продолжаться вечно. Даже опытные разработчики постоянно открывают для себя новые нюансы использования синтаксических конструкций. В данном уроке мы представим несколько моментов JavaScript, которые будут очень полезны для новичков.


*

»20 советов по оптимальному использованию MySQL
Операции с базой данных очень часто становятся узким местом при реализации веб проекта. Вопросы оптимизации в таких случаях касаются не только администратора базы данных. Программистам нужно правильно выполнять структурирование таблиц, писать оптимальные запросы и более производительный код. В данной статье приводится небольшой список техник оптимизации работы с MySQL для программистов.


*

»10 бесплатных редакторов для веб страниц
Каждый веб дизайнер и кодер нуждается в хорошем редакторе веб страниц для создания и редактирования HTML, CSS и JavaScript кода. Notepad (Windows) и TextEdit (Mac) — отличные инструменты для начала, но вскоре по мере накопления опыта работы захочется использовать более солидный и удобный инструмент.


Зарегистрируйтесь, чтобы иметь возможность добавлять комментарии


Комментарии:

аватар
*

Автор: Игорь (2010-02-13 10:10:32)

Супер!!!

аватар
*

Автор: Stakan (2010-02-13 09:32:29)

О, клас, давно искал что-то подобное!)) Спасибо!

аватар
*

Автор: Alexxhub (2010-02-13 04:52:02)

О, наконец-то перевели, а то давно изучил, но на английском осталось много недосказанного для меня

аватар
*

Автор: НикитаКратинов (2010-02-12 18:40:36)

Спасибо пригодиться. :)


поиск

Ваш поисковый запрос:

Если Вы давно мечтаете о создании собственного блога на движке Wordpress, то советую Вам обратить внимание на мой новый видеокурс "Wordpress - Профессиональный блог за один день". Это более 100 видеоуроков по всем аспектам создания и ведения своего блога на самом популярном движке в мире.

*
timeline таймлайн временная шкала скрипт библиотека событие куки mvc массив xsl сервисы база данных cookie баннер тень mysql html5 центрирование joomla sql курсор css3 закладки oop wordpress часы пароль баги чат звезды ускорение twitter google maps html 5 прозрачность ie6 png seo gd library cookies rss рейтинг цитаты блог комментарии theme тема генератор captcha cycle z index позиционирование загрузка кеширование бегущая строка тест домен советы текст видео регистрация текстуры radikal.ru фото favicon слайдшоу карта лента загрузка файлов голосование опрос поля формы api чарты диаграммы mod rewrite календарь спрайты текстовое поле константа include защита multiple select htaccess выпадающие списки миниатюры сообщения чекбоксы новостной блок вкладки выезжающая панель форма шпаргалка обзоры таблица анимация верстка wysiwyg wysiwig cms faq уголок разное ссылки редакторы email mootools списки юзабилити модальные окна плагины web дизайн счетчик аудио flash ajax слайдер окна javascript html кодинг оптимизация шаблоны формы кнопка меню изображения фон подсказки css контактная форма php ротатор галерея jquery

Меня часто спрашивают, как я раскручивал данный сайт?

Мой ответ таков. Для раскрутки данного сайта использовалась методика "Мастер план по раскрутке сайта", которая была предложена Юсуфом Губайдуллиным в начале 2009-го года.

*


Copyright © 2008 Евгений Попов.| Все права защищены. | Служба поддержки