Фильтр по:
  

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Admin, Cибиря4ка, Komoff, Diana  
Скрипты и коды для юкоз - Форум аццкого кодера » Раздел для начинающих » Если вы пришли за помощью, то Вам сюда... » Вопросы от Винни
Вопросы от Винни
Дата: Четверг, 31.07.2014, 11:53 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


Здравствуйте!

Появилось несколько вопросов касательно юкоза... Сам их решить не смог, недели две наверное бьюсь. Вот решил написать.)

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

На все эти информеры распрострянется действие сортировщика, чтобы материалы шли в правильном порядке (ну, лента в общем).

Задача состоит в следующем. Как сделать общий переключатель по материалам информеров? То есть отсчиталось 30 материалов (как пример), последующие материалы обрубаются и доступны уже на другой, так сказать, странице.

Я прочел вот эту тему - http://likbezz.ru/forum/68-762-9581-16-1336339366 Круто, но сумел применить только к информерам по отдельности.

На всякий случай прикрепляю сортировщик:

Код
<div id="feed">   
$MYINF_1$   
$MYINF_2$   
$MYINF_3$   
$MYINF_4$  
$MYINF_5$  
</div>   
<script type="text/javascript">   
function parseDate(input) {   
var parts = input.match(/(\d+)/g);   
return new Date(parts[2],parts[1]-1,parts[0],parts[3]-1,parts[4]-1,Math.random()).getTime();   
}   
$(document).ready(function() {   
var elems = $.makeArray($('#feed .feed-item'));   
elems.sort(function(a, b) {   
if (parseDate($(a).find('.feed-date').text()) > parseDate($(b).find('.feed-date').text())) return -1;   
if (parseDate($(a).find('.feed-date').text()) < parseDate($(b).find('.feed-date').text())) return 1;   
return 0;   
});   
$('#feed').html(elems);   
});   
</script>


Обрамление даты в информере:
Код
<span class="feed-date">$DATE$ в $TIME$</span>


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


 
Дата: Пятница, 01.08.2014, 11:53 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Чт, 31.07.2014, 11:53:20
Как сделать общий переключатель по материалам информеров? То есть отсчиталось 30 материалов (как пример), последующие материалы обрубаются и доступны уже на другой, так сказать, странице.

Ну, можно через табы - вкладки, ..
для этого нужен скрипт самих вкладок и модифицировать сортировщик, что бы он формировал html код для табов.
По сути - там должны быть управляющие элементы - список страниц, и блоки контента.
По завершению формирования кода, запускать скрипт вкладок.

Как-то так.


 
Дата: Пятница, 01.08.2014, 14:10 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, ура, вы пришли.)) Вчера заснул, так и не дождался.

Цитата
Ну, можно через табы - вкладки, ..
для этого нужен скрипт самих вкладок и модифицировать сортировщик, что бы он формировал html код для табов.
По сути - там должны быть управляющие элементы - список страниц, и блоки контента.
По завершению формирования кода, запускать скрипт вкладок.

Поможете? Мне бы хоть самый простенький пример. Реально ничего не получается, как не пытался.(


 
Дата: Пятница, 01.08.2014, 15:16 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Пт, 01.08.2014, 14:10:58
Поможете? Мне бы хоть самый простенький пример

Ссылку на страницу с информерами, попробую ..)


 
Дата: Пятница, 01.08.2014, 15:49 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, вот наше чудовище.))



 
Дата: Суббота, 02.08.2014, 12:34 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Пт, 01.08.2014, 14:10:58
Мне бы хоть самый простенький пример

Ну, типа так:

Управляющие элементы:
Код
<a href="javascript://" onclick="$('#feed .cont').hide();$('#feed .cont').eq(0).show();return false;">1</a>
<a href="javascript://" onclick="$('#feed .cont').hide();$('#feed .cont').eq(1).show();return false;">2</a>
<a href="javascript://" onclick="$('#feed .cont').hide();$('#feed .cont').eq(2).show();return false;">3</a>


Построение блоков:
Код
var elems = $.makeArray($('#feed .master_module_item'));
elems.sort(function(a, b) {
if (parseDate($(a).find('.feed-date').text()) > parseDate($(b).find('.feed-date').text())) return -1;
if (parseDate($(a).find('.feed-date').text()) < parseDate($(b).find('.feed-date').text())) return 1;
return 0;
});
for(i=0,j=elems.length,html='<div class="cont">';i<j;i++){
  if(i%30==0&&i!=0){
   html+='</div><div class="cont hide '+i+'">';
  }
  html+=$(elems[i]).wrap('<div />').parent().html();
  if(i==j){
   html+='</div>';
  }
}
$('#feed').html(html);


http://likbezz.ru/_example/_rest/_2014/p1/arkham-world_2.html


 
Дата: Воскресенье, 03.08.2014, 01:16 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, офигеть. оО Прям конкретно под наш сайт... Спасибо.))
Сейчас пробовать буду.) Немного позже отпишусь.

Добавлено (02.08.2014, 20:28)
---------------------------------------------
likbezz, все, разобрался.)) Только одно не понял - как сделать, чтобы страница при переключении поднялась наверх (к верхним подгруженным материалам)?

Добавлено (03.08.2014, 01:16)
---------------------------------------------
Блин. Ступил.

У нас точного количество материалов в каждом информере нет. То есть там может быть и 50 и 100 и больше. Сколько добавлено, столько и выводится (это первоначальная идея).

likbezz, можете показать как сделать так, чтобы были не переключатели, а кнопка "Подгрузить еще"? И так до тех пор, пока не кончаться материалы в информерах.

Извините, что не сразу донес мысль. Только сейчас дошло, что придется вручную добавлять переключатели страниц (в зависимости от увеличения объема материала).

Хотя сам виноват, надо было правильно писать. Возможно, что "такую кнопку" делать дольше . Тогда бы просто решить проблему с "поднятием страницы наверх".) А то при переключении не очень удобно...

 
Дата: Воскресенье, 03.08.2014, 14:18 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Вс, 03.08.2014, 01:16:17
likbezz, можете показать как сделать так, чтобы были не переключатели, а кнопка "Подгрузить еще"? И так до тех пор, пока не кончаться материалы в информерах.

ok
ближе к вечеру..


 
Дата: Воскресенье, 03.08.2014, 22:57 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Вс, 03.08.2014, 01:16:17
likbezz, можете показать как сделать так, чтобы были не переключатели, а кнопка "Подгрузить еще"? И так до тех пор, пока не кончаться материалы в информерах.


Кнопка:
Код
<a href="javascript://" onclick="nextBox(this);return false;"><b>Подгрузить еще</b></a>


Функция:
Код
function nextBox(a){
var e=$('#feed .hide:hidden');
if(e){
$(e[0]).show();
}
if(e.length==1){
$(a).remove();
}
};


http://likbezz.ru/_example/_rest/_2014/p1/arkham-world_3.html


 
Дата: Понедельник, 04.08.2014, 01:03 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, большое спасибо!! Просто супер. Знал, что здесь точно помогут.

Вот... Из "накипевшего" у меня осталось два вопроса. Задам сначала самый идиотский (вам странным образом удалось сделать так, что вы единственный в сети у кого мне не стремно просить помощи. оО)

Есть скрипт (не мой):

Код
var curstate = location.href;
function apoloadme(id, url) {
if($('div.apoloadfull' + id).html() == '') {
if(curstate != url) {
history.replaceState(null, null, url);
}
$('#loader' + id).fadeIn();
$('div.apoloadfull' + id).load(url + ' #apoentry', function() {
$('img[id^="loader"]').hide();
$('div#apoent' + id).hide(0);
$('div.apoloadfull' + id).fadeIn(100);
});
}
else
{
history.replaceState(null, null, curstate);
$('img[id^="loader"]').hide();
$('div.apoloadfull' + id).html('').hide();
$('div#apoent' + id).fadeIn(300);
}
}


////

Далее "обертки" и кнопка вызова:

MESSAGE на странице материала загоняем в
Код
<div id="apoentry">$MESSAGE$</div>


В виде материалов ставим
Код
<span onclick="apoloadme('$ID$', '$ENTRY_URL$');return false;">$TITLE$</span> <img src="/images/ajax-loader.gif" id="loader$ID$" style="display:none;" height="8px">


И там же MESSAGE заменяем на
Код
<div id="apoent$ID$">$MESSAGE$</div>
<div class="apoloadfull$ID$"></div>


////

Да... Вроде все.

////

Как заставить это "не подгружать", а "выводить" новое аякс окно с "подгруженным" материалом? Не могу. Думал, что ничего сложного, а капец какой-то.

Понятно, что материал подгружается в блок

Код
<div class="apoloadfull$ID$"></div>


И насколько я понял за "подгрузку" отвечает вот эта часть кода

Код
if($('div.apoloadfull' + id).html() == '') {
if(curstate != url) {
history.replaceState(null, null, url);
}


Но ничего изменить так и не удалось, сколько не ковырял. Аякс окно не открывается.

Получилось сделать альтернативу с гет-запросом. Но гетов на сайте и так хватает и вообще... Совсем не то.( Очень жду помощи.


 
Дата: Понедельник, 04.08.2014, 06:22 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Пн, 04.08.2014, 01:03:47
Получилось сделать альтернативу с гет-запросом. Но гетов на сайте и так хватает и вообще...

Данный скрипт использует гет запрос.

Цитата vinni, Пн, 04.08.2014, 01:03:47
И насколько я понял за "подгрузку" отвечает вот эта часть кода

Нет, вот эта:
Код
$('div.apoloadfull' + id).load(url + ' #apoentry', function() {
$('img[id^="loader"]').hide();
$('div#apoent' + id).hide(0);
$('div.apoloadfull' + id).fadeIn(100);
});

а именно, функция $.load()

Цитата Info
.load()
Осуществляет запрос к серверу без перезагрузки страницы. Полученные от сервера данные будут автоматически помещены внутрь выбранных элементов. Функция имеет несколько необязательных параметров.
.load() является наиболее простым средством для подгрузки и вставки недостающего содержимого с сервера. Он делает ajax-запрос к серверу и вставляет полученные данные в элементы страницы, к которым применялся метод

...

Цитата vinni, Пн, 04.08.2014, 01:03:47
Но ничего изменить так и не удалось, сколько не ковырял. Аякс окно не открывается.

Вместо
Код
$('div.apoloadfull' + id).fadeIn(100);

пихаем код открытия окошка, типа:
Код
new _uWnd('New1','Моё окно 1',500,300,{autosize:1,maxh:300,minh:100},$('div.apoloadfull' + id).html());

где вместо контента указывает блок с подгруженным кодом.
...

Цитата vinni, Пн, 04.08.2014, 01:03:47
И насколько я понял за "подгрузку" отвечает вот эта часть кода

Данная часть просто проверяет наличие подгруженного контента, и заменяет историю.


 
Дата: Понедельник, 04.08.2014, 09:23 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


Цитата
Данный скрипт использует гет запрос.


Цитата
Нет, вот эта:


Цитата
а именно, функция $.load()


Цитата
Данная часть просто проверяет наличие подгруженного контента, и заменяет историю.

Мда... *Чешет затылок*. Ну, ладно. Какие наши годы. хд Зато вкуривать работу скрипта наконец начал.

Цитата
пихаем код открытия окошка, типа:

Все, дошло.)) Спасибо.)

Пошел устанавливать это все и любоваться.) Скоро вернусь с нашей третьей Ахиллесовой пятой.))

Добавлено (04.08.2014, 09:23)
---------------------------------------------
likbezz, а можно к функции закрытия аякс-окна (http://arkham-world.ru/snimok.png) привинтить события onclick-а этой кнопки

Код
onclick="apoloadme('$ID$', '$ENTRY_URL$');return false;"


?

Или так (первый вариант мне кажется "черной магией"):

Как под каждым подгруженным материалом в аякс-окно - вставить кнопку

Код
<span onclick="apoloadme('$ID$', '$ENTRY_URL$');return false;">Закрыть</span>


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


 
Дата: Понедельник, 04.08.2014, 09:52 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Пн, 04.08.2014, 09:23:00
а можно к функции закрытия аякс-окна (http://arkham-world.ru/snimok.png) привинтить события onclick-а этой кнопки

Можно.
Типа:
Код
new _uWnd('New1','Моё окно 1',500,300,{autosize:1,maxh:300,minh:100,onbeforeclose:function(){apoloadme(id,url);}},$('div.apoloadfull' + id).html());


Подробно о создании uWnd (аякс) окошек (примеры реализации)


 
Дата: Понедельник, 04.08.2014, 22:54 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, нашел.

Код
onclose


Цитата
функция, выполняющаяся после закрытия окна.


Блин. Пробую, но пока тщетно.

Добавлено (04.08.2014, 09:52)
---------------------------------------------
likbezz, как раз писал.))

Добавлено (04.08.2014, 09:54)
---------------------------------------------
likbezz, likbezz, вооот... Кайф. Теперь идеал.

Добавлено (04.08.2014, 22:54)
---------------------------------------------
likbezz, ура. Закончил с лентой.)

Вот и третья наша проблема...

Скрипт

Код
function offset(a) {
for (var b = 0; a;) b += parseInt(a.offsetTop), a = a.offsetParent;
return b
}
var s = !0;
window.onload = function () {
var a = document.querySelector(".utility_bar"),
b = offset(a),
f = window.getComputedStyle ? getComputedStyle(a, "") : a.currentStyle,
d = a.offsetHeight + parseInt(f.marginTop) || 0,
e = offset(document.querySelector(".shoes"));
window.onscroll = function () {
var c = window.pageYOffset || document.documentElement.scrollTop,
c = e - (c + d + b);
s != 0 < c && ((s = 0 < c) ? (a.style.top = b + "px", a.style.position = "fixed") : (a.style.top = e - d + "px", a.style.position = "absolute"))
}
};


Стили (на всякий)

Код
.utility_bar {
position: fixed;
width: 100%; min-width: 1010px;
height: 50px;
bottom: 0; left: 0;
background: rgba(5, 5, 5, 0.80);
border-top: 1px solid #252525;
z-index: 111;
}
.utility_bar .utility_bar_content {text-align: center;}
.utility_bar .utility_bar_content a {
position: relative;
display: inline-block;
padding: 0 20px;
background: url(/AW_v5/img/header_main_menu_sep.png) no-repeat right 16px;
font: 18px Georgia, serif; line-height: 50px; text-shadow: 0 0 3px #000; color: #e5e5e5; text-decoration: none;
}
.utility_bar .utility_bar_content a.bn {background: none;}
.utility_bar .utility_bar_content a:hover {color: #B22222;}
.utility_bar .utility_bar_content a img {vertical-align: middle;}


Сам блок

Код
<div class="utility_bar">
<div class="utility_bar_content">
<a class="bn" href="/">ссылка</a>
<a href="/">ссылка</a>
<a class="bn" href="/">ссылка</a>
</div></div>


Суть в том, чтобы абсолютно позиционированный блок замирал над футером. И все хорошо, но при смене высоты страницы (а это дело плевое... Добавил коммент - уже новая высота) скрипт фиксируется на месте, где стоит и дальше никуда. Так и висит там. Исправить не удалось. Не понимаю как сделать так, чтобы скрипт принимал и новую высоту страницы... Скорее всего вообще неправильно подхожу к решению вопроса.(

likbezz, подскажите пожалуйста, как починить?


 
Дата: Вторник, 05.08.2014, 22:30 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


vinni,
Цитата vinni, Пн, 04.08.2014, 22:54:46
подскажите пожалуйста, как починить?

Все то, что в onload продублировать в onscroll
..


 
Скрипты и коды для юкоз - Форум аццкого кодера » Раздел для начинающих » Если вы пришли за помощью, то Вам сюда... » Вопросы от Винни
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:


Мобильная версия