Последние сообщения на AJAX

Автор ALINA, 09 ноября 2014, 19:22:56

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 13:35:12У меня вот такой файл стилей вышел
На маленьких экранах действительно лучше в столбик.
#my_recent{width:100%}
#left_recent_col{float:left;min-width:49.5%;max-width:49.5%}
#right_recent_col{float:left;min-width:49.5%;max-width:49.5%;margin-left:1%}
.onerecent2{display:block;margin:3px 0;padding:1px 4px;text-decoration:none!important;min-height:1.6em;border:1px solid #475d75!important;border-radius:5px}
.onerecent2:hover{background:#fcfcff}
.recent_button{margin:0 5px 0 0;padding:3px}
#renew_block{float:right}
#renew_button{float:left}
@media only screen and (max-width:520px) {
#left_recent_col,#right_recent_col{min-width:100%;max-width:100%;margin-left:0%}
}
тогда лучше вообще сделать резайз колонок на css.. а JS вырезать..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 18 июня 2017, 13:47:28тогда лучше вообще сделать резайз колонок на css.. а JS вырезать..
Подскажи где это тут сделать тогда?А то Гугл начал материться на кол-во блокирующих скриптов.
Это ж надо будет и в JS код убрать ненужный теперь?

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 13:50:03Подскажи где это тут сделать тогда?А то Гугл начал материться на кол-во блокирующих скриптов.
Это ж надо будет и в JS код убрать ненужный теперь?
функция sizeRecentTopics() поставь в ней на первом месте return; тогда не будет менять размер средствами JS)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 18 июня 2017, 14:04:03функция sizeRecentTopics() поставь в ней на первом месте return; тогда не будет менять размер средствами JS)
Если не затруднит Алексей
/*!
 * jQuery Cookie Plugin v1.4.1
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2006, 2014 Klaus Hartl
 * Released under the MIT license
 */
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD (Register as an anonymous module)
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {

var pluses = /\+/g;

function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}

function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}

function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}

function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}

try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}

function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}

var config = $.cookie = function (key, value, options) {

// Write

if (arguments.length > 1 && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);

if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
}

return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path    ? '; path=' + options.path : '',
options.domain  ? '; domain=' + options.domain : '',
options.secure  ? '; secure' : ''
].join(''));
}

// Read

var result = key ? undefined : {},
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
cookies = document.cookie ? document.cookie.split('; ') : [],
i = 0,
l = cookies.length;

for (; i < l; i++) {
var parts = cookies[i].split('='),
name = decode(parts.shift()),
cookie = parts.join('=');

if (key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}

// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}

return result;
};

config.defaults = {};

$.removeCookie = function (key, options) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return !$.cookie(key);
};

}));

var itemsOnPage = 12;
var statusButton = 1;
var my_timer_id = 0;
var renew_cookies = $.cookie('my_recent_renew');
var my_timer_period = 10; //секунды

$(function() {

sizeRecentTopics();

if(renew_cookies == 'true'){
startCountdown();
buildRecentTopics();
$("#renew").attr("checked","checked");
setMyTimer('on');
} else {
buildRecentTopics();
}


$('#renew_button').on('click', function(){
buildRecentTopics();
});


$('#renew').on('click', function(){
var val = $('#renew').prop("checked");
clearInterval('id_nums_timer');
$.cookie('my_recent_renew', val);
if(val === true){
setMyTimer('on');
startCountdown();

} else {
setMyTimer('off');
}
});

$('body').on('click', '.recent_button', function(){
statusButton = $(this).val();
buildRecentTopics();
});

$(window).on('resize', function(){
sizeRecentTopics();
});

});


function sizeRecentTopics(){
var width = (($('#my_recent').innerWidth()) / 2);
width = Math.floor(width);

$('#left_recent_col').css({"width": width + "px"});
$('#right_recent_col').css({"width": width + "px"});

}


function buildRecentTopics(){
$.getJSON( "/my_recent_topics2/ajax.php", function( data ) {

if(data.length == 0) return;

var numsButton = data.length / itemsOnPage;
numsButton = Math.ceil(numsButton);


if(numsButton > 1){
buildButton(numsButton);
}

buildListTopics(data);

});
 
}

function buildButton(num){
var btn = '';

for (i = 1; i <= num; i++){
btn += '<button id="btn_'+i+'" type="button" class="recent_button" value="' + i + '">' + ( ( i * itemsOnPage ) - itemsOnPage + 1 ) + '-' + ( i * itemsOnPage ) + '</button>';
}


$('#my_btn_recent').html(btn);
$('#btn_' + statusButton).css({"background": "#f8f8f8"});

}

function buildListTopics(data){

$('#left_recent_col').html('');
$('#right_recent_col').html('');

var itemStart = (statusButton * itemsOnPage) - itemsOnPage; //0
var itemHalf = itemStart + (itemsOnPage / 2) - 1; //5
var itemEnd = (statusButton * itemsOnPage) - 1; //11
var leftCol = '';
var rightCol = '';

$.each( data, function( key, val ) {
if( key >= itemStart && key <= itemHalf ){
leftCol += val;
}

if( key > itemHalf && key <= itemEnd ){
rightCol += val;
}

});

$('#left_recent_col').html(leftCol);
$('#right_recent_col').html(rightCol);

}

function setMyTimer(stat){
if(stat == 'on'){

my_timer_id = setInterval(function(){
buildRecentTopics();
} , 1000 * my_timer_period);
} else {
startFrom = my_timer_period;
clearInterval(id_nums_timer);
$('#renew_button').val('Обновить');

clearInterval(my_timer_id);
$('#renew_button').val('Обновить');
}
}


startFrom = 0;
id_nums_timer = 0;
function startCountdown(){
startFrom = my_timer_period;
id_nums_timer = setInterval(function(){
$('#renew_button').val('Обновить (' + startFrom + ')');
startFrom--;
if(startFrom == -1){
startFrom = my_timer_period;
}

}, 1000);
}

kak2z

вот эта функция
function sizeRecentTopics(){
var width = (($('#my_recent').innerWidth()) / 2);
width = Math.floor(width);

$('#left_recent_col').css({"width": width + "px"});
$('#right_recent_col').css({"width": width + "px"});

}
она в нескольких местах вызывается, но она войдовая.. так что ничего не возвращается..

вот так ее сделать
function sizeRecentTopics(){
return;
var width = (($('#my_recent').innerWidth()) / 2);
width = Math.floor(width);

$('#left_recent_col').css({"width": width + "px"});
$('#right_recent_col').css({"width": width + "px"});

}
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Спасибо,отключил.
А блок так и должен схлопываться и потом раскрываться при обновлении страницы?

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 14:33:07Спасибо,отключил.
А блок так и должен схлопываться и потом раскрываться при обновлении страницы?
да... тут же смысл в чем, страница загружается, через AJAX дергается скрипт и загружаются все 60 последних топиков..
потом начинается вычисляться.. если топиков меньше чем 60 загрузилось то высчитываем количество кнопок которые отобразить надо..
а потом исходя и нажатой кнопки отображаем нужные топики из тех 60 что мы загрузили ранее..
то есть по сути когда страница грузится то она еще не знает про наличие последних сообщений..
теоретически можно сделать так что бы и при загрузке сразу топики грузились.. но это когда будет время)) вчера я просто немного ошалел от работы)) и решил отвлечься)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

#157
Цитата: kak2z от 18 июня 2017, 14:57:54да... тут же смысл в чем, страница загружается, через AJAX дергается скрипт и загружаются все 60 последних топиков..
потом начинается вычисляться.. если топиков меньше чем 60 загрузилось то высчитываем количество кнопок которые отобразить надо..
а потом исходя и нажатой кнопки отображаем нужные топики из тех 60 что мы загрузили ранее..
то есть по сути когда страница грузится то она еще не знает про наличие последних сообщений..
теоретически можно сделать так что бы и при загрузке сразу топики грузились.. но это когда будет время)) вчера я просто немного ошалел от работы)) и решил отвлечься)
Оно смотри что вышло - что-то пока непонятное.
Все скрипты которые раньше грузились только в теме - они теперь все и на главной подгружаются.Я проверил исходный код и вот что увидел - у меня 6 скриптов подгружаются в самом конце страницы получается.Хотя раньше они грузились только там где им нужно.
Отключаеш блок и все в порядке,подгрузки этих скриптов нет.
Кстати и со стилями тоже самое.
И это делает вот это
echo '<script src="/my_recent_topics/recent_topics2.js" type="text/javascript"></script>';
Если это отключить то нет вывода блока и нет подгрузки лишних скриптов соотв
Цитата: kak2z от 18 июня 2017, 14:57:54вчера я просто немного ошалел от работы)) и решил отвлечься)
А отвлекся хорошо :D  O0

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 15:02:11И это делает вот это
echo '<script src="/my_recent_topics/recent_topics2.js" type="text/javascript"></script>';
не должно.. в нем то нет ничего особого то..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

#159
Цитата: kak2z от 18 июня 2017, 15:34:21не должно.. в нем то нет ничего особого то..
Хм,непонятно конечно же.Ну да и ладно.
Да фиг с ним...

Yarik

Логи апача забомбило вот этим
PHP Warning:  Missing argument 2 for ViewPagination2(), called /my_recent_topics/ajax.php on line 5 and defined in /my_recent_topics/func.php on line 68

PHP Warning:  Missing argument 3 for ViewPagination2(), called /my_recent_topics/ajax.php on line 5 and defined in /my_recent_topics/func.php on line 68, referer: https://yarik-sat.ru/
   

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 17:41:32Логи апача забомбило вот этим
PHP Warning:  Missing argument 2 for ViewPagination2(), called /my_recent_topics/ajax.php on line 5 and defined in /my_recent_topics/func.php on line 68

PHP Warning:  Missing argument 3 for ViewPagination2(), called /my_recent_topics/ajax.php on line 5 and defined in /my_recent_topics/func.php on line 68, referer: https://yarik-sat.ru/
   
да.. есть такое дело...

файл func.php
эту строку
function ViewPagination2($last_topics_arr, $page, $topic_on_page){привести в такой вид
function ViewPagination2($last_topics_arr){
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik


kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 18:54:59Пока полет нормальный.
да.. так и должно быть)) это хвост от старого приложения остался..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 18 июня 2017, 18:59:17да.. так и должно быть)) это хвост от старого приложения остался..
Ага,у меня какой-то дятел с Киевстара в my_recent_topics/recent_topics.php уже 16-ть часов долбится. wallbash

kak2z

Цитата: S.T.A.L.K.E.R. от 18 июня 2017, 21:28:04Ага,у меня какой-то дятел с Киевстара в my_recent_topics/recent_topics.php уже 16-ть часов долбится. wallbash
забыл вкладку закрыть)) это то о чем я говорил))
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 18 июня 2017, 21:51:27забыл вкладку закрыть)) это то о чем я говорил))
Да бот какой-то был 100%.Наплывами ошибки сыпали...То отчалит,то опять начинает сыпать.Я для успокоения пробил айпи его - вроде как чист.А недавно его серверный файрвол прибанил на сутки - по кол-ву запросов борзеть начал.

Yarik

Я так понимаю мод при  работе опирается на куки и поставить галочку обновлять автоматически живет ровно время жизни куки.
Народ пишет что ставит галочку обновлять автоматически но её сбрасывает через время.Посмотрел - вроде по времени похоже на время жизни куки.Это так?
Если это так то это только жирный +

kak2z

Цитата: S.T.A.L.K.E.R. от 22 июня 2017, 08:36:23Я так понимаю мод при  работе опирается на куки и поставить галочку обновлять автоматически живет ровно время жизни куки.
Народ пишет что ставит галочку обновлять автоматически но её сбрасывает через время.Посмотрел - вроде по времени похоже на время жизни куки.Это так?
Если это так то это только жирный +
да.. в куки записывает значение чекбокса..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 22 июня 2017, 08:52:30да.. в куки записывает значение чекбокса..
Тогда просто превосходно что нет чекбокса запомнит меня.
Сознательно так было сделанно?

kak2z

Цитата: S.T.A.L.K.E.R. от 22 июня 2017, 08:59:42Тогда просто превосходно что нет чекбокса запомнит меня.
Сознательно так было сделанно?
куками воспользовался сознательно)) вариантов больше нет где хранить значение чекбокса)) в сессиях это дело было было наверно не очень правильно... а время жизни кук каждый сам для себя выставляет какое больше нравится)) у меня 20 дней хранятся куки)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

gorbi

Киньте ссыль на пример работающего мода.

Yarik

Цитата: gorbi от 22 июня 2017, 17:25:53Киньте ссыль на пример работающего мода.
Мода пока ещё нет - но этот поставить значительно проще стало - https://yarik-sat.ru

Yarik

#173
Алексей только сейчас заметил гостем.
Ссылка из под юзера на переход - https://yarik-sat.ru/index.php?topic=87.msg8595;topicseen#new
Из под гостя - https://yarik-sat.ru/index.php?topic=87.msg0;topicseen#new это таже самая ссылка.Куда не ткни будет кидать на первую страницу темы.Поле msg всегода равно 0 для гостей.Неудобно.
Для гостей и для юзеров получается разное заполнение?
Причина вот тут
$boardurl.'/index.php?topic='.$last_topics_arr[$key]['id_topic'].'.msg'.$last_topics_arr[$key]['new_from'].';topicseen#new">Себе я уже пофиксил.Дело все в этом - ['new_from']

kak2z

Цитата: S.T.A.L.K.E.R. от 26 июня 2017, 20:46:26Алексей только сейчас заметил гостем.
Ссылка из под юзера на переход - https://yarik-sat.ru/index.php?topic=87.msg8595;topicseen#new
Из под гостя - https://yarik-sat.ru/index.php?topic=87.msg0;topicseen#new это таже самая ссылка.Куда не ткни будет кидать на первую страницу темы.Поле msg всегода равно 0 для гостей.Неудобно.
Для гостей и для юзеров получается разное заполнение?
Причина вот тут
$boardurl.'/index.php?topic='.$last_topics_arr[$key]['id_topic'].'.msg'.$last_topics_arr[$key]['new_from'].';topicseen#new">Себе я уже пофиксил.Дело все в этом - ['new_from']
авторизированных пользователей же кидает сразу на первое непрочитанное сообщение..
а у гостей же нет непрочитанных сообщений..поэтому кидает на первое сообщение.. так и задумывал)) а куда должно?
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 26 июня 2017, 21:20:41авторизированных пользователей же кидает сразу на первое непрочитанное сообщение..
а у гостей же нет непрочитанных сообщений..поэтому кидает на первое сообщение.. так и задумывал)) а куда должно?
Ну в реале на последнее хотя бы.Ругаются.
Да у юзеров я заметил что на последнее непрочитанное.А вот гостей на первую.А в теме много страниц.

kak2z

Цитата: S.T.A.L.K.E.R. от 26 июня 2017, 21:46:47Ну в реале на последнее хотя бы.Ругаются.
Да у юзеров я заметил что на последнее непрочитанное.А вот гостей на первую.А в теме много страниц.
ну я рассуждал как... если гость то зачем ему нужно последнее сообщение.. ему нужно первое.. что бы увидеть первый пост топика.. а потом уже читать комменты) а Алине помню делали что бы на последнее переходило))
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Yarik

Цитата: kak2z от 26 июня 2017, 22:11:13ну я рассуждал как... если гость то зачем ему нужно последнее сообщение.. ему нужно первое.. что бы увидеть первый пост топика.. а потом уже читать комменты) а Алине помню делали что бы на последнее переходило))
Ну когда в топике под 100 страниц и пользователя перекидывает на первый пост...
У меня специфика такова что даже последний пост в теме бывает устаревает за три часа.
Да я уже тоже переделал,чтоб переходило на последний пост так же.Отличый мод.

Yarik

Цитата: S.T.A.L.K.E.R. от 27 июня 2017, 06:54:24Ну когда в топике под 100 страниц и пользователя перекидывает на первый пост...
У меня специфика такова что даже последний пост в теме бывает устаревает за три часа.
Да я уже тоже переделал,чтоб переходило на последний пост так же.Отличый мод.
Пересмотрел немного логику,зарегенных кидает на последнее не прочитанное сообщение в теме.
Ну а у гостей непрочитанных сообщений не бывает,их кадает на самое последнее сообщение в теме
Переделка
if ($context['user']['is_guest']){
function ViewPagination2($last_topics_arr){
 
    global $user_info, $boardurl;
    $arr = array();
    if(count($last_topics_arr)>0){
        foreach ($last_topics_arr AS $key=>$value){
       
            $arr[] = '<a class="windowbg2 onerecent2" href="'.$boardurl.'/index.php?topic='.$last_topics_arr[$key]['id_topic'].'.msg'.$last_topics_arr[$key]['id_msg'].';topicseen#new">'. ($key + 1) .'. <i><strong>'.$last_topics_arr[$key]['subject'].'</strong></i> в <i><strong>('.$last_topics_arr[$key]['board_name'].')'.(!$last_topics_arr[$key]['is_read'] ? '&nbsp<img src="'.$boardurl.'/Themes/default/images/russian-utf8/new.gif" alt="" />' : '').'</strong></i> от <i><strong><span'.((isset($last_topics_arr[$key]['online_color']) && $last_topics_arr[$key]['online_color']!='')?(' style="color: '.$last_topics_arr[$key]['online_color'].'"'):('')).'>'.$last_topics_arr[$key]['poster_name'].' </span></strong></i>('.timeformat($last_topics_arr[$key]['poster_time']).')</span></i></a>';
 
        }
    }

return json_encode($arr);
die();

}
}
if ($context['user']['is_logged']){
function ViewPagination2($last_topics_arr){
 
    global $user_info, $boardurl;
    $arr = array();
    if(count($last_topics_arr)>0){
        foreach ($last_topics_arr AS $key=>$value){
       
            $arr[] = '<a class="windowbg2 onerecent2" href="'.$boardurl.'/index.php?topic='.$last_topics_arr[$key]['id_topic'].'.msg'.$last_topics_arr[$key]['new_from'].';topicseen#new">'. ($key + 1) .'. <i><strong>'.$last_topics_arr[$key]['subject'].'</strong></i> в <i><strong>('.$last_topics_arr[$key]['board_name'].')'.(!$last_topics_arr[$key]['is_read'] ? '&nbsp<img src="'.$boardurl.'/Themes/default/images/russian-utf8/new.gif" alt="" />' : '').'</strong></i> от <i><strong><span'.((isset($last_topics_arr[$key]['online_color']) && $last_topics_arr[$key]['online_color']!='')?(' style="color: '.$last_topics_arr[$key]['online_color'].'"'):('')).'>'.$last_topics_arr[$key]['poster_name'].' </span></strong></i>('.timeformat($last_topics_arr[$key]['poster_time']).')</span></i></a>';
 
        }
    }

return json_encode($arr);
die();

}
}