|
|
|
| Делаю вывод директории с вложенными категориями, с помощью <ol><lI> итд
мне необходимо знать что к примеру текущий раздел находится на два раздела меньше чем предыдущий, как мне это в if понять?
то есть у меня сейчас есть $current_depth = 1; $previous_depth = 3;
а может быть $current_depth = 1; $previous_depth = 2;
как мне в if запихнуть что если $current_depth в два раза меньше чем $previous_depth а не просто меньше? | |
|
|
|
|
|
|
|
для: Unreal
(19.04.2009 в 02:20)
| | на два раздела меньше
в два раза меньше
? | |
|
|
|
|
|
|
|
для: Unreal
(19.04.2009 в 02:20)
| | Интересный подход, хранить текущую и предыдущую глубину ))) а из текущей не вычетается 1 ?)
Вообще нужно рекурсию юзать и не нужно никаких там подсчетов где и сколько. пара if и рекурсия и все | |
|
|
|
|
|
|
|
для: devzorg
(19.04.2009 в 02:35)
| | не имеет смысла отнимать 1, потому что предыщущая вложенность может быть 5 разделов, а текущая 2 раздела | |
|
|
|
|
 857 байт |
|
|
для: Unreal
(19.04.2009 в 02:20)
| | вот тут http://talks.php.net/show/ezp-inside-out/20 описывается как в таблице хранить структуру директорий
<?php if ($this->add_new_node):
echo $this->form;
else:
echo '<a href="/adm11/manage-recipes-directory/add-root/1/">Добавить раздел</a>';
echo "\n<ol>";
$previous_depth = 1;
foreach ($this->directory_data as $directory_data) {
$current_depth = count(explode('/', trim($directory_data['path_string'], '/')));
if ($current_depth > $previous_depth) {
echo "\n<ol>";
}
if ($current_depth < $previous_depth) {
echo "\n</ol>";
}
echo "\n<li>\n{$directory_data['node_name']} |
<a href='/adm11/manage-recipes-directory/add-subdirectory/1/parent_id/{$directory_data['id']}/depth/{$current_depth}/'>Добавить подраздел</a>\n</li>";
if ($current_depth < $previous_depth) {
echo "\n</ol>";
}
$previous_depth = count(explode('/', trim($directory_data['path_string'], '/')));
}
echo "\n</ol>";
endif;
?>
|
Сейчас почти правильно выводится, кроме последней
вот как в базе это выглядит
http://img518.imageshack.us/my.php?image=directorydata.jpg
вот как на странице показывается
http://img253.imageshack.us/my.php?image=directorypage.jpg
те данные что в таблице с id: 9,10,11,12 должны находиться на том же уровне что и id 3 (то есть Бульоны), а у меня они не на том же уровне
в приложенном файле дамп таблицы
можно конечно сделать так
<?php if ($this->add_new_node):
echo $this->form;
else:
echo '<a href="/adm11/manage-recipes-directory/add-root/1/">Добавить раздел</a>';
foreach ($this->directory_data as $directory_data) {
$current_depth = count(explode('/', trim($directory_data['path_string'], '/')));
echo "\n" . str_repeat('-', $current_depth) . " {$directory_data['node_name']} |
<a href='/adm11/manage-recipes-directory/add-subdirectory/1/parent_id/{$directory_data['id']}/depth/{$current_depth}/'>Добавить подраздел</a>\n<br />";
}
endif;
?>
|
но получается очень не наглядно, и хотелось бы это выстроить с помощью тегов ol, li | |
|
|
|