vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 General Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=111)
-   -   category tree bit Help (https://vborg.vbsupport.ru/showthread.php?t=109277)

Logikos 03-02-2006 07:49 AM

category tree bit Help
 
1 Attachment(s)
I would like to create a simple category tree using the vbulletin templates. Seems though I can't add a bit template to a bit template which would both be part of the main template. I'll try to explaine better...

Database Setup for table Categories with the following fields:
id, title, description, and display order. I have 3 Categories inserted that I'm testing with.

Category 1
Category 2
Category 3

I have another table setup called items with the following fields:
id, catid, title, description, and display order. I have 6 items inserted that I'm testing with.

Item 1 (catid1)
Item 2 (catid1)
Item 3 (catid1)
Item 4 (catid2)
Item 5 (catid2)
Item 6 (catid3)

Now with this code it would work right obvisoulsy because I'm just echoing:
PHP Code:

$var1data $db->query_read("
        SELECT *
        FROM " 
TABLE_PREFIX "category
"
);

while (
$var1 $db->fetch_array($var1data))
{
        echo 
"<b>" $var1['title'] . "</b><br />";

        
$var2data $db->query_read("
                SELECT *
                FROM " 
TABLE_PREFIX "items
                WHERE catid = 
$var1[id]
        "
);

        while (
$var2 $db->fetch_array($var2data))
        {
                echo 
"----<i>" $var2['title'] . "</i><br />";
        }


What will display the following:

Category 1
------ Item 1
------ Item 2
------ Item 3
Category 2
------ Item 4
------ Item 5
Category 3
------ Item 6

Though adding this to the templates like that would mean using 3 templates. A main template that will hold the main code and the category bit variable, the category bit template, which would hold the item bit variable, and the item bit template that would hold the item info. Like so...

PHP Code:

$var1data $db->query_read("
        SELECT *
        FROM " 
TABLE_PREFIX "category
"
);

while (
$var1 $db->fetch_array($var1data))
{
        eval(
'$Categories .= "' fetch_template('categories') . '";');

        
$var2data $db->query_read("
                SELECT *
                FROM " 
TABLE_PREFIX "items
                WHERE catid = 
$var1[id]
        "
);

        while (
$var2 $db->fetch_array($var2data))
        {
                eval(
'$Items .= "' fetch_template('items') . '";');
        }
}

eval(
'print_output("' fetch_template('maintemplate') . '");'); 

But that won't work because I'm adding a bit variable inside another templatebit. Anyone know what can be done to do something like this. The screenshot it what I'm trying to get out of this. Thanks!! :)


I think using the cache system would be a better approach

Marco van Herwaarden 03-02-2006 08:16 AM

move
PHP Code:

        eval('$Categories .= "' fetch_template('categories') . '";'); 

to the last line of the while-loop. You will need to evaluate the item-bits before you do the category.

Logikos 03-02-2006 08:26 AM

I should have said that I did try that before and It keep showing up like:
Category 1
------ Item 1
------ Item 2
Category 2
------ Item 1
------ Item 2
------ Item 4
------ Item 5
Category 3
------ Item 4
------ Item 5
------ Item 6

I'm thinking it might be eaiser to add the items to the datastore and using a foreach() to get them.

Well using foreach()'s didn't help much. This is getting on my nerves and I can't figure out why the hell the items are showing in other categorys even when I add a where clause and a if statment. (WHERE catid = $var1[id]) and (if ($var2['catid'] == $var1['id'])). AHHHHH

/me screams!!!!!

Marco van Herwaarden 03-03-2006 06:54 AM

Try:
PHP Code:

while ($var1 $db->fetch_array($var1data))  
{  
        
$Items null;
        
$var2data $db->query_read("  
                SELECT *  
                FROM " 
TABLE_PREFIX "items  
                WHERE catid = 
$var1[id]  
        "
);  

        while (
$var2 $db->fetch_array($var2data))  
        {  
                eval(
'$Items .= "' fetch_template('items') . '";');  
        }  
        eval(
'$Categories .= "' fetch_template('categories') . '";');  



Logikos 03-03-2006 07:17 PM

Thanks MarcoH. Trigunflame helped me the other night and that was exacly what i had to do. I added $Items=""; under the eval for $Categories. :)

Marco van Herwaarden 03-05-2006 09:23 AM

Yup that will do the same (although as a purist i would say always initialize;) so before the calculation, not after).


All times are GMT. The time now is 01:12 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.01165 seconds
  • Memory Usage 1,748KB
  • 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_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (6)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