За последние 24 часа нас посетили 17706 программистов и 1652 робота. Сейчас ищут 857 программистов ...

Навигация (Иерархическое меню с рекурсия)

Тема в разделе "Прочие вопросы по PHP", создана пользователем Oleg_php, 5 сен 2012.

  1. Oleg_php

    Oleg_php Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Привет Всем. Недавно была тема навигация с неогрониченной вложеностью, но осталось много вопросов. Есть массив :

    Код (Text):
    1.  
    2. Array
    3. (
    4.     [0] => Array
    5.         (
    6.             [s_id] => 1
    7.             [s_on] => 1
    8.             [s_sort] => 1
    9.             [s_parent] => 0
    10.             [s_translate] => Index
    11.             [s_title] => Главная
    12.             [s_description] => Описание страницы
    13.             [s_keywords] => Ключевые слова
    14.             [s_text] =>Текст главной страницы
    15.             [s_date] => 2012-08-01
    16.             [s_view] => 0
    17.             [s_home] => 1
    18.             [s_path] =>
    19.         )
    20.  
    21.     [1] => Array
    22.         (
    23.             [s_id] => 39
    24.             [s_on] => 0
    25.             [s_sort] => 2
    26.             [s_parent] => 0
    27.             [s_translate] => O_kompanii
    28.             [s_title] => О компании
    29.             [s_description] => Описание страницы
    30.             [s_keywords] => Ключевые слова
    31.             [s_text] =>Текст
    32.             [s_date] => 2012-08-03
    33.             [s_view] => 0
    34.             [s_home] =>
    35.             [s_path] =>
    36.         )
    37.  
    38.     [2] => Array
    39.         (
    40.             [s_id] => 42
    41.             [s_on] => 0
    42.             [s_sort] => 3
    43.             [s_parent] => 39
    44.             [s_translate] => pod_o_kompanii
    45.             [s_title] => Под о компании
    46.             [s_description] =>
    47.             [s_keywords] =>
    48.             [s_text] =>
    49.             [s_date] => 0000-00-00
    50.             [s_view] => 0
    51.             [s_home] =>
    52.             [s_path] => O_kompanii
    53.         )
    54.  
    55. )
    56. Array
    57. (
    58.     [0] => Array
    59.         (
    60.             [s_id] => 1
    61.             [s_on] => 0
    62.             [s_sort] => 1
    63.             [s_parent] => 0
    64.             [s_translate] => Podkategoriya_1
    65.             [s_title] => Подкатегория 1
    66.             [s_description] =>
    67.             [s_keywords] =>
    68.             [s_text] =>
    69.             [s_cost] => 0
    70.             [s_brief] =>
    71.             [s_view] => 0
    72.         )
    73.  
    74.     [1] => Array
    75.         (
    76.             [s_id] => 4
    77.             [s_on] => 0
    78.             [s_sort] => 2
    79.             [s_parent] => 0
    80.             [s_translate] => Podkategoriya_2
    81.             [s_title] => Подкатегория 2
    82.             [s_description] =>
    83.             [s_keywords] =>
    84.             [s_text] =>
    85.             [s_cost] => 0
    86.             [s_brief] =>
    87.             [s_view] => 0
    88.         )
    89.  
    90.     [2] => Array
    91.         (
    92.             [s_id] => 5
    93.             [s_on] => 0
    94.             [s_sort] => 3
    95.             [s_parent] => 0
    96.             [s_translate] => Podkategoriya_3
    97.             [s_title] => Подкатегория 3
    98.             [s_description] =>
    99.             [s_keywords] =>
    100.             [s_text] =>
    101.             [s_cost] => 0
    102.             [s_brief] =>
    103.             [s_view] => 0
    104.         )
    105.  
    106.     [3] => Array
    107.         (
    108.             [s_id] => 6
    109.             [s_on] => 0
    110.             [s_sort] => 0
    111.             [s_parent] => 1
    112.             [s_translate] => Podkategoriya_1-1
    113.             [s_title] => Подкатегория 1-1
    114.             [s_description] =>
    115.             [s_keywords] =>
    116.             [s_text] =>
    117.             [s_cost] => 0
    118.             [s_brief] =>
    119.             [s_view] => 0
    120.         )
    121.  
    122.     [4] => Array
    123.         (
    124.             [s_id] => 7
    125.             [s_on] => 0
    126.             [s_sort] => 0
    127.             [s_parent] => 1
    128.             [s_translate] => Podkategoriya_1-1
    129.             [s_title] => Подкатегория 1-1
    130.             [s_description] =>
    131.             [s_keywords] =>
    132.             [s_text] =>
    133.             [s_cost] => 0
    134.             [s_brief] =>
    135.             [s_view] => 0
    136.         )
    137.  
    138.     [5] => Array
    139.         (
    140.             [s_id] => 8
    141.             [s_on] => 0
    142.             [s_sort] => 0
    143.             [s_parent] => 7
    144.             [s_translate] => Podkategoriya_1-1-1
    145.             [s_title] => Подкатегория 1-1-1
    146.             [s_description] =>
    147.             [s_keywords] =>
    148.             [s_text] =>
    149.             [s_cost] => 0
    150.             [s_brief] =>
    151.             [s_view] => 0
    152.         )
    153.  
    154.     [6] => Array
    155.         (
    156.             [s_id] => 9
    157.             [s_on] => 0
    158.             [s_sort] => 0
    159.             [s_parent] => 7
    160.             [s_translate] => Podkategoriya_1-1-1
    161.             [s_title] => Подкатегория 1-1-1
    162.             [s_description] =>
    163.             [s_keywords] =>
    164.             [s_text] =>
    165.             [s_cost] => 0
    166.             [s_brief] =>
    167.             [s_view] => 0
    168.         )
    169.  
    170. )
    Родитель s_parent начинается от 0.
    Как можно обработать этот массив в рекурсии чтобы привести к такому виду и плюс были такие ссылки:

    Код (Text):
    1.  
    2. <ul><li><a href="Index">Главная</a></li></ul>
    3. <ul><li><a href="O_kompanii">О компании</a></li>
    4.       <ul><li><a href="O_kompanii/pod_o_kompanii">Под о компании</a></li></ul>
    5. </ul>
    6.  
    7. <ul><li><a href="Podkategoriya_1">Подкатегория 1</a></li>
    8.       <ul>
    9.        <li><a href="Podkategoriya_1/Podkategoriya_1-1">Подкатегория 1-1</a></li>
    10.       <li><a href="Podkategoriya_1/Podkategoriya_1-1">Подкатегория 1-1</a></li>
    11.             <ul>      
    12.                   <li><a href="Podkategoriya_1/Podkategoriya_1-1/Podkategoriya_1-1-1">Подкатегория 1-1-1</a></li>
    13.                   <li><a href="Podkategoriya_1/Podkategoriya_1-1/Podkategoriya_1-1-1">Подкатегория 1-1-1</a></li>
    14.            </ul>
    15.        </ul>
    16. </ul>
    17.  
    18. <ul><li><a href="Podkategoriya_2">Подкатегория 2</a></li></ul>
    19. <ul><li><a href="Podkategoriya_3">Подкатегория 3</a></li></ul>
    Заранее большое спасибо! Жду помощи.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    А ты не жди, пробуй!
     
  3. Oleg_php

    Oleg_php Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    80
    Симпатии:
    0
    Все варианты уже перепробывал. Пытался родиетльский s_translate брать в массив и передавать его дальше в рекурсии. но получается какая-то каша. И почему то <ul></ul> намного больше чем надо выходит.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Ну во первых, тебе огромное человеческое "спасибо" за ебанутый формат данных. Попробуй функцию var_export() так оно было бы удобнее для "помогальщиков"!

    Во вторых, разметка в твоем примере корявая разметка
    Код (Text):
    1.  
    2. <ul><li><a href="Index">Главная</a></li></ul>
    3. <ul><li><a href="O_kompanii">О компании</a></li>
    4.       <ul><li><a href="O_kompanii/pod_o_kompanii">Под о компании</a></li></ul>
    5. </ul>
    я так понимаю здесь УЖЕ лишние теги. Ты обозначил ошибочную цель. Кто-то должен потратить время на генерацию неправильного кода?

    Добавлено спустя 11 минут 34 секунды:
    правильная разметка могла бы выглядеть так:
    Код (Text):
    1.  
    2. <ul>
    3.     <li><a href="Index">Главная</a></li>
    4.     <li><a href="O_kompanii">О компании</a>
    5.         <ul>
    6.             <li><a href="O_kompanii/pod_o_kompanii">Под о компании</a></li>
    7.         </ul><!-- конец меню 1-го уровня -->
    8.     </li>
    9.     ...
    10. </ul><!-- конец меню 0-го уровня -->
    Добавлено спустя 1 минуту 59 секунд:
    вот посмотри демо многоуровнего меню, загляни в исходный код страницы как там разметка устроена
     
  5. Annet76

    Annet76 Активный пользователь

    С нами с:
    6 сен 2012
    Сообщения:
    1
    Симпатии:
    0
    А какую рекурсию лучше использовать для выведения такого меню?
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я считаю, что нужно глаза вам открыть и научиться читать и смотреть форум...

    viewtopic.php?f=2&t=39856&p=322833&hilit=+%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F#p322833

    Научитесь читать еще найдете пару тем.