[PHP] functie output in variabele zetten?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb een recursieve functie geschreven die eea uit een database haalt en hiermee een option-list construeert:

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
function build_category_tree($parent=0, $level=0)
{

    $level++;

    $query = 'SELECT cc.category_id, cc.parent_id, c.category_id, c.name
              FROM categories c, categories_categories cc
              WHERE cc.category_id = c.category_id
              AND cc.parent_id = ' . $parent;

    $categories = sql_query($query, 0);
    $num_categories = mysql_num_rows($categories);
    
    for ($i = 0; $i < $num_categories; $i++) 
    { 
        $row = mysql_fetch_array($categories); 

        echo '<option value="' . $row[category_id] . '">';

        for ($a = 0; $a < $level; $a++)
        {
            if ($a != ($level - 1))
            {
                echo '&nbsp;&nbsp;&nbsp;';
            }
            else
            {
                echo '';
            }
        }
        
        echo '| ' . $level . ' | ' . $row[name];        
        echo '</option>';


        if ($row[category_id] != $parent)
        {
            build_category_tree($row[category_id], $level);
        }
    }
}


Met de volgende functie schrijf ik eea uiteindelijk naar het scherm:
PHP:
1
build_category_tree();


Maar wat ik eigenlijk zou willen is een variabele $output aanmaken en hierin de HTML voor de select-list opslaan:
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
$output = '';

function build_category_tree($parent=0, $level=0)
{
        
    $level++;

    $query = 'SELECT cc.category_id, cc.parent_id, c.category_id, c.name
              FROM categories c, categories_categories cc
              WHERE cc.category_id = c.category_id
              AND cc.parent_id = ' . $parent;

    $categories = sql_query($query, 0);
    $num_categories = mysql_num_rows($categories);
    
    for ($i = 0; $i < $num_categories; $i++) 
    { 
        $row = mysql_fetch_array($categories); 

        $output .= '<option value="' . $row[category_id] . '">';

        for ($a = 0; $a < $level; $a++)
        {
            if ($a != ($level - 1))
            {
                echo '&nbsp;&nbsp;&nbsp;';
            }
            else
            {
                echo '';
            }
        }
        
        $output .= '| ' . $level . ' | ' . $row[name];        
        $output .= '</option>';


        if ($row[category_id] != $parent)
        {
            build_category_tree($row[category_id], $level);
        }
    }
    return $output;
}


Dan kan ik vervolgens de list oproepen door
PHP:
1
echo $output;

Het probleem is alleen dat dit niet werkt - de functie geeft helemaal niets terug. Wat doe ik verkeerd? De oplossing moet hem volgens mij zitten in iets als

PHP:
1
2
3
4
5
6
$output = '';

function build_category_tree($output, $parent=0, $level=0)
{
    global $output;
    ....


Maar dit levert hertzelfde resultaat op. Wie helpt mij aan de oplossing?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 19-09 14:48
Alleen die echo is natuurlijk niet genoeg. Je moet eerst de functie aanroepen, een DAARNA de echo doen.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

PHP:
1
2
3
4
5
6
ob_start();

... alles wat in $content moet komen

$content = ob_get_contents();
ob_end_clean();


dit is het idee, maar check verder ff php.net voor details

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Obliterator - zooooooooo ongelooflijk dom van mij...ik heb er gewoon overheen gekeken...

Ik ben duidelijk toe aan weekeind ;)

Dank je!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Óf:
PHP:
1
$output = build_content_tree();

(Met de tweede versie)

Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
PHP:
1
2
3
<?php
echo build_content_tree();
?>

Acties:
  • 0 Henk 'm!

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Of $content by reference meegeven in de functie;
PHP:
1
function build_category_tree($parent=0, $level=0, &$content) {...

En dan natuurlijk alle echos in content proppen.

[ Voor 18% gewijzigd door vinnux op 02-02-2004 23:46 ]

Pagina: 1