XF 2.3 I need some sort of indicator showing the first post in a thread has been edited

Wildcat Media

Well-known member
Licensed customer
As part of a custom node I'm working on, I'm wondering if there is a way to put some sort of badge or indicator on a thread in the thread list, if the first post of a thread has been edited (preferably by its author, but I guess if it was a staff/moderator edit, it wouldn't matter). For this node, we probably will be using the article preview style, as the new threads will be articles.

Bonus points if there is a way to retrieve the date that the post was edited. (Maybe by using the post history?) Not essential though.

Yes, I've dumped XF variables before, but that doesn't necessarily mean I understand most of them. 😁 But there must be something in the thread/post info that could be extracted to make such an indicator.
 
You're trying to expose a message template variable in the post template to the thread list item template - you're going to need an addon to expose the variable to the thread template I think.
 
First thing that comes to mind is adding a thread prefix. But that would be a manual process.
There will already be a prefix in use, and yes we do need it to be automatic. It is a very active forum area and our staff is already overwhelmed.

You're trying to expose a message template variable in the post template to the thread list item template - you're going to need an addon to expose the variable to the thread template I think.
That's what I was thinking--the variables for a post are not available in the listing of threads when viewing a node. I would think it needs to get a variable indicating the thread was edited, and also extract a date for when it was last edited, so that could also be displayed.

(A more complicated add-on would either set the edited thread as being unread, or "expire" the "edited" status if the thread is viewed. And in addition, offer a sort filter that sorts threads by the last edit date or, lacking that, the date the thread was created.)

It probably isn't all that difficult, but my coding days have long passed. Even if I found something similar, I could probably dissect it and see what might work.
 
Well it has a Last edited message at the bottom, maybe move it to the top for first post? (And keep it at the bottom as well for those that look there.)
 
Well it has a Last edited message at the bottom, maybe move it to the top for first post? (And keep it at the bottom as well for those that look there.)
I need this on the forum (node) view, so that when members are looking at a list of threads, they can see which ones have been edited. We'll be using article preview mode most likely, so if I can find a way to extract the data and put in an indicator or banner in each preview pane, that would work for what we need. Members browsing the forum would then be able to see which threads have had their first post edited.

As for the individual post in the thread, yep, I can highlight that. That's easy enough to find in the template and move around if I decide to do anything with it.
 
you're going to need an addon to expose the variable to the thread template I think.

I'm at a point now where I'm going to need this. The sloppy option is to have the thread starter "bump" the thread with a reply, but we want to get away from enabling replies in this forum area.

Are there any free add-ons that might expose a variable like this, where I could dissect it and create my own? I'm OK with template edits, but the programmatic stuff is way over my head, and I'm too old/burnt out on coding to learn it anymore. The XF docs don't seem to cover this either, and I've slogged my way through many of them. And dumping variables has become unreliable as i can't try dumping in a few dozen templates to see which one exposes the value(s) I need.
 
For Article nodes, 100% doable with just a template edit... for Standard nodes, you'd need some custom code

1785535093069.webp

The condition is <xf:if is="$post.last_edit_date">, and you can use {{ date_time($post.last_edit_date) }} to expose the date/time of the edit.
 
For Article nodes, 100% doable with just a template edit... for Standard nodes, you'd need some custom code
Interesting.

We are using an article node, but decided we're going to use a modified version of the Standard display, not the Preview mode with the grid (since the grid system is kind of flaky). That makes me wonder if $post.last_edit_date is still usable or not. If not, I might have to dig through the templates that generate the grid view and see if I can trace it back somehow.
 
I just realized that we can pull the attachment thumbnail out using this in Standard view:

$thread.FirstPost.Attachments.first().Data.thumbnail_url

I find $thread.FirstPost in the forum_view andforum_view_type_article templates. If I knew which template to dump $thread variables in (nothing I try has worked), I could see what is in $thread.FirstPost.
 
Hi. I am having troubles trying to get the variable "$post.last_edit_date" to work within the "thread_view" template. What would be the best approach to get this working?

Solved: Adding $thread.FirstPost. before the variable.

Thanks for digging this up @Oblivion Knight !

I thought that should work ($thread.FirstPost.post.last_edit_date), but...

  • Template public:forum_view: [E_USER_WARNING] Max template execution depth reached (src/XF/Template/Templater.php:1737)
The stack trace makes it look as though something is stuck in a loop:

#0 [internal function]: XF\Template\Templater->handleTemplateError(512, '[E_USER_WARNING...', '/usr/home/xxxx/...', 1737)
#1 src/XF/Template/Templater.php(1737): trigger_error('Max template ex...', 512)
#2 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('public:forum_vi...', Array, true, Object(XF\Template\ExtensionSet))
#3 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#4 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#5 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#6 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#7 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#8 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#9 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#10 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#11 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#12 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#13 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#14 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#15 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#16 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#17 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#18 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#19 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#20 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#21 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#22 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#23 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#24 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#25 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#26 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#27 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#28 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#29 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#30 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#31 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#32 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#33 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#34 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#35 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#36 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#37 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#38 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#39 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#40 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#41 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#42 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#43 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#44 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#45 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#46 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#47 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#48 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#49 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#50 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#51 src/XF/Template/Templater.php(1791): XF\Template\Templater->renderTemplate('forum_view', Array, true, Object(XF\Template\ExtensionSet))
#52 src/XF/Template/Template.php(24): XF\Template\Templater->renderTemplate('forum_view_type...', Array)
#53 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#54 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('XF:Forum\\ViewTy...', 'public:forum_vi...', Array)
#55 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#56 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#57 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#58 src/XF/App.php(2826): XF\Mvc\Dispatcher->run()
#59 src/XF.php(806): XF\App->run()
#60 index.php(23): XF::runApp('XF\\Pub\\App')
#61 {main}

I'm tracking down this error right now. I don't see many results for this error message here in the XF support forums.

@Jeremy P @Chris D What should I be looking for with this type of error message?

I should add...I'm doing these via the template modification system, not editing templates directly.
 
Last edited:
Based on the error above, I may have an issue in the actual template file. I had a lot of them open so I hope I didn't accidentally hit any keys and then save the template. I am going to replace it.

EDIT: Yep, saw forum_view was modified, so I reverted it and we're all good now on that error.

To discover this, I tried a default style (theme) and got a different error saying the getter 'post' wasn't available. That got me thinking if I could remove "post" from the variable to see if it worked.💡

So, I shortened the variable to $thread.FirstPost.last_edit_date and now it works. 👍 I have more work to do on it since it's returning a time stamp--I want to format it a certain way, and add some logic.

I'm over the hurdle now, so, many thanks @Oblivion Knight !!
 
This is how it looks in the template now. It's a "last updated" date display for an article thread.

Code:
{{ $thread.FirstPost.last_edit_date > $thread.post_date ? date_dynamic($thread.FirstPost.last_edit_date) : phrase('never') }}

I had thought of adding an indicator showing the first post was updated since the visitor's last visit, but I didn't see a variable for a last visit. There is a "last activity" variable but that literally is the last thing a member has done (a page load, in other words). Not a big deal.
 
I had thought of adding an indicator showing the first post was updated since the visitor's last visit, but I didn't see a variable for a last visit.
Is there any such variable? I'm thinking it would be the timestamp of their last active session in the forum, but I don't see any variable that might give us this data. But...I'm sure there has to be something that triggers the "new" post/thread indicators elsewhere in the forum.
 
Back
Top Bottom