Laatste wijzigingsdatum i.p.v. laatste post datum

Hulp nodig bij een modificaties of op zoek naar een MOD? Bekijk ons archief. Support wordt helaas niet meer verleend.
Forumregels

Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
phpBB2.0.x
Lontronics

Laatste wijzigingsdatum i.p.v. laatste post datum

Bericht door Lontronics » 17 feb 2005, 18:52

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.

Gebruikersavatar
Luuk
Berichten: 7311
Lid geworden op: 22 okt 2003, 10:07
Locatie: Delft

Bericht door Luuk » 17 feb 2005, 20:36

Open includes/functions_post.php en zoek

Code: Selecteer alles

SET topic_title = '$post_subject',
Zet erachter

Code: Selecteer alles

 topic_time = $current_time,
Zoek

Code: Selecteer alles

post_username = '$post_username',
Zet erahcter

Code: Selecteer alles

 post_time = $current_time,
Afbeelding

Lontronics

Bericht door Lontronics » 17 feb 2005, 20:57

En het werkt!

Fantastisch, bedankt ;)

Groeten,
Jan

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 11:35

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.

Lontronics

Bericht door Lontronics » 18 feb 2005, 12:53

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

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 16:36

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

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 16:42

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!

Lontronics

Bericht door Lontronics » 18 feb 2005, 18:06

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

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 19:33

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

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 19:35

Zoals gezegd, het veranderen van de tijd in het eerste bericht tenzij dat ook het laatste is is een hachelijke zaak (code van Luuk)

Lontronics

Bericht door Lontronics » 18 feb 2005, 20:40

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.... :oops: :oops: :oops:

Groeten,
Jan

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 18 feb 2005, 20:57

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.

Lontronics

Bericht door Lontronics » 18 feb 2005, 23:27

$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.... :cry:

Groeten,
Jan

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 19 feb 2005, 16:54

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

Lontronics

Bericht door Lontronics » 19 feb 2005, 17:48

Daarom had ik stiekem gehoopt dat je me ook bij het laatste stukje van de puzzel had kunnen helpen ;)

Groeten,
Jan

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 20 feb 2005, 12:19

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

Lontronics

Bericht door Lontronics » 20 feb 2005, 15:31

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.... :cry:
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?
Laatst gewijzigd door Lontronics op 20 feb 2005, 15:40, 1 keer totaal gewijzigd.

Merlin Sythove
Berichten: 55
Lid geworden op: 04 dec 2004, 16:06

Bericht door Merlin Sythove » 20 feb 2005, 15:39

Was die nog niet gedefinieerd?

$current_time = time();

en dan de rest er achteraan.

Lontronics

Bericht door Lontronics » 20 feb 2005, 15:41

Nou, dat snap ik idd dus niet...

Maar ik zal nog eens het hele bestand door...

En anders $current_time = time(); erbij.

Thx ;)

Lontronics

Bericht door Lontronics » 20 feb 2005, 15:43

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

Gesloten