За последние 24 часа нас посетили 21597 программистов и 1018 роботов. Сейчас ищут 687 программистов ...

Переформатировать в табы

Тема в разделе "Сделайте за меня", создана пользователем greenzlat, 17 сен 2020.

  1. greenzlat

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

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Есть определенный код:
    PHP:
    1.            
    2. <?php
    3. $group='';
    4. $next=0;
    5.  
    6. if(empty($links[0]['group'])) {?>
    7. <div class="container-unit">
    8.   <div class="title">Метки: </div>
    9.   <div class="subcategories">
    10.     <?php } foreach($links as $link){
    11.       $next++;
    12.       if($group !== $link['group']) {
    13.         if($next>1) {
    14.                 ?>
    15.   </div>
    16.   <div class="button">
    17.     <a href="#" data-behaviour="toggle-tag-cloud" class="toggle item_link"></a>
    18.   </div>
    19. </div>
    20. <?php } ?>
    21. <div class="container-unit">
    22.   <div class="title">
    23.     <?= $link['group']?>:</div>
    24.   <div class="subcategories">
    25.     <?php $group = $link['group']; } ?>
    26.     <a class="tag" data-linkid="<?= $link['link_id'] ?>" href="<?= $link['link'] ?>"><?= $link['anchor'] ?></a>
    27.     <?php if($next == count($links)) { ?>
    28.   </div>
    29.   <div class="button">
    30.     <a href="#" data-behaviour="toggle-tag-cloud" class="toggle item_link"></a>
    31.   </div>
    32. </div>
    33. <?php }
    34.  
    35. } ?>
    На выходе получается такое:
    HTML:
    1.   <div class="container-unit">
    2.     <div class="title">Группа 1</div>
    3.     <div class="subcategories">
    4.       <a class="tag" data-linkid="666" href="link1">тег1</a>
    5.       <a class="tag" data-linkid="667" href="link2">тег2</a>
    6.       <a class="tag" data-linkid="668" href="link3">тег3</a>
    7.     </div>
    8.     <div class="button">
    9.       <a href="#" data-behaviour="toggle-tag-cloud" class="toggle item_link"></a>
    10.     </div>
    11.   </div>
    12.   <div class="container-unit">
    13.     <div class="title">Группа 2</div>
    14.     <div class="subcategories">
    15.       <a class="tag" data-linkid="669" href="link4">тег4</a>
    16.       <a class="tag" data-linkid="670" href="link5">тег5</a>
    17.       <a class="tag" data-linkid="671" href="link6">тег6</a>
    18.     </div>
    19.     <div class="button">
    20.       <a href="#" data-behaviour="toggle-tag-cloud" class="toggle item_link"></a>
    21.     </div>
    22.   </div>
    23.   <div class="container-unit">
    24.     <div class="title">Группа 3</div>
    25.     <div class="subcategories">
    26.       <a class="tag" data-linkid="672" href="link7">тег7</a>
    27.       <a class="tag" data-linkid="673" href="link8">тег8</a>
    28.       <a class="tag" data-linkid="674" href="link9">тег9</a>
    29.     </div>
    30.     <div class="button">
    31.       <a href="#" data-behaviour="toggle-tag-cloud" class="toggle item_link"></a>
    32.     </div>
    33.   </div>
    34.  
    35.  
    36.  
    Можно ли как-то преобразовать код PHP? чтобы на выходе было что-то такое?
    HTML:
    1.  
    2. <ul class="nav nav-tabs">
    3.   <li class="active"><a data-toggle="tab" href="#panel1">группа 1</a></li>
    4.   <li><a data-toggle="tab" href="#panel2">группа 2</a></li>
    5.   <li><a data-toggle="tab" href="#panel3">группа 3</a></li>
    6. </ul>
    7. <div class="tab-content">
    8.   <div id="panel1" class="tab-pane fade in active">
    9.     <div class="subcategories">
    10.       <a class="tag" data-linkid="666" href="link1">тег1</a>
    11.       <a class="tag" data-linkid="667" href="link2">тег2</a>
    12.       <a class="tag" data-linkid="668" href="link3">тег3</a>
    13.     </div>  </div>
    14.   <div id="panel2" class="tab-pane fade">
    15.     <div class="subcategories">
    16.       <a class="tag" data-linkid="669" href="link4">тег4</a>
    17.       <a class="tag" data-linkid="670" href="link5">тег5</a>
    18.       <a class="tag" data-linkid="671" href="link6">тег6</a>
    19.     </div>
    20.   </div>
    21.   <div id="panel3" class="tab-pane fade">
    22.     <div class="subcategories">
    23.       <a class="tag" data-linkid="672" href="link4">тег7</a>
    24.       <a class="tag" data-linkid="673" href="link5">тег8</a>
    25.       <a class="tag" data-linkid="674" href="link6">тег9</a>
    26.     </div>
    27.   </div>
    28. </div>
    29.  
    Структура таблицы БД такая.
    upload_2020-9-17_9-42-32.png
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    можно, тем более это не php а html
    ищете в коде что хотите изменить - меняете на новый код
     
  3. greenzlat

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

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Не понимаю как отделить группы и теги в массиве и связать их потом в табы
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    @greenzlat можно, могу объяснить в общих чертах, буквально "делать за тебя" не буду. Если ты не в курсе, это позорный раздел :)

    Сейчас: есть массив $links, упорядоченный по элементу 'group', и в цикле на каждое изменение значения group срабатывает вывод подзаголовка.

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

    В ларавелевских коллекциях есть подходящий метод groupBy(), но во встроенных функциях для массивов такого нет вроде бы. Но легко нагуглить: https://github.com/jakezatecky/array_group_by/blob/master/src/array_group_by.php

    PHP:
    1. $groupped = array_group_by($links, 'group');
    2.  
    3. foreach (array_keys($groupped) as $group) { ... } // tab captions
    4.  
    5. foreach ($groupped as $group => $items) {
    6.     foreach ($items as $item) { // tab content
    7.         ...
    8.     }
    9. }
     
  5. greenzlat

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

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    На платной основе по чем сделаете?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    @greenzlat я вам не подойду по цене.
     
    ADSoft нравится это.