Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Вот же, если отключаешься от сети, то в таком состоянии "быстрое полное" цитирование не работает.
Хе-хе, а ты что думал? Сообщение подгружается с сервера при помощи яваскрипта, нет сервера - нет сообщения
Ну обычное быстрое цитирование и без этого работает, на других движках то же самое.
Кстати, быстрее стало работать "быстрое полное" цитирование, или это у меня канал стал шире?
Баг: при нажатии кнопки "Ответить", в последних 10 сообщениях имеем
Цитировать ( ? Выделите нужный текст в сообщении и нажмите на ссылку Цитировать. Выделенный текст будет помещён в форму быстрого ответа как цитата.)
Но есть предложение отрезать нафиг показ последних 10 сообщений
А то что идет в сообщении http://www.punbb.ru/viewtopic.php?pid=5065#p5065
Это весь комплект? Или сначала надо поставить Quick Quote and Nick Paste, а потом это?
Или это уже 3 в 1ом?
Но есть предложение отрезать нафиг показ последних 10 сообщений
Подробнее можно?
Это весь комплект?
Блин, как всегда забыл, мод ставится поверх обоих, и при установке InstantQuote пропустить шаги 10-15
Px пишет:Но есть предложение отрезать нафиг показ последних 10 сообщений
Подробнее можно?
Присоединяюсь, опиши подробнее.
Slavik пишет:Px пишет:Но есть предложение отрезать нафиг показ последних 10 сообщений
Подробнее можно?
Присоединяюсь, опиши подробнее.
В post.php убрать
//Set background switching on
$bg_switch = true;
$post_count = 0;
while ($cur_post = $db->fetch_assoc($result))
{
// Switch the background color for every message.
$bg_switch = ($bg_switch) ? $bg_switch = false : $bg_switch = true;
$vtbg = ($bg_switch) ? ' roweven' : ' rowodd';
$post_count++;
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);
?>
}
?>
Мде... Судя по коду, это называется "обзор темы". Только вот бага там я не вижу, а уж убирать все это таким способом это ахтунг: Администрирование->Options->Topic review->Count.
Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, Slavik прав.
Хм, замечено что InstantQuote плохо дружит с Ajax Post Preview, тк основаны на одном и том же xajax, поэтому в post.php пока что удается затолкать только один из этих модулей :-(
Бум думать
Мне кажется это из-за того, что объект xajax:
$xajax = new xajax("post.server.php"); // initializing xajax
$xajax->registerFunction("getpreview");
пересоздается в instantquote. Замена на:
require PUN_ROOT.'include/xajax.inc.php';
$xajaxquote = new xajax("quote.server.php"); // initializing xajax
$xajaxquote->registerFunction("quote"); // registers the function that injects the quote into the quick reply field
и соответственно правка в quote.server.php ничего не дает.
Завтра может что-нибудь придумаю
Добавлено Sun Nov 26 19:17:59 2006 :
Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, Slavik прав.
Там исправлять-то нечего вставить:
<a class="quotehint" href="#nogo">(!)</a>
в любое место этой строчки:
<div class="postfootright"><ul><li class="postquote"><a onclick="copyPID('<?php echo $cur_post['id'] ?>');" onmouseover="copyQ('<?php echo pun_htmlspecialchars($cur_post['poster']) ?>');" href="javascript:pasteQ();"><?php echo $lang_topic['Quote'] ?></a> <a class="quotehint" href="#nogo">(!)</a></li></ul></div>
Лучше всего именно так, как указано выше
Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, Slavik прав.
Ну, мне этот обзор темы кажется лишним, потому предпочитаю его убирать
А никто не скрещивал цитирование (как здесь) с модом Active topics http://forums.punbb.org/viewtopic.php?pid=64907#p64907 ?
Мне удалось решить проблемы с кодировкой, но возникла другая беда - в цитировании "( ! )" перестал появляться хинт. Все остальное вроде работает.
При отключении ajax_extern.js хинт работает нормально.
Даже не знаю, куда смотреть, я в ява-скриптах не силен.
P.S. 2Slavik - сдается мне, что здесь есть какая-то хитрость, с этим аяксом. Я конечно понимаю, что эти моды по разному реализованы, но выглядит это странно...
А никто не скрещивал цитирование (как здесь) с модом Active topics
Это не там где еще хинт полупрозрачный? Если да, то у меня работало
2Slavik - сдается мне, что здесь есть какая-то хитрость, с этим аяксом. Я конечно понимаю, что эти моды по разному реализованы, но выглядит это странно...
В том-то и фишка что эти моды реализованы одинаково с помощью одного и того же фреймворка, только толи я чего понимаю, толи девелоперы с объектами что-то напутали. При изменении всех переменных один мод работает, если два мода, то который объявлен позднее работает весьма криво. Пока ничего придумать не удается
Что-то я неправильно выражаюсь. Хинт исчез не в моде Active Topics, а в цитировании, как на этом форуме - когда наводишь мышкой на ( ! ), хинт перестал появляться.
Active Topics не через xajax сделан, у него свой скрипт:
///////////////////////////////////////////
// Script by codexp[at]tasarinan[dot]com //
///////////////////////////////////////////
// How often will the content be refreshed (in seconds)
// Don't set it to low, as that might put a lot of extra stress on the server.
var timer = 15;
// Header text. change this to your liking (default text is from PunBB's common.php).
//var loadTxtNo = '<span class="conr"><a href="javascript:togglecategory(0);"><img src="img/exp_down.png" alt="Collapse" id="img_0" /></a></span><span>Активные темы</span>'; // Text when not loading
//var loadTxt = '<span class="conr"><a href="javascript:togglecategory(0);"><img src="img/exp_down.png" alt="Collapse" id="img_0" /><span>Активные темы: Обновление ...</span>'; // Text while refreshing
var loadTxtNo = '<span>Активные темы</span>'; // Text when not loading
var loadTxt = '<span>Активные темы: Обновление ...</span>'; // Text while refreshing
// This var is used to help prevent IE from caching the results.
var rnd = Math.random;
// The query to run agains extern.php (incl. the scripname itself).
// I would recomment you to add the following to your extern.php, so that you can choose
// how long the topic titles displayed can be:
//
// Directly after line 104, add:
//
// if(isset($_GET['length']))
// $max_subject_length = intval($_GET['length']);
//
var extern_query = 'extern.php?action=active&show=10&length=100&windows-1251=1&rnd='+rnd;
// Check if our browser will support this...
function createRequestObject() {
var req;
if(window.XMLHttpRequest){
// Firefox, Safari, Opera...
req = new XMLHttpRequest();
} else if(window.ActiveXObject) {
// Internet Explorer 5+
req = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return false;
}
return req;
}
// Make the XMLHttpRequest object
var http = createRequestObject();
AJAX_BLOCK: {
if(http===false) {
break AJAX_BLOCK; // We'll break the script here if the browser doesn't support AJAX
}
// Write out the block only if browser supports AJAX
document.write('<div id="rssbox" class="block"><h2 id="rsshead">'+loadTxt+'</h2><div class="box"><div class="inbox"><ul id="rsslist"></ul></div></div></div>');
function getTopics() {
http.open('GET', extern_query, true);
http.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 1990 00:00:00 GMT"); // Prevent IE from caching the results
http.onreadystatechange = handleResponse_extern;
http.send(null);
document.getElementById('rsshead').innerHTML = loadTxt;
}
// Function to handle the data we recieve back from the script.
function handleResponse_extern() {
if(http.readyState == 4 && http.status == 200){
var response = http.responseText;
if(response) {
// UPDATE page with new content
document.getElementById("rsslist").innerHTML = response;
document.getElementById('rsshead').innerHTML = loadTxtNo;
}
// Refresh list of topics ever X*1000msec.
window.setTimeout(getTopics, timer*1000);
}
}
// Update the active topics list when the page loads
window.onload = getTopics;
}
Заметил вот еще что (в конце скрипта): если закомментировать вызов
window.onload = getTopics;
то хинт появляется, а вот если его раскомментировать, но закомментировать все внутри
function getTopics()
то хинт снова не появляется. Мне такое поведение в принципе непонятно .
В том-то и фишка что эти моды реализованы одинаково с помощью одного и того же фреймворка, только толи я чего понимаю, толи девелоперы с объектами что-то напутали. При изменении всех переменных один мод работает, если два мода, то который объявлен позднее работает весьма криво. Пока ничего придумать не удается
Мысль - написать письмецо авторам xajax, мол, почему второй объект работает криво и как с этим бороться.
Active Topics не через xajax сделан, у него свой скрипт:
Че-то я не понимаю зачем динамически подгружать статические данные? Или я понял неправильно, есть где посмотреть?
Мысль - написать письмецо авторам xajax, мол, почему второй объект работает криво и как с этим бороться.
Хочецо им руки оторвать, да и по-английски я не очень
Судя по всему дело не в объектах, а в яваскриптах. Глупый метод объектов принтит:
<!-- MOD InstantQuote -->
<script type="text/javascript">
var xajaxRequestUri="quote.server.php";
var xajaxDebug=false;
var xajaxStatusMessages=false;
var xajaxWaitCursor=true;
var xajaxDefinedGet=0;
var xajaxDefinedPost=1;
var xajaxLoaded=false;
function xajax_quote(){return xajax.call("quote", arguments, 1);}
</script>
<script type="text/javascript" src="xajax_js/xajax.js"></script>
<script type="text/javascript">
window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
</script>
<!-- // MOD InstantQuote -->
<script type="text/javascript">
var xajaxRequestUri="post.server.php";
var xajaxDebug=false;
var xajaxStatusMessages=false;
var xajaxWaitCursor=true;
var xajaxDefinedGet=0;
var xajaxDefinedPost=1;
var xajaxLoaded=false;
function xajax_getpreview(){return xajax.call("getpreview", arguments, 1);}
</script>
<script type="text/javascript" src="xajax_js/xajax.js"></script>
<script type="text/javascript">
window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
</script>
Соответственно выживает переменная объявленная позднее. Запихать все в один файл не получилось
Че-то я не понимаю зачем динамически подгружать статические данные? Или я понял неправильно, есть где посмотреть?
У меня пока только на локалке. Взято отсюда: http://forums.punbb.org/viewtopic.php?pid=64907#p64907
Эта штука через равные промежутки времени (15 сек) подгружает через аякс активные темы. Сделана, видимо, для тех, кто подолгу сидит на форуме и хочет в онлайне наблюдать, кто там чего где напостил. Кстати, мод очень простой в установке - залить пару файлов и добавить одну строчку в main.tpl.
Соответственно выживает переменная объявленная позднее. Запихать все в один файл не получилось sad
Если я правильно понял, у горе-авторов имеются глобальные переменные, из-за которых нельзя использовать два объекта xajax? Я не крутой спец в JavaScript, но может ковырнуть этот xajax? Ну, например, вместо xajaxDefinedGet внутрь xajax запихнуть DefinedGet, а все упоминания xajaxDefinedGet просто заменить на xajax.DefinedGet. Надо, конечно, внимательно код смотреть, но идея, думаю, понятна.
P.S. Я подхожу к проблеме с точки зрения использования структур в классическом C-программировании, так что сильно не пинайте
Мде... Надо себе руки оторвать, делов минут на 5 :-(
Думаю, что надо вместо
[mono]$xajaxpost = new xajax("post.server.php"); // initializing xajax
$xajaxquote = new xajax("quote.server.php"); // initializing xajax[/mono]
использовать
[mono]$xajaxpost = new xajax("post.server.php", "post"); // initializing xajax
$xajaxquote = new xajax("quote.server.php", "quote"); // initializing xajax[/mono]
В этом случае вместо
[mono]window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);[/mono]
будет сгенерировано
[mono]window.setTimeout(function () { if (!postLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
window.setTimeout(function () { if (!quoteLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);[/mono]
Короче говоря, у них это называется
var $sWrapperPrefix; // The prefix to prepend to the javascript wraper function name
Я изучал xajax version 0.1 beta4.
когда наводишь мышкой на ( ! ), хинт перестал появляться.
Только что поставил себе, хинт работает, новые темы показываются. Насчет кодировки не знаю, у меня на локалхосте какие-то глюки, поэтому приходится по-английски писать, иначе ?????? :-)
По совету старших товарищей я в трех местах (если не ошибаюсь) utf-8 сменил на windows-1251, и вопросики исчезли.
Добавлено Mon Nov 27 21:10:33 2006 :
То бишь:
To fix, do the following:
1. Open extern.php, and find on line 245:
$result = $db->query('SELECT t.id, t.subject FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
Below add:
if(isset($_GET['windows-1251'])) @header("Content-type: text/html; charset=windows-1251"); // Needed for accented characters w. JS/Ajax
2. Open ./include/js/ajax_extern.js, and fine on line 25:
var extern_query = 'extern.php?action=active&show=10&length=100&rnd='+rnd;
Replace with:
var extern_query = 'extern.php?action=active&show=10&length=100&windows-1251=1&rnd='+rnd;
$xajaxpost = new xajax("post.server.php", "post"); // initializing xajax
$xajaxquote = new xajax("quote.server.php", "quote"); // initializing xajax
Моя первая мысль Вот эта штука:
window.setTimeout(function () { if (!postLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
window.setTimeout(function () { if (!quoteLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: xajax_js/xajax.js'); } }, 6000);
для понта, чтоб алертами юзера спамить, если что-то там он не нашел. Главное вот это
var xajaxRequestUri="quote.server.php";
потому что остальное повторяется. А если поковырять printJavascript, то окажется что эта генерируется:
$html .= "var xajaxRequestUri=\"".$this->sRequestURI."\";\n";
$sWrapperPrefix он к сожалению не использует.
Но там все гораздо проще, создаешь один объект и внего пихаешь обе функции
xajax.common.php:
<?php
require PUN_ROOT.'include/xajax.inc.php';
$xajax = new xajax("xajax.server.php"); // initializing xajax
$xajax->registerFunction("getpreview");
//$xajaxquote = new xajax("xajax.server.php"); // initializing xajax
$xajax->registerFunction("quote"); // registers the function that injects the quote into the quick reply field
?>
xajax.server.php
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
require_once PUN_ROOT.'include/parser.php';
require_once PUN_ROOT.'lang/'.$pun_user['language'].'/post.php';
function buildpreviewdivcontent($message)
{
global $lang_post;
$previewdiv = "<div id=\"postpreview\" class=\"blockpost\">";
$previewdiv .= "<h2><span>".$lang_post['Post preview']."</span></h2>";
$previewdiv .= "<div class=\"box\"><div class=\"inbox\"><div class=\"postright\">";
$previewdiv .= "<div class=\"postmsg\">".$message."</div>";
$previewdiv .= "</div></div></div>";
$previewdiv .= "</div>";
return $previewdiv;
}
function builderrordivcontent(&$errors)
{
global $lang_post;
$errordiv = "<div id=\"posterror\" class=\"block\">";
$errordiv .= "<h2><span>".$lang_post['Post errors']."</span></h2>";
$errordiv .= "<div class=\"box\"><div class=\"inbox\">";
$errordiv .= "<p>".$lang_post['Post errors info']."</p><ul>";
while (list(, $cur_error) = each($errors))
$errordiv .= '<li><strong>'.$cur_error.'</strong></li>';
$errordiv .= "</ul></div></div></div>";
return $errordiv;
}
function getpreview($postform)
{
global $db, $pun_user, $pun_config, $lang_post;
$errors = array();
$message = pun_linebreaks(trim($postform['req_message']));
if(get_magic_quotes_gpc())
$message = stripslashes($message);
if ($message == '')
$errors[] = $lang_post['No message'];
else if (strlen($message) > 65535)
$errors[] = $lang_post['Too long message'];
else if ($pun_config['p_message_all_caps'] == '0' && strtoupper($message) == $message && $pun_user['g_id'] > PUN_MOD)
$message = ucwords(strtolower($message));
// Validate BBCode syntax
if ($pun_config['p_message_bbcode'] == '1' && strpos($message, '[') !== false && strpos($message, ']') !== false)
{
$message = preparse_bbcode($message, $errors);
}
$objResponse = new xajaxResponse();
if(!empty($errors))
{
$objResponse->addAssign("ajaxpostpreview", "innerHTML", builderrordivcontent($errors));
}
else
{
$hide_smilies = isset($postform['hide_smilies']) ? 1 : 0;
$message = parse_message($message, $hide_smilies);
$objResponse->addAssign("ajaxpostpreview", "innerHTML", buildpreviewdivcontent($message));
}
return $objResponse->getXML();
//require PUN_ROOT."xajax.common.php";
//$xajaxpost->processRequests();
}
function quote($pid)
{
global $db, $pun_user;
$objResponse = new xajaxResponse();
$ret = "";
$result = $db->query('SELECT poster, message FROM '.$db->prefix.'posts WHERE id='.$pid) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
$cur_post = $db->fetch_assoc($result);
// $quotemsg = utf8_encode("[quote=" . $cur_post['poster'] . "]" . $cur_post['message'] . "[/quote]
\n");
$quotemsg = "[quote=" . $cur_post['poster'] . "]" . $cur_post['message'] . "[/quote]
\n";
$objResponse->addAppend("req_message", "value", $quotemsg);
$objResponse->addScript("show('div1')");
// $objResponse->addAssign("req_message", "style.height", "300px");
$objResponse->addAssign("req_message", "focus()", "");
return $objResponse->getXML();
}
require("xajax.common.php");
$xajax->processRequests();
?>
те запихиваешь в один объект все, затем удаляешь все повторяющееся и меняешь нужные require на xajax.***.php. И в header.php оставляешь всего один вызов printJavascript
Единственное что плохо, все объекты xajax придется создавать вместе
Сейчас пойду восстанавливать историю установки модов, но совершенно точно, что хинт отвалился именно после установки ajax_extern.