2010-08-14 4 views
1

J'ai posé une question similaire plus tôt, mais je vais la poser de nouveau d'une manière différente parce que j'ai retravaillé le code un peu.Comment mettre du texte dans un menu déroulant de sélection en utilisant PHP et CSS? [REDUX]

Je me demandais comment puis-je indenter les catégories et sous-catégories sans fin que j'ai dans un menu déroulant de sélection en utilisant PHP & CSS?

Voici mon code PHP pour afficher la liste déroulante.

echo '<select name="parent_id"> 
     <option value="0">None</option>'; 

function make_list ($parent) { 

    global $option; 

    foreach ($parent as $id => $cat) { 

     echo '<option value="' . $cat['id'] . '">' . $cat['category'] . '</option>'; 

     if (isset($option[$id])) { 

      make_list($option[$id]); 

     }      
    }  
} 

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 

if (!$dbc) { 
    print mysqli_error(); 
} 

$option = array(); 

while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) { 

    $option[$parent_id][$id] = array('category' => $category, 'id' => $id, 'parent_id' => $parent_id); 

} 

make_list($option[0]); 

echo '</select>'; 

Voici la sortie.

1. Apple 
    2. Arts & Entertainment 
     1. Amusement 
     2. Art 
     3. Artists 
       1. A 
        1. a1 
        2. a2 
       2. B 
       3. C 
       4. D 
    3. Automotive 
    4. Network 
    5. Server 
    6. Web Design 
     1. CSS 
     2. HTML 

Les numéros sont juste là pour voir les catégories et sous-catégories plus faciles.

+1

Vous posez sérieusement cette question à nouveau ?? –

+0

@Michael Robinson espérons pour la dernière fois que je change mon code environ trois fois déjà. – mudFLAP

Répondre

2

Je vois que vous avez déjà la chose récursion vers le bas - essayez de passer un paramètre "profondeur" dans votre make_list fonction - lorsque vous appelez le premier, vous définissez $depth à zéro. Ensuite, quand vous l'appelez récursivement, vous diriez makelist($option[$id], $depth+1);

sachant quel niveau de récursivité vous avez, vous pourriez facilement construire une chaîne d'espaces. Comme:

$whitespace = str_repeat('&nbsp;', $depth); 

pour plus d'indentation, essayez str_repeat('&nbsp;', $depth * 2); ou similaire

puis juste PREPEND option avec les espaces blancs.

+0

Pour élaborer sur cette annexe, ajoutez   au lieu de "" comme ayant les espaces avant qu'une étiquette d'option soit rognée. Voir http://jsfiddle.net/AxLUP/ – Robert

+0

pardonnez-moi pour mon ignorance Je suis un peu nouveau sur PHP où puis-je mettre le code 'for' dans mon code? – mudFLAP

+0

vous pouvez utiliser '$ str = str_repeat (' ', INT)' mais sérieusement, c'est la troisième fois qu'il a ouvert cette question exacte ... –

Questions connexes