PDA

View Full Version : How can I use a external database with vb Blocks


xman_79
15 Mar 2010, 19:55
Hi , Sorry because my English is weak, but I liked to write a topic on the use of an external database within the Forum's Blocks .

Go to : admincp -> Forums & Moderators -> Forum Blocks Manager -> Add Block : Custom Html / Php

Add new block: Custom HTML/PHP
Title : Your title ;
Description : your description ;
Cache Time (in minutes) : 60;
Content Type : Php
Content : ***
Template to Use : add your template . (eg. block_html)

The content :



//THIS IS NOT THE DATABASE OF VBULLETIN
DEFINE ('DB_USER', 'CHANGE_TO_USER');
DEFINE ('DB_PASSWORD', 'CHANGE_TO_PASSWORD');
DEFINE ('DB_HOST', 'CHANGE_TO_HOST');
DEFINE ('DB_NAME', 'CHANGE_TO_DB_NAME');

if($dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD))
{
if(!mysql_select_db(DB_NAME))
{
return false;
}
}
else
{
return false;
}

ob_start();

$testquery = mysql_query("SELECT * from NAME_OF_TABLE");
$testarray = array();
while($testrow = mysql_fetch_array($testquery))
{
$testarray["$testrow[SOMEID]"] = $testrow;
}
unset($testrow);
mysql_free_result($testquery);

$templater = vB_Template::create('YOUR_TEMPLATE_NAME');
$templater->register('mytestvar', $testarray);
$output .= $templater->render();

$output .= ob_get_contents();

return $output;

ob_end_clean();

The template (YOUR_TEMPLATE_NAME) .
Create a new template .


<ul>
<vb:each from="mytestvar" key="SOMEID" value="testrow">
<li>{vb:raw testrow.somerow}</li>
</vb:each>
</ul>


Eg.

114191

ChopSuey
20 Mar 2010, 11:53
& What is in your db? For the screenshot? Looks like a normal forum block.

mandingo
20 Mar 2010, 17:00
He's just showing how to call content from a different database other than your forum one.

xman_79
17 Jun 2010, 15:53
& What is in your db? For the screenshot? Looks like a normal forum block.

Yes, it is a normal forum block but the content is not from vb-db.
In my another db i have an article system, so I display the list of sections .

noppid
17 Jun 2010, 16:08
Couple of suggestions...

When going outside the vB DB class, track your new connection by explicitly using the resource identifiers Like...


mysql_select_db(DB_NAME,$dbc)
mysql_query("SELECT * from NAME_OF_TABLE", $dbc)


After your mysql_free_result you might want to add mysql_close($dbc).

Try putting your ob_end_clean() before your return $output too. Although, I don't see the point of using it. I guess you're trying to catch any errors and tag them on to the output?

I'm not crazy about using constants (DEFINE) for passwords and such either.