vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Why won't this plugin work? (https://vborg.vbsupport.ru/showthread.php?t=255788)

Mark.B 12-23-2010 08:59 PM

Why won't this plugin work?
 
This is me attempting to convert a "thread of the day" hack from 3.8.

I've read the article on variable registeringand have converted quite a few hacks, so I've *sort* of got my head round that.

However, the below (at search_start) simply doesn't work. the contents of the template are output fine, but the variable $devebd['whatever'] does not output at all.

I think I have done the registration of the variable right, because if I add this line to the plugin:
Code:

$devebd['test'] = ""Something";
...then I can make that print in the template just fine.

So, I think there is something wrong with how that query is being handled. I know it's being executed, because if I add a rogue character to any of the table names it throws a database error at me.

Yet, the query is identical to how it was in vB3 and it worked.

Any suggestions on what's wrong? Here is the plug in:
Code:

$exforums1 = $vbulletin->options['btwexfor'];
$exthreads1 = $vbulletin->options['btwexthr'];
if($vbulletin->options['enbwt'])
if($vbulletin->options['enbt'])
if($vbulletin->options['encolbt1'])
    $devebds = $db->query_read("
            SELECT thread.postusername,
                    thread.postuserid,
                    thread.title AS fth,
                    thread.lastposter,
                    thread.replycount,
                    thread.views,
                thread.lastpostid,
                    thread.threadid,
                    thread.forumid tid,
                    forum.forumid AS fid,
                    forum.title AS ft
            FROM " . TABLE_PREFIX . "thread AS thread, " . TABLE_PREFIX . "forum AS forum
            WHERE forum.forumid = thread.forumid
            AND dateline BETWEEN " . (TIMENOW - 86400) . " AND " . (TIMENOW + 86400) . "
            AND thread.forumid NOT IN ($exforums1)
            AND thread.threadid NOT IN ($exthreads1)
AND thread.threadid != 90094
AND thread.postuserid NOT IN (2501,2087)
            ORDER BY thread.replycount DESC LIMIT 1
            ");

while ($devebd = $db->fetch_array($devebds))
{
$devebd['trimmed'] = fetch_trimmed_title($devebd['fth'], 43);

}

 $templater = vB_Template::create('threadoftheday_day2');
    $templater->register('devebd', $devebd);
    $dev .= $templater->render();
$template_hook['totd'] .= $dev;

I then call this plugin in template search_resultlist using {vb:raw template_hook.totd}. It outputs the content of the template threadoftheday_day2 ok, but does not output the results of the query.

kh99 12-24-2010 01:51 AM

I don't know much about vB4 and I usually stay in the vB3 section, but: I think the stuff at the bottom needs to be inside the while loop. I think the reason you never see anything in $devebd is because it's undefined when the loop finally exits.

Mark.B 12-24-2010 05:42 AM

Quote:

Originally Posted by kh99 (Post 2138400)
I don't know much about vB4 and I usually stay in the vB3 section, but: I think the stuff at the bottom needs to be inside the while loop. I think the reason you never see anything in $devebd is because it's undefined when the loop finally exits.

Thanks...yes I thought that too...(as that's where the old eval template call was in vB3) yet if I do so, the template doesn't output at all. Which also has me baffled.

kh99 12-24-2010 11:30 AM

I see...yeah, that does sound like maybe the query isn't returning anything. Do you have a way to execute SQL? I would probably try that query myself and see what happens.

Mark.B 12-24-2010 11:44 AM

Quote:

Originally Posted by kh99 (Post 2138572)
I see...yeah, that does sound like maybe the query isn't returning anything. Do you have a way to execute SQL? I would probably try that query myself and see what happens.

Yep query returns ok but I think the "while" clause isn't returning anything, it seems to be linked to that in some way. Anything within the while clause is returning nothing, which I suppose means the while clause is false.

kh99 12-24-2010 11:59 AM

Given that it has "LIMIT 1" in the query, I think I would have used query_first instead like

Code:

$devebd = $db->query_first("
(I know that was the original dev and not you),

and then I think the rest would just be

Code:

$devebd['trimmed'] = fetch_trimmed_title($devebd['fth'], 43);
$templater = vB_Template::create('threadoftheday_day2');
$templater->register('devebd', $devebd);
$template_hook['totd'] .= $templater->render();

without the "while". Or, if you wanted the entire template to disappear in the event that the query returned nothing you could enclose it all in an "if".

Anyway, I guess it's been kind of slow during the holidays, but there's got to be someone around who knows vB4.

Mark.B 12-24-2010 03:24 PM

Thanks that does seem to be the issue...there is no "while" clause required as there's only 1 in the query.

Odd that should be the case seeing as it wasn't like that in vb3 and, to my knowledge, the database structures involved are identical.

Oh well...the joys of coding. :) Especially for vB4 which appears to write its own rules as it goes along.


All times are GMT. The time now is 10:26 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.00984 seconds
  • Memory Usage 1,736KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_code_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (7)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete