[php] Template probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor de index van een forum gebruik ik yapter als template parser.
een gedeelte van de template ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    [BLOCK table1]  
   <tr>
      <td width="23" bgcolor="{Color1}"></td>
      <td width="387" bgcolor="{Color2}">{Forum}</td>
      <td width="19" bgcolor="{Color1}">{Posts}</td>
      <td width="18" bgcolor="{Color2}">{Topics}</td>
      <td width="114" bgcolor="{Color1}"></td>
    </tr> [BLOCK cat1]  
    <tr>
      <td colspan="5" width="750" bgcolor="{Color1}">{cat_name}</td>
    </tr> 
            [BLOCK row1] 
    <tr>
      <td width="23"  bgcolor="{Color1}"></td>
      <td width="387"  bgcolor="{Color2}"><b>{Name}</b><br>{Omschrijving}</td>
      <td width="19"  bgcolor="{Color1}">{total_posts}</td>
      <td width="18"  bgcolor="{Color2}">{total_topics}</td>
      <td width="114"  bgcolor="{Color1}"></td>
    </tr>
      [END row1]
           [END cat1] 
     [END table1]

en de phpcode:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php 
    require("parser.php"); 
    require("config.php"); 
    $tp = new Template("index.tpl"); 
    $tp->set("page_title", "Forum Index"); 
    $result = mysql_query("
SELECT count(DISTINCT p.post_id) as total_posts, 
             count( DISTINCT t.topic_id) as total_topics, 
             c.volgorde, c.id, c.cat_naam, f.forum_id, f.omschrijving, f.naam, f.view_access, f.last_post
FROM   forums f 
INNER JOIN cat c ON f.cat_id = c.id
LEFT JOIN topics t ON f.forum_id = t.forum_id
LEFT JOIN posts p ON t.topic_id = p.topic_id
GROUP BY c.id,  f.forum_id
ORDER BY c.volgorde, f.volgorde ASC"); 
    $tp->set("Forum", "Forum:"); 
    $tp->set("Posts", "Posts:"); 
    $tp->set("Topics", "Topics:"); 
    $tp->set("Color1", "$color1"); 
    $tp->set("Color2", "$color2");  
    $tp->set("Tablebgcolor", "$tablebgcolor");  
    $i = -1; 
    while ($row = mysql_fetch_object($result)) { 
    if($i  != -1)
      { 
    if($row->cat_naam != $last_cat)   { 
    $tp->set("cat_name", $row->cat_naam);  
    $tp->parse("cat1");  
    $tp->spit("cat1"); 
    $tp->clear("row1"); 
    $last_cat = $row->cat_naam;      
                                                            }  
      }
      else 
      {
        $i++;
      }
    $tp->set("Name", $row->naam); 
    $tp->set("Omschrijving", $row->omschrijving); 
    $tp->set("total_posts", round($row->total_posts)); 
    $tp->set("total_topics", round($row->total_topics)); 
    $tp->parse("row1"); 
    }
    $tp->parse("table1"); 

    $tp->parse(); 
    $tp->spit(); 
?> 

ik wil dus niet dat hij voor elk forum de categorie neerzet en daarom parse ik die apart. Probleem was dat hij eerst 1 lege rij parste en daarom heb ik er if($i != -1) bij gezet. Dat werkt bijna goed, alleen is me resultaat nu een beetje verkeerd.
ik krijg 1 forum te min en de categorien kloppen niet.
Dit zou het moeten zijn:

--Van Alles Wat
Onzinforum
bug report
--forum
Blaatcorner
Test forum
test2
--Tech Hoek
Tech forum 1
tech forum 2
--Testcorner
Stuffis Generalis

Ik krijg:

--Van Alles Wat
Onzinforum
--forum
bug report
--Tech Hoek
Blaatcorner
Test forum
test2
-Testcorner
Tech forum 1
tech forum 2


Dus 1 forum te min en de verkeerde categorie indeling. Ik heb al geprobeerd om ook row1 met een if te doen maar dat werkt ook niet. Iemand een idee?

Verwijderd

Topicstarter
Ik heb ff wat veranderd, maar ik krijg het nog niet gefixed. Nu is mijn probleem dat hij 1 categoerie opsnoept, daardoor komt alles 1 categorie hoger te staan.
vb:
cat1
forum1
forum2
cat2
forum3
cat3
forum4

wordt:
cat2
forum1
forum2
cat3
forum4
cat3
forum4

code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php 
    require("parser.php"); 
    require("config.php"); 
    $tp = new Template("index.tpl"); 
    $tp->set("page_title", "Forum Index"); 
    $result = mysql_query("
SELECT c.volgorde, c.id, c.cat_naam, f.forum_id, f.omschrijving, f.naam, 
f.view_access, f.last_post
FROM   forums f 
INNER JOIN cat c ON f.cat_id = c.id
ORDER BY c.volgorde, f.volgorde ASC"); 
    $tp->set("Forum", "Forum:"); 
    $tp->set("Posts", "Posts:"); 
    $tp->set("Topics", "Topics:"); 
    $tp->set("Color1", "$color1"); 
    $tp->set("Color2", "$color2");  
    $tp->set("Tablebgcolor", "$tablebgcolor");  
    while ($row = mysql_fetch_object($result)) {
 if($row->cat_naam != $last_cat)   
    { 
      if(!empty($last_cat))
      { 
       $tp->set("cat_name", $row->cat_naam);   
       $tp->parse("cat1");  
       $tp->spit("cat1"); 
       $tp->clear("row1"); 
      }
       $last_cat = $row->cat_naam;         
    }
    $tp->set("Name", $row->naam); 
    $tp->set("Omschrijving", $row->omschrijving); 
    $tp->set("total_posts", round($row->total_posts)); 
    $tp->set("total_topics", round($row->total_topics)); 
    $tp->parse("row1");  
    }
$tp->set("cat_name", $last_cat);   
       $tp->parse("cat1");  
       $tp->spit("cat1"); 
       $tp->clear("row1"); 
    $tp->parse("table1"); 


    $tp->parse(); 
    $tp->spit(); 
?> 

als ik probeer uit te vissen waar het mis ga doe ik dit
PHP:
1
2
3
4
5
6
<?
if($row->cat_naam != $last_cat)   
    { // eerst hier een echo $row->cat_naam; 
      if(!empty($last_cat))
      { // dan hier een echo $row->cat_naam;
?>

bij die eerst krijg ik netjes alle categorien, bij die 2e krijg ik de eerste niet te zien