ZANIM ZACZNIESZ: POPULARNE PYTANIASZUKAJSTYLENAJNOWSZY SKRYPTPODRĘCZNIKMODYFIKACJE
phpBB2 by Przemo Forum Index phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SearchSZUKAJ  MemberlistMemberlist  UsergroupsUsergroups  StatisticsStatistics
RegisterRegister  Log inLog in  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów

Previous topic «» Next topic
Moved by: lui
12-01-2010, 17:17
Ajax time before posting
Author Message
lui 
new lui754



Helped: 581 times
Posts: 2473
Location: Radom

Posted: 07-11-2009, 17:37   Ajax time before posting
   Forum address: [ http://symbiane.pl ]


Ajax time before posting

Quote:
Autor: lui754
Strona autora: http://symbiane.pl
Pomysł zaczerpnięty z darkwarez.pl


Ten dodatek dodaje licznik w szybkiej odpowiedzi oraz normalnej odpowiedzi, dzięki któremu będziemy wiedzieli po ilu sekundach będzie można wysłać następnego posta. Najlepiej zobrazują to screeny.

Instrukcja:
Wykonujemy zapytanie SQL (PA>SQL>MySQL)
Code:
ALTER TABLE phpbb_users ADD last_post_time_s int NOT NULL;


includes/functions_post.php
znajdź:
Code:
    if ( $mode == 'newtopic' || $mode == 'reply' )
    {
        //
        // Flood control
        //
        if ( $userdata['user_level'] != ADMIN && !$is_jr_admin && !$is_mod )
        {
            $where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
            $sql = "SELECT MAX(post_time) AS last_post_time
                FROM " . POSTS_TABLE . "
                WHERE $where_sql";
            if ( $result = $db->sql_query($sql) )
            {
                if ( $row = $db->sql_fetchrow($result) )
                {
                    if ( (intval($row['last_post_time']) > 0 && ( $current_time - intval($row['last_post_time']) ) < intval($board_config['flood_interval'])) && $userdata['user_level'] == USER && !$userdata['user_jr'] )
                    {
                        message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
                    }
                }
            }
        }
    }


zmień na:
Code:
    if ( $mode == 'newtopic' || $mode == 'reply' )
    {
        //
        // Flood control
        //
        if ( $userdata['user_level'] != ADMIN && !$is_jr_admin && !$is_mod )
        {
            $where_sql = ( $userdata['user_id'] == ANONYMOUS ) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
            $sql = "SELECT MAX(post_time) AS last_post_time
                FROM " . POSTS_TABLE . "
                WHERE $where_sql";
                if ( !($result = $db->sql_query($sql)) )
                       {
                      message_die(GENERAL_ERROR, 'blad flood', '', __LINE__, __FILE__, $sql);
                       }
            $row = $db->sql_fetchrow($result);
            $czas1 = intval($row['last_post_time']);
            $sql1 = "UPDATE " . USERS_TABLE . "
                SET last_post_time_s = $current_time
                WHERE user_id = " . $userdata['user_id'] ."";
                if ( !($result1 = $db->sql_query($sql1)) )
                {
                    message_die(GENERAL_ERROR, 'Error in updating', '', __LINE__, __FILE__, $sql1);
                }
           
            if ( (intval($row['last_post_time']) > 0 && ( $current_time - intval($row['last_post_time']) ) < intval($board_config['flood_interval'])) && $userdata['user_level'] == USER && !$userdata['user_jr'] )
            {
                message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
            }
        }
    }


posting.php
znajdź:
Code:
//
// Output the data to the template
//


dodaj po:
Code:

//
// Flood control
if ( $userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD )
{
        $czas = CR_TIME - intval($userdata['last_post_time_s']);
        $czas = $board_config['flood_interval'] - $czas;
}


znajdź:
Code:
'L_SUBJECT' => $lang['Subject'],


dodaj po:
Code:
'CZAS' => $czas,


quick_reply.php
znajdź:
Code:
$template->assign_vars(array(
    'U_MORE_SMILIES' => append_sid("posting.$phpEx?mode=smilies"),


dodaj przed:
Code:

//
// Flood control
if ( $userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD )
{
        $czas = CR_TIME - intval($userdata['last_post_time_s']);
        $czas = $board_config['flood_interval'] - $czas;
}


znajdź:
Code:
    'L_USERNAME' => $lang['Username'],


dodaj po:
Code:
    'CZAS' => $czas,


posting_body.tpl
znajdź:
Code:
<table width="100%" cellspacing="2" border="0" align="center" cellpadding="2">
    <tr>
        <td align="right" valign="top"><span class="gensmall">{S_TIMEZONE}</span></td>
    </tr>
</table>
</form>


zmień na:
Code:
<table width="100%" cellspacing="2" border="0" align="center" cellpadding="2">
    <tr>
        <td align="left" valign="top"><span class="gensmall"><div id="countdown_ele"></div></span></td>
        <td align="right" valign="top"><span class="gensmall">{S_TIMEZONE}</span></td>
    </tr>
</table>
</form>

<script type="text/javascript">
<!--
  var num = {CZAS};
  var timer;

  function countdown(){
     if(num < 1){
        if(timer)
           clearTimeout(timer);
        document.getElementById('countdown_ele').innerHTML = 'Możesz już wysłać wiadomo&#182;ć';
        document.getElementById('post').value = "{L_SUBMIT}";
        document.getElementById('post').disabled = false;
        setFormDisabed(false);
     }else{
        document.getElementById('countdown_ele').innerHTML = "Musisz odczekać <font color='#ffb300'>" + num + "</font> sekund zanim będziesz mógł wysłać następn&#177; wiadomo&#182;ć";
    document.getElementById('post').value = "Odczekaj " + num + " sekund";
        document.getElementById('post').disabled = true; 
        num--;
        if(!timer)
           timer = setInterval("countdown()",1000);
     }
  }
 
  countdown();
-->
</script>


znajdź:
Code:
<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="{L_SUBMIT}" />


zmień na:
Code:
<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="{L_SUBMIT}" id="post" />


quick_reply.tpl
znajdź:
Code:
<!-- END quick_reply -->


dodaj przed:
Code:
<table width="100%" cellspacing="2" border="0" align="center" cellpadding="2">
    <tr>
        <td align="left" valign="top"><span class="gensmall"><div id="countdown_ele"></div></span></td>
    </tr>
</table>
<script type="text/javascript">
<!--
  var num = {CZAS};
  var timer;

  function countdown(){
     if(num < 1){
        if(timer)
           clearTimeout(timer);
        document.getElementById('countdown_ele').innerHTML = 'Możesz już wysłać wiadomo&#182;ć';
        document.getElementById('post').value = "{L_SUBMIT}";
        document.getElementById('post').disabled = false;
        setFormDisabed(false);
     }else{
        document.getElementById('countdown_ele').innerHTML = "Musisz odczekać <font color='#ffb300'>" + num + "</font> sekund zanim będziesz mógł wysłać następn&#177; wiadomo&#182;ć";
    document.getElementById('post').value = "Odczekaj " + num + " sekund";
        document.getElementById('post').disabled = true; 
        num--;
        if(!timer)
           timer = setInterval("countdown()",1000);
     }
  }
 
  countdown();
-->
</script>


znajdź:
Code:
<input type="submit" name="post" class="mainoption"  value="{L_SUBMIT}" />


zmień na:
Code:
<input type="submit" name="post" class="mainoption" id="post" value="{L_SUBMIT}" />


i to koniec ;) pozdrawiam

2.PNG
1505 Time(s) 2.6 KB

1.PNG
1504 Time(s) 2.79 KB

Last edited by Boltex on Yesterday 23:09; edited 5 times in total  
 
 
     
~Polaczek 
FL 4ever



Helped: 236 times
Posts: 2027

Posted: 07-11-2009, 17:39   
   Forum address: localhost


Super! Gratuluję!
_________________
Nie pomagam na PW. Jednak PW jest dobre np. gdy chcesz zaproponować modyfikację do wykonania.
Wszystkie modyfikacje wstrzymane dla tych dwóch: Forum Repair Mechanism [10%] jQuery ACP Tabs [0%]
Czyżby przeszła moda na warezy?...
 
     
#MaTeK_ 
;)


Helped: 233 times
Posts: 1390
Location: Kętrzyn/Gdańsk
Posted: 07-11-2009, 17:41   
   Forum address: http://www.mojair.pl


No . To jest orginalny pomysł i na pewno go wykorzystam . Gratuluję :D
_________________
Mistrz Konwersji
Konwertuję fora z każdego skryptu forum do phpBB i na odwrót
 
 
     
Seba123 

Helped: 46 times
Posts: 623
Posted: 07-11-2009, 18:27   
   Forum address: www.cs-puchatek.pl


Stanowczo odradzam, niby fajne, niby małe, a zapytania do SQL lecą [w każdym viewtopic o ile jest szybka odpowiedź dodatkowe zapytanie, to samo w posting).
 
     
lui 
new lui754



Helped: 581 times
Posts: 2473
Location: Radom

Posted: 07-11-2009, 18:39   
   Forum address: [ http://symbiane.pl ]


Te zapytania są małe i nie generują się długo. Obciążenie jest znikome. Fakt +1 zapytanie ale czas wczytywania strony nie zmieni się.

Zresztą każdy może sobie sprawdzić i w razie czego usunąć.
 
 
     
kevin_ 
Użyszkodnik


Helped: 568 times
Posts: 2148
Posted: 07-11-2009, 20:16   
   Forum address: a po co mi?


Seba123 wrote:
Stanowczo odradzam, niby fajne, niby małe, a zapytania do SQL lecą [w każdym viewtopic o ile jest szybka odpowiedź dodatkowe zapytanie, to samo w posting).


Dokładnie, ale i tak patrząc na niektóre mody to użytkowników nie interesuje co wpychamy do kodu. W PunBB jest ciekawe rozwiązanie, bo jest dodana kolumna "last_post" do tabeli users, można byłoby (jak ktoś tak oczywiście woli) zmodyfikować skrypt i zamiast brać SELECT bla bla, to $userdata['last_post'] a jak wiemy Userdata jest już wliczone jako zapytanie SQL.

/Wygaszam post.

[ Komentarz dodany przez: arcy: 08-11-2009, 13:04 ]
Nie wygaszaj. Ludzie, którzy zacytują Twoje zdanie będą niezrozumiali gdy zniknie Twój post.
_________________
Prezes :mrgreen:
Last edited by arcy on 08-11-2009, 13:04; edited 1 time in total  
 
     
Seba123 

Helped: 46 times
Posts: 623
Posted: 08-11-2009, 12:30   
   Forum address: www.cs-puchatek.pl


kevin_, właśnie o tym pomyślałem - autorzy modów po prostu nie myślą - dodać po prostu do phpbb_users kolumnę lastpost, przez co będzie to widoczne później w userdata i aktualizować ją po prostu co napisanie (czyli wykonana akcja!) posta. Później zwykły if pomoże, gdyż wszystko będzie załadowane, a pobranie o jednego tinyinta więcej nie obciąży.
 
     
cwierzbas 

Posts: 49
Posted: 08-11-2009, 19:04   
   Forum address: http://wsq.boo.pl


a jak zrobić, jak piszemy 1 post to aby nie odliczało?
 
     
lui 
new lui754



Helped: 581 times
Posts: 2473
Location: Radom

Posted: 09-11-2009, 00:11   
   Forum address: [ http://symbiane.pl ]


ok dodałem optymalizacje. Mam nadzieję, że nie będziecie już narzekać.
Aktualizacja:
1. Wykonaj zapytanie SQL
2. Edytuj plik functions_post.php
3. W plikach posting.php oraz quick_reply.php zamień:

Code:
//
// Flood control
//
if ( $userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD )
{
    $sql = "SELECT MAX(post_time) AS last_post_time
        FROM " . POSTS_TABLE . "
            WHERE poster_id = " . $userdata['user_id'];
           
        if ( !($result = $db->sql_query($sql)) )
        {
            message_die(GENERAL_ERROR, 'blad flood', '', __LINE__, __FILE__, $sql);
        }
        $row = $db->sql_fetchrow($result);
        $czas = CR_TIME - $row['last_post_time'];
        $czas = $board_config['flood_interval'] - $czas;
}


na:
Code:
//
// Flood control
if ( $userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD )
{
        $czas = CR_TIME - intval($userdata['last_post_time_s']);
        $czas = $board_config['flood_interval'] - $czas;
}


i to by było na tyle ;]


btw.
cwierzbas wrote:
a jak zrobić, jak piszemy 1 post to aby nie odliczało?

Odlicza tylko wtedy gdy nie możemy wysłać posta. Sprecyzuj pytanie.
 
 
     
Scoobany 
\:D/


Helped: 3 times
Posts: 121
Location: Kraków

Reprimends:
 1/3/5
Posted: 26-07-2010, 12:14   
   Forum address: http://scoobany.pl/


Czy rzeczywiście tak bardzo to obciąża bazę jak niektórzy mówią?
 
 
     
kevin_ 
Użyszkodnik


Helped: 568 times
Posts: 2148
Posted: 26-07-2010, 12:53   
   Forum address: a po co mi?


Scoobany, wszystko jest OK z tym modem, nie obciążą i nie obciążał bo jedno zapytanie typu 'select max(czas_post) from posty where autor = id limit 1' nie zabije Ci serwera
_________________
Prezes :mrgreen:
 
     
bolek_stw 
help need

Helped: 3 times
Posts: 59
Location: Stalowa Wola
Posted: 28-08-2010, 13:56   
   Forum address: http://csstalowawola.pl/


nie czyta mi ą ś to co mam zrobić ?

login bolek_test
hasło 12345
_________________
Pomagam w instalacji AMXBANS i serwerami CS 1.6
 
     
Display posts from previous:   
Reply to topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
Add this topic to your bookmarks
Printable version

Jump to:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB Group
Page generated in 0.52 second. SQL queries: 16
Polecane serwisy





piękne monety kolekcjonerskie. Wszystko dla Numizmatyka.

• Dodaj swój link