Pagina 1 van 2
Laatste wijzigingsdatum i.p.v. laatste post datum
Geplaatst: 17 feb 2005, 18:52
door Lontronics
Standaard is het zo dat de datum <laatste bericht> alleen wordt aangepast wanneer er een bericht wordt toegevoegd.
Op mijn forum heb ik echter een aantal topics die gesloten zijn en waar ik zelf als administrator af en toe een regel aan toevoeg (bijv. soort van agenda).
Het zou mooi zijn als op dat moment de datum ook zou worden aangepast.
Hoe kan ik dit voor elkaar krijgen?
Groeten,
Jan.
Geplaatst: 17 feb 2005, 20:36
door Luuk
Open includes/functions_post.php en zoek
Zet erachter
Zoek
Zet erahcter
Geplaatst: 17 feb 2005, 20:57
door Lontronics
En het werkt!
Fantastisch, bedankt
Groeten,
Jan
Geplaatst: 18 feb 2005, 11:35
door Merlin Sythove
Kijk uit dat je op die manier niet de tijd wijzigt van berichten waar al op gereageerd is. Normaal worden berichten op volgorde van aanmaken in de database opgehaald, maar als je ze ooit op basis van hun tijd gaat ophalen ga je hiermee de mist in en raken topic-volgordes door de war! Ik heb het zelf ook gedaan trouwens, maar uitsluitend indien het bericht het laatste in de thread is wordt de tijd aangepast, en dan zien anderen het dus weer als een nieuw bericht staan in hun lijst nieuwe berichten.
Geplaatst: 18 feb 2005, 12:53
door Lontronics
Ik heb deze aanpassing toegevoegd zoals bovenstaand omschreven.
En volgens mij wordt de tijd/datum dan ook aangepast op een post die ergens bovenin een topic staat.
Oftewel, het probleem waar jij het over hebt is zowieso van toepassing
Enig idee wat ik hier aan kan doen?
M.a.w., kan jij me de code aangeven die jijzelf gebruikt hebt om het alleen op de laatste post te laten uitvoeren?
(Het gaat bij mij om topics met 1 post, echter iemand anders zou ook nog wat in een van zijn posts kunnen wijzigen waarmee de boel fout gaat..)
Groeten,
Jan
Geplaatst: 18 feb 2005, 16:36
door Merlin Sythove
Ik heb geen mod klaarliggen maar in de topics-tabel staat het huidige topic_id natuurlijk, dat geeft het record aan, en in dat record zit een veld met topic_last_post_id, dus het ID van het laatste bericht in een topic. Je kunt checken of DAT id hetzelfde is als het id van het bericht dat je nu wilt gaan bewaren, en als dat zo is, kun je toestaan om de tijd bij te werken.
Laat maar even weten of je voldoende van PHP en zo weet om deze code zelf te kunnen schrijven met enige hulp / checken van deze kant

Geplaatst: 18 feb 2005, 16:42
door Merlin Sythove
Oops, ik keek mijn code nog even door en zag de regel ineens staan. Ik hoop dat mijn code overeen komt met de standaard:
open functions_post.php
Rond regel 280 zoek
Code: Selecteer alles
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
Voeg daarna deze regels toe:
Code: Selecteer alles
// Edit the last post in a thread? Then update the time too, to keep the thread active
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
De code vervolgt met
Code: Selecteer alles
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
Nu zou de tijd uitsluitend bijgewerkt worden als het bericht het laatste in een topic is.
Wel even voorzichtig testen bijvoorbeeld in een voor anderen onzichtbaar subforum met een test-onderwerp, want ik weet niet of $post_data['post_time'] alsook $current_time in de standaard code bestaan.
Verder moet je de tijd van een bericht dus in het bericht opzoeken, want in een standaard-board worden berichten op volgorde van aanmaken opgehaald (waarbij de tijd geen rol speelt) en je bericht zal dus niet voorin het topic komen te staan als de tijd per ongeluk op 0 wordt gezet!!
Succes!
Geplaatst: 18 feb 2005, 18:06
door Lontronics
Okay, in de nieuwe uitvoering is dit de code die ik gebruik, de code die eerder door Luuk werd aangegeven heb ik weer verwijderd. Vanaf regel 261:
Code: Selecteer alles
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
if (!$db->sql_query($sql, BEGIN_TRANSACTION))
{
Als ik nu echter in een laatste post een wijziging aanbreng blijft de datum en tijd gewoon staan, oftewel het werkt niet bij mij.
Ik zal vast iets fout doen/ iets over het hoofd zien; enig idee?
Ik heb zelf ook nog even zitten snuffelen, daar ben ik nieuwsgierig genoeg voor en ALS ik het goed begrijp zou de code van Luuk alleen actief zijn wanneer het gaat om het editen van een eerste post. Hier is het stukje script waar zijn wijzigingen in geplaatst worden (let op 1e regel):
if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
{
$topic_vote = (!empty($poll_title) && count($poll_options) >= 2) ? 1 : 0;
$sql = ($mode != "editpost") ? "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$post_subject', " . $userdata['user_id'] . ", $current_time, $forum_id, " . TOPIC_UNLOCKED . ", $topic_type, $topic_vote)" : "UPDATE " . TOPICS_TABLE . " SET topic_title = '$post_subject', topic_time = $current_time, topic_type = $topic_type " . (($post_data['edit_vote'] || !empty($poll_title)) ? ", topic_vote = " . $topic_vote : "") . " WHERE topic_id = $topic_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', post_time = $current_time, enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
if (!$db->sql_query($sql, BEGIN_TRANSACTION))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
Klopt dit en zou daarom de code van Luuk dus wel zonder problemen toegepast kunnen worden?
Groeten,
Jan
Geplaatst: 18 feb 2005, 19:33
door Merlin Sythove
Klopt dat de groene code niet werkt, als je heel zorgvuldig leest zie je dat de tijd helemaal niet onderdeel van de SQL is in het geval er ge-edit wordt.
De sql moet zo zijn - let op het invoegen van
, post_time = $post_time
zodat in het UPDATE gedeelte inderdaad nu een tijd wordt veranderd in de database:
Code: Selecteer alles
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig, post_time = $post_time" . $edited_sql . " WHERE post_id = $post_id";
Geplaatst: 18 feb 2005, 19:35
door Merlin Sythove
Zoals gezegd, het veranderen van de tijd in het eerste bericht tenzij dat ook het laatste is is een hachelijke zaak (code van Luuk)
Geplaatst: 18 feb 2005, 20:40
door Lontronics
Volgens mij heb ik nu alles gedaan zoals je aangaf, echter ik krijg de volgende error:
SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' post_edit_time = 1108755368, post_edit_count = post_edit_count
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = , post_edit_time = 1108755368, post_edit_count = post_edit_count + 1 WHERE post_id = 222
Line : 272
File : \wwwroot\forum\includes\functions_post.php
Dit is de code:
Code: Selecteer alles
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig, post_time = $post_time" . $edited_sql . " WHERE post_id = $post_id";
Ik hoop dat je er nog eens naar wilt kijken, ik weet het ff niet meer....
Groeten,
Jan
Geplaatst: 18 feb 2005, 20:57
door Merlin Sythove
Het probleem is
post_time = ,
ofwel er wordt geen waarde gegeven aan het veld post_time, en dat betekent dat de variabele $post_time dus niet is gezet. Het kan zijn dat de variabele $current_time of $post_data['post_time'] in jouw geval niet bestaat, kijk de code van de hele functie goed door om te zien of die inderdaad bestaat of niet.
Geplaatst: 18 feb 2005, 23:27
door Lontronics
$post_data['post_time'] is de boosdoener denk ik, deze parameter kan ik verder nergens vinden.
Helaas, html is hier helemaal geen probleem, basis php (redirect scriptjes etc..) ook niet, maar sql etc.... is nog niet aan mij besteed. Ik denk dus dat ik het voorlopig maar opgeef....
Groeten,
Jan
Geplaatst: 19 feb 2005, 16:54
door Merlin Sythove
Ik denk dat ik die waarde even heb ingevuld op de plek waar de routine wordt aangeroepen, maar dat zal allemaal wel weer niet standaard zijn. Ik knutsel nogal in phpBB, helaas

Geplaatst: 19 feb 2005, 17:48
door Lontronics
Daarom had ik stiekem gehoopt dat je me ook bij het laatste stukje van de puzzel had kunnen helpen
Groeten,
Jan
Geplaatst: 20 feb 2005, 12:19
door Merlin Sythove
Het schoot me te binnen dat je de oorspronkelijke post_time niet nodig hebt als je alleen bij wijzingen een extra stukje in de SQL plakt.
Hieronder is een nieuw blok, probeer het maar eens in plaats van het oude
Code: Selecteer alles
$post_time_sql = ($mode == 'editpost' && $post_data['last_post']) ? ', post_time = $current_time' : '';
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig " . $post_time_sql . $edited_sql . " WHERE post_id = $post_id";
Geplaatst: 20 feb 2005, 15:31
door Lontronics
SQL Error : 1054 Unknown column '$current_time' in 'field list'
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 265
Line : 272
File : \includes\functions_post.php
Ik heb er eens naar zitten kijken en begin me inmiddels een aardige dombo te voelen....
Waarom wordt post_time niet gezet in de eerste regel middels post_time = $current_time, terwijl een regel verder ook $current_time wordt gebruikt en dus blijkbaar wordt herkend?
Geplaatst: 20 feb 2005, 15:39
door Merlin Sythove
Was die nog niet gedefinieerd?
$current_time = time();
en dan de rest er achteraan.
Geplaatst: 20 feb 2005, 15:41
door Lontronics
Nou, dat snap ik idd dus niet...
Maar ik zal nog eens het hele bestand door...
En anders $current_time = time(); erbij.
Thx

Geplaatst: 20 feb 2005, 15:43
door Lontronics
SQL Error : 1054 Unknown column '$current_time' in 'field list'
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 267
Line : 273
File : \includes\functions_post.php
Nou, ben weer een klein stukje verder.
In het begin van de functie wordt inderdaad $current_time gezet (regel 223).
Omdat er een fout bleef komen heb ik $current_time = time(); toegevoegd op regel 267, een regel boven de code die gewijzigd is. Het maakt niets uit, bovenstaande melding blijft komen.
Volgens mij is de regel waarin post_time gezet wordt niet juist en zou die moeten zijn:
$post_time_sql = ($mode == 'editpost' && $post_data['last_post']) ? ", post_time = $current_time " : "'';
Ik weet alleen niet of ik daar juist zit....