Использование вложенного запроса с JOIN в Codeigniter, MysQL - PullRequest
1 голос
/ 23 февраля 2012

У меня есть две таблицы в моем проекте codeigniter. Как упрощенное резюме,

page                                        page_lang
-------------------------------------       ----------------------------
id_page | id_menu | id_parent | level       id_page |  title     | etc..
-------------------------------------       ----------------------------
   1    |    1    |     0     |   0            1    | Name 1     | etc..
   2    |    1    |     1     |   1            2    | Name 1.1   | etc..
   3    |    1    |     2     |   2            3    | Name 1.1.1 | etc..
   4    |    1    |     2     |   1            4    | Name 1.2   | etc.

Я пытаюсь создать выпадающий список выбора, который содержит все страницы, вложенные с отступами в качестве вывода, как;

<option value="id_page">Name 1</option>
<option value="id_page">&nbsp;»&nbsp;Name 1.1</option>
<option value="id_page">&nbsp;&nbsp;&nbsp;-&nbsp;Name 1.1.1</option>
<option value="id_page">&nbsp;»&nbsp;Name 1.2</option>

В этом случае при необходимости соедините страницу и page_lang и создайте рекурсивный цикл.

Но я занят разработкой максимально быстрого кода. Спасибо за любую помощь.

1 Ответ

2 голосов
/ 23 февраля 2012

Ваша рекурсивная функция будет выглядеть примерно так

function recursivePageOptions( $level, $nodes ) {
  $set = array();
  foreach ($nodes as $node) {
    $nest = '';
    for($x=1; $x<=$level; $x++)
      $nest.= ' &nbsp;';
    $page = '<option value="'.$node['page']['id'].'">';
    $page.= $nest . $node['page']['title'] . '</option>';
    $set[] = $page;
    if (isset($node['children'])) {
      $set = array_merge(
        $set,
        recursivePageOptions( $level+1, $node['children'] );
      );
    }
  }
  return $set;
}

Итак, перед тем, как вызывать эту рекурсивную функцию, нужно получить информацию о вашей странице в структуре массива, которая выглядит следующим образом:

[
  'My Homepage' => [
    'page' => ['My Homepage', 24, ... ],
    'children' => [
      'Level 1 Page' => [
        'page' => ['Level 1 Page', 39, ... ],
        'children' => [
          'Level 2 Page' => [
            'page' = ['Level 2 Page', 51, ... ]
          ]
        ]
      ],
      'Another Level 1 Page' =< [
        'page' => ['Another Level 1 Page', 56, ... ]
      ]
    ]
  ]
]

Вам нужно детально разобраться в этой части, по сути, вы будете извлекать строки из базы данных и проходить по ним таким образом, чтобы создать структуру массива, подобную приведенной выше.

...