Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#26 2006-11-24 17:12:08

maximum
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Вот же, если отключаешься от сети, то в таком состоянии "быстрое полное" цитирование не работает. sad

#27 2006-11-24 18:30:54

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Хе-хе, а ты что думал? Сообщение подгружается с сервера при помощи яваскрипта, нет сервера - нет сообщения smile

#28 2006-11-25 02:49:25

maximum
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

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

#29 2006-11-25 23:45:36

Px
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Баг: при нажатии кнопки "Ответить", в последних 10 сообщениях имеем

Цитировать ( ? Выделите нужный текст в сообщении и нажмите на ссылку Цитировать. Выделенный текст будет помещён в форму быстрого ответа как цитата.)

Но есть предложение отрезать нафиг показ последних 10 сообщений smile

#30 2006-11-26 08:43:45

Kurt
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

А то что идет в сообщении http://www.punbb.ru/viewtopic.php?pid=5065#p5065
Это весь комплект? Или сначала надо поставить Quick Quote and Nick Paste, а потом это?
Или это уже 3 в 1ом?

#31 2006-11-26 09:16:28

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Px пишет:

Но есть предложение отрезать нафиг показ последних 10 сообщений

Подробнее можно?

Kurt пишет:

Это весь комплект?

Slavik пишет:

Блин, как всегда забыл, мод ставится поверх обоих, и при установке InstantQuote пропустить шаги 10-15

#32 2006-11-26 10:48:59

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:
Px пишет:

Но есть предложение отрезать нафиг показ последних 10 сообщений

Подробнее можно?

Присоединяюсь, опиши подробнее.

#33 2006-11-26 14:26:09

Px
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs пишет:
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']);
?>

}
?>

#34 2006-11-26 14:59:32

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Мде... Судя по коду, это называется "обзор темы". Только вот бага там я не вижу, а уж убирать все это таким способом это ахтунг: Администрирование->Options->Topic review->Count.

#35 2006-11-26 15:29:43

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, Slavik прав.

#36 2006-11-26 16:12:45

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Хм, замечено что 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 :

hcs пишет:

Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, 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>

Лучше всего именно так, как указано выше

#37 2006-11-26 18:04:12

Px
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs пишет:

Я понял о чем, речь. Исправлю завтра. Кстати решается эта проблема никак не вырезанием того кода, Slavik прав.

Ну, мне этот обзор темы кажется лишним, потому предпочитаю его убирать smile

#38 2006-11-27 13:14:28

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

А никто не скрещивал цитирование (как здесь) с модом Active topics http://forums.punbb.org/viewtopic.php?pid=64907#p64907 ?
Мне удалось решить проблемы с кодировкой, но возникла другая беда - в цитировании "( ! )" перестал появляться хинт. Все остальное вроде работает.
При отключении ajax_extern.js хинт работает нормально.
Даже не знаю, куда смотреть, я в ява-скриптах не силен.

P.S. 2Slavik - сдается мне, что здесь есть какая-то хитрость, с этим аяксом. Я конечно понимаю, что эти моды по разному реализованы, но выглядит это странно...

#39 2006-11-27 14:43:08

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Costa пишет:

А никто не скрещивал цитирование (как здесь) с модом Active topics

Это не там где еще хинт полупрозрачный? Если да, то у меня работало

Costa пишет:

2Slavik - сдается мне, что здесь есть какая-то хитрость, с этим аяксом. Я конечно понимаю, что эти моды по разному реализованы, но выглядит это странно...

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

#40 2006-11-27 15:11:44

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Что-то я неправильно выражаюсь. Хинт исчез не в моде 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()

то хинт снова не появляется. Мне такое поведение в принципе непонятно hmm .

#41 2006-11-27 15:42:02

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:

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

Мысль - написать письмецо авторам xajax, мол, почему второй объект работает криво и как с этим бороться.

#42 2006-11-27 16:15:07

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Costa пишет:

Active Topics не через xajax сделан, у него свой скрипт:

Че-то я не понимаю зачем динамически подгружать статические данные? Или я понял неправильно, есть где посмотреть?

Costa пишет:

Мысль - написать письмецо авторам xajax, мол, почему второй объект работает криво и как с этим бороться.

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

#43 2006-11-27 16:50:20

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Судя по всему дело не в объектах, а в яваскриптах. Глупый метод объектов принтит:

<!-- 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>

Соответственно выживает переменная объявленная позднее. Запихать все в один файл не получилось sad

#44 2006-11-27 17:11:23

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:

Че-то я не понимаю зачем динамически подгружать статические данные? Или я понял неправильно, есть где посмотреть?

У меня пока только на локалке. Взято отсюда: http://forums.punbb.org/viewtopic.php?pid=64907#p64907
Эта штука через равные промежутки времени (15 сек) подгружает через аякс активные темы. Сделана, видимо, для тех, кто подолгу сидит на форуме и хочет в онлайне наблюдать, кто там чего где напостил. Кстати, мод очень простой в установке - залить пару файлов и добавить одну строчку в main.tpl.

Slavik пишет:

Соответственно выживает переменная объявленная позднее. Запихать все в один файл не получилось sad

Если я правильно понял, у горе-авторов имеются глобальные переменные, из-за которых нельзя использовать два объекта xajax? Я не крутой спец в JavaScript, но может ковырнуть этот xajax? Ну, например, вместо xajaxDefinedGet внутрь xajax запихнуть DefinedGet, а все упоминания xajaxDefinedGet просто заменить на xajax.DefinedGet. Надо, конечно, внимательно код смотреть, но идея, думаю, понятна.

P.S. Я подхожу к проблеме с точки зрения использования структур в классическом C-программировании, так что сильно не пинайте tongue

#45 2006-11-27 17:47:14

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Мде... Надо себе руки оторвать, делов минут на 5 :-(

#46 2006-11-27 17:54:00

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Думаю, что надо вместо

[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.

#47 2006-11-27 17:58:39

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Costa пишет:

когда наводишь мышкой на ( ! ), хинт перестал появляться.

Только что поставил себе, хинт работает, новые темы показываются. Насчет кодировки не знаю, у меня на локалхосте какие-то глюки, поэтому приходится по-английски писать, иначе ?????? :-)

#48 2006-11-27 18:03:17

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

По совету старших товарищей smile я в трех местах (если не ошибаюсь) 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;

#49 2006-11-27 18:15:56

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Costa пишет:

$xajaxpost = new xajax("post.server.php", "post"); // initializing xajax
$xajaxquote = new xajax("quote.server.php", "quote"); // initializing xajax

Моя первая мысль smile Вот эта штука:

Costa пишет:

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);

для понта, чтоб алертами юзера спамить, если что-то там он не нашел. Главное вот это

Slavik пишет:

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 придется создавать вместе

#50 2006-11-27 18:31:19

Costa
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Сейчас пойду восстанавливать историю установки модов, но совершенно точно, что хинт отвалился именно после установки ajax_extern.

Подвал доски

Под управлением FluxBB. Хостинг Hostens