Как сделать отступ текста в выпадающем меню выбора, используя PHP и CSS? [REDUX] - PullRequest
1 голос
/ 14 августа 2010

Я задавал подобный вопрос ранее, но я задам его снова по-другому, потому что я немного переработал код.

Мне было интересно, как сделать отступ для категорий и бесконечных подкатегорий, которые у меня есть, в выпадающем меню выбора с использованием PHP и CSS?

Вот мой PHP-код для отображения выпадающего списка.

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>';

Вот вывод.

   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

Цифры просто для удобства просмотра категорий и подкатегорий.

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Я вижу, что у вас уже есть функция рекурсии - попробуйте передать параметр "глубины" в вашей функции make_list - при первом вызове вы установите $depth в ноль.Затем, когда вы вызываете его рекурсивно, вы говорите makelist($option[$id], $depth+1);

, зная, на каком уровне рекурсии вы находитесь, вы можете легко создать строку из пробела.Например:

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

для большего отступа, попробуйте str_repeat('&nbsp;', $depth * 2); или аналогичный

, а затем просто добавьте свой вариант с пробелами.

0 голосов
/ 07 марта 2019

Вы можете попробовать это, рабочий пример. Отдельно с -

  echo '<select name="parent_id">
          <option value="">Seçiniz</option>';
    function make_list ($parent,$depth) {
        global $option;
        foreach ($parent as $id => $cat) {

            $whitespace = str_repeat('-', $depth * 1);
            echo '<option value="' . $cat['id'] . '">'. $whitespace . $cat['category'] . '</option>';

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

                make_list($option[$id], $depth+1);

            }
        }
    }

    $dbc = mysqli_query($vt,"SELECT * FROM menus");
    $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], $depth = 0);
    echo '</select>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...