• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

XF 1.5 How to show ad above last message on each page


Active member
I'd like to show a horizontal ad above the last post on each page of a thread. I thought I had it figured out using:

<xen:if is="!{$visitor.user_id} AND {xen:number $thread.reply_count} > 2 AND !in_array({$thread.thread_id}, array(9998,9999))">
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == {$xenOptions.messagesPerPage} - 2 OR {$post.position} == {$thread.reply_count} - 1 AND !{$message.conversation_id}">
Ad Code
This seems to work perfectly 99% of the time, but I'm noticing a few anomalies:

  • On one 5-page thread, an extra ad is shown on page 4.
    A horizontal ad is showing correctly above the last post on pages 1-3, but then on page 4 there are two ads, one above and one below the last post. I'm not sure why page 4 is getting 2 ads. Page 5 has only one reply and shows no ad. There was a deleted post on page 1, I don't know if this has any impact. (Edit: permanently deleted the 1 deleted post in the thread instead of just removed from public view, and no change, so maybe math error because the last page has one post???)

  • On one long 56-page thread, there is simply no horizontal ad shown at all. The threadID is not 9998 or 9999. I can't figure out why the above is ruling out this thread... The thread link is /threads/thread-title.629/ and 629 is not in the array (9998,9999)

    Edit: Correction -- it appears on this one thread, it's the {xen:number $thread.reply_count} > 2 that is not showing an ad when present, even though there are hundreds of replies to that thread ?

    appears this point is solved by changing

    AND {xen:number $thread.reply_count} > 2
    AND {$thread.reply_count} > 2

    For some reason the only thread that didn't seem to work with the {xen:number $thread.reply_count} > 2 conditional was the 56-page thread in question (there may be others, but I didn't find another...) Not sure if it was based on the number of pages or something about the particular thread... but changing it to {$thread.reply_count} > 2 as the conditional now works... curious...
Any ideas?
Last edited:


Active member
OK, better way to do it was to create a new template

Include ad_message_above template above post area in template

Then change conditional to simply
<xen:if is="!{$visitor.user_id} AND {$thread.reply_count} > 2 AND !in_array({$thread.thread_id}, array(9998,9999))">
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == {$xenOptions.messagesPerPage} OR {$post.position} == {$thread.reply_count} AND !{$message.conversation_id}">


Active member
Correction to above: parenthesis needed for consistent operation

<xen:if is="!{$visitor.user_id} AND {$thread.reply_count} > 2 AND !in_array({$thread.thread_id}, array(9998,9999))">
<xen:if is="({$post.position} % {$xenOptions.messagesPerPage} == {$xenOptions.messagesPerPage} OR {$post.position} == {$thread.reply_count}) AND !{$message.conversation_id}">