Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2012, 18:14
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

jQuery Template на Спиши.ру
Всем привет! Как организован вывод ссылок на решённые номера на этом сайте http://spishy.ru/homework/books/6/9/7255 ?
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2012, 18:26
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

http://habrahabr.ru/blogs/jquery/112843/
или сформулируйте свой вопрос точнее.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.01.2012 в 18:29.
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2012, 18:32
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

DjDiablo, это не то.

Мне кажется, помоему случае как то подругому реализовано. Я не нашёл в коде шаблона
Может кто посмотрит что там?
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2012, 18:46
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Шаблонов там дофига, но помоему они все на социалку.
Книги на стороне сервера генерятся. Т
Я понять немогу что ты под решёнными заданиями понимаешь. Синии звёздочки чтоли, дак там два тега , им шаблон не нужен.

Сами данные о заданиях хранятся в объекте windowsbook. Очевидно этот обьект генерировался вместе со страницей. То есть никакого ajax ту то нету, все данные выданы вместе со страницей.

Сам скрипт ответственный за звёздочки расположен в файле по ссылке http://spishy.ru/js/_all.js?7

вот фрагмент кода.
var Homework = (function() {
	// onDocumentReady
	$(function() {
		if (typeof book === "undefined") return;

		Homework.showTasks(book.tasks);

		if ($(".homework .tasks").length) {
			var selected = [];
			var $task = $(".homework .task");
			if ($task.length) {
				var selected = Homework.getSSelectedTopics(book.topics, $task.data("id")) || [];
			}

			Homework.addSelect(book.topics, selected);

			$(".homework .task").show();
		}
	});

	return {
		addSelect: function(topics, selected) {
			var $topics = $(".homework .topics");
			if (!$topics.length) return;

			if (typeof selected === "undefined") selected = [];

			var options = [];
			$.each(topics, function(id, data) {
				var $option = $("<option>").attr("value", id).text(data.name);
				options.push($option);
			});
			if (!options.length) return;

			var $select = $("<select>").attr("name", "topic[]").data("topics", topics).change(function(e, selected) {
				selected = selected || [];

				$(".homework .task").hide();

				$(this).nextAll("select").remove();
				Homework.removeTasks();

				if (selected.length) {
					var id = selected.shift();
					$(this).val(id);
				} else {
					var id = $(this).val();
				}
				if (!id) return;
				
				var topics = $(this).data("topics");
				if (!topics[id]) return;
				
				Homework.showTasks(topics[id].tasks);
				Homework.addSelect(topics[id].topics, selected);
			});

			var $option = $("<option>").attr("value", "").text("Выберите...");
			$select.append($option);
			for (var i in options) {
				$select.append(options[i]);
			}

			$topics.append($select);
			$select.trigger("change", [selected]);
		},

		showTasks: function(tasks) {
			var $tasks = $(".homework .tasks");
			if (!$tasks.length) return;

			this.removeTasks();
			
			var task_id = $(".homework .task").data("id");
				
			var url = $tasks.data("url");

			var $ul;
			var i = 0;
			$.each(tasks, function() {
				var id   = this.id;
				var name = this.name;
			
				if (!$ul) $ul = $("<ul>").addClass("star-blue");
				
				var $a = $("<a>").attr("href", url + id).text(name);
				
				var $li = $("<li>");
				if (id == task_id) $li.addClass("selected");

				$ul.append($li.append($a));
				i++;
				
				if (i >= 10) {
					$tasks.append($ul);
					$ul = null;
					i = 0;
				}
			});
			if ($ul) $tasks.append($ul);
		},

		removeTasks: function() {
			$(".homework .tasks > ul").remove();
		},

		getSSelectedTopics: function(topics, id) {
			for (var topic_id in topics) {
				var length = topics[topic_id].tasks.length;
				for (var i = 0; i < length; i++) {
					if (topics[topic_id].tasks[i].id == id) return [topic_id];
				}
				var selected = Homework.getSSelectedTopics(topics[topic_id].topics, id);
				if (selected) {
					selected.unshift(topic_id);
					return selected;
				}
			}
		}
	}
}());


вместо шаблонизатора как видишь используется вот такая вот нехитрая конструкция, внутри цикла

бла бла бла
                                //забадяжем ul
 	 			if (!$ul) $ul = $("<ul>").addClass("star-blue");
                                // замутим ссылку
				var $a = $("<a>").attr("href", url + id).text(name);

                                // сморганим li				
				var $li = $("<li>");
				if (id == task_id) $li.addClass("selected");

                                // впендюрим <li> внутрь <ul>, <а> воткнём внутрь <li>
				$ul.append($li.append($a));
                        Бла бла бла
                        .....
		
                        //Запихиваем это в элемент task что в браузере виден.
			if ($ul) $tasks.append($ul);
		
           //И вот оно счастие. Работает даже без шаблонизатора ))))))))


Надеюсь это то что вас интересовало )
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.01.2012 в 19:23.
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2012, 20:00
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

DjDiablo, спасибо! Это как раз то, что мне нужно.

Теперь вопрос другой. Как сделать чтобы такой код срабатывал у меня на сайте! Предположим, что массив с данными у меня уже есть.

Я граб пишу

Последний раз редактировалось ВыносМозга, 14.01.2012 в 20:24.
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2012, 21:15
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Пардон я опять не догоняю, вы пытаетесь понять как парсить, или просто хотите аналогичное отображение у себя на сайте ?

Если парсить, то думаю так:
Получите страницу что хотите отпарсить, найдите содержимое объекта window.book в скрипте и получите это содержимое, всё это придётся делать регулярными выражениями. А дальше работайте с извлечённым содержимым как с json. Что дальше с данными делать, в какие таблицы базы данных сохранять, это вы сами решите. Что касается названия книги, то его вы легко извлекёте из html.

Если вы хотите аналогичное отображение на своём сайте
, то homework который я привёл это готовый блок ответственный за данный функционал. Напишите свою реализацию. Уж как change у select обрабатывать, и в цикле массив выводить мне думаю нет смысла описывать. Вы наверняка и так знаете.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.01.2012 в 21:22.
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2012, 12:37
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

DjDiablo, спасибо, но это не совсем то что мне нужно. Прост скажите как запустить код homework после загрузки страницы. Спасибо.
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2012, 12:46
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

Цитата:
Если парсить, то думаю так:
Получите страницу что хотите отпарсить, найдите содержимое объекта window.book в скрипте и получите это содержимое, всё это придётся делать регулярными выражениями. А дальше работайте с извлечённым содержимым как с json. Что дальше с данными делать, в какие таблицы базы данных сохранять, это вы сами решите. Что касается названия книги, то его вы легко извлекёте из html.
Я, средставми php вырезаю весь window.book, потом вывожу Homework и window.book, но список заданий почемуто не выводится
Ответить с цитированием
  #9 (permalink)  
Старый 15.01.2012, 12:48
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

Мне нужно чтобы именно этот код Homework заработал у меня

Последний раз редактировалось ВыносМозга, 15.01.2012 в 13:15.
Ответить с цитированием
  #10 (permalink)  
Старый 15.01.2012, 16:13
Новичок на форуме
Отправить личное сообщение для ВыносМозга Посмотреть профиль Найти все сообщения от ВыносМозга
 
Регистрация: 14.01.2012
Сообщений: 8

СДЕЛАЛ!!!!!!!!!! Оказалось что кроме homework ещё нужна одна вия из _all.js и ещё fackybox, но я так и не понял зачем он там нужен, но без него срипт не робит
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамически загружаемая jQuery и jQuery-функции в одном файле 67bytes Общие вопросы Javascript 6 06.03.2013 09:01
2 разных модуля на jQuery - как подключить? finder jQuery 4 23.03.2012 22:29
Template CMS 2.0 Awilum Ваши сайты и скрипты 40 14.05.2011 17:30
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16