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
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:
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:
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¶ć';
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± wiadomo¶ć";
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¶ć';
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± wiadomo¶ć";
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ę |
_________________ 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 |
| 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

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