Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Древовидные комментарии.

Сообщения:  [1-10]   [11-13] 

 
 автор: cheops   (15.11.2011 в 14:07)   письмо автору
 
   для: Aidaho   (15.11.2011 в 14:02)
 

Хм... а если еще один уровень вложения добавится?

  Ответить  
 
 автор: Aidaho   (15.11.2011 в 14:02)   письмо автору
 
   для: cheops   (15.11.2011 в 13:43)
 

Спасибо :)
Сегодня утром подумав пришел примерно к такому же решению, только без рекурсивного вызова функции.
Если кому-то будет интересно то сделал так:
function commentShow($id) {
    $q = "select * from comment where post_id = '".$id."' and parent = '0' order by Id desc";
    $res = mysql_query($q) or die(mysql_error());
    while($comment = mysql_fetch_array($res)) {
        echo '<div class="comment-show">';
                <span class="comment-user">'.$comment['user_name'].'</span>
        $query = "select * from comment where parent = '".$comment['Id']."'";
        $resul = mysql_query($query) or die(mysql_error());
        while($commentAns = mysql_fetch_array($resul)) {
            if($commentAns['legacy'] >= 1) {
                $padding = 15 * $commentAns['legacy'].'px';
                $paddingStyle = 'style="padding-left: '.$padding.'"';
                } else {
                    $paddingStyle = '';
                    }
            echo '<div class="comment-show-ans" '.$paddingStyle.'>';
                <span class="comment-user">'.$comment['user_name'].'</span>
            }
        echo '</div>';
        }
    }

  Ответить  
 
 автор: cheops   (15.11.2011 в 13:43)   письмо автору
 
   для: Aidaho   (15.11.2011 в 07:31)
 

Попробуйте следующий скрипт
<?php
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");

  
// Использование
  
echo tree_comment(0);
  
// Реализация
  
function tree_comment($id 0$intent 0
  { 
    
$id intval($id); 

    
$query "SELECT * FROM comment
              WHERE parent = 
$id 
              ORDER BY year, month, day, `time`"

    
$com mysql_query($query); 
    if(!
$com) exit("Ошибка извлечения комментариев"); 
    if(
mysql_num_rows($com)) 
    { 
      while(
$comment mysql_fetch_array($com)) 
      { 
        
// Вывод комментария
        
echo "<p style='margin-left: {$intent}px'>{$comment['comment']}</p>"
        
// Рекурсивный вызов
        
tree_comment($catalog['Id'], $intent 5); 
      } 
    } 
  } 
?>

  Ответить  
 
 автор: Aidaho   (15.11.2011 в 07:31)   письмо автору
 
   для: cheops   (10.11.2011 в 15:01)
 

Подскажите? :)

  Ответить  
 
 автор: Aidaho   (10.11.2011 в 15:46)   письмо автору
 
   для: cheops   (10.11.2011 в 15:01)
 

Вот:

CREATE TABLE `comment` (
  `Id` int(11) NOT NULL auto_increment,
  `post_id` int(11) NOT NULL default '0',
  `user_name` varchar(255) NOT NULL default '',
  `comment` tinytext NOT NULL,
  `mail` varchar(255) NOT NULL default '',
  `day` int(2) NOT NULL default '0',
  `month` int(2) NOT NULL default '0',
  `year` int(4) NOT NULL default '0',
  `time` varchar(255) NOT NULL default '',
  `vote` int(11) NOT NULL default '0',
  `parent` int(11) NOT NULL default '0',
  PRIMARY KEY  (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

  Ответить  
 
 автор: cheops   (10.11.2011 в 15:01)   письмо автору
 
   для: Aidaho   (10.11.2011 в 14:58)
 

А, имеется в виду как организовать таблицу базы данных? У вас сейчас таблица какой вид имеет?

PS Пример лучше адаптировать к вашим названиям, если не сложно выполните запрос SHOW CREATE TABLE применительно к вашей таблице, чтобы можно было воспроизвести ситуацию.

  Ответить  
 
 автор: Aidaho   (10.11.2011 в 14:58)   письмо автору
 
   для: cheops   (09.11.2011 в 13:57)
 

>Это зависит от того, как вы это хотите оформить, в случае выпадающих списков можно просто добавлять пробелы, в случае блоков или таблиц можно передавать отступ в процентах или пикселах, увеличивая это значение на какую-то фиксированную или переменную величину.
Меня интересует именно в базе можно сделать.

Все таки не могу понять, нет ли у вас примеров?

  Ответить  
 
 автор: cheops   (09.11.2011 в 13:57)   письмо автору
 
   для: Aidaho   (08.11.2011 в 17:07)
 

>А как цикл поймет, что закончились комментарии?
Если записей нет, то не будет выполнения цикла while() новых рекурсивных вызовов.

>И каким образом лучше реализовать параметр со степенью вложенности?
Это зависит от того, как вы это хотите оформить, в случае выпадающих списков можно просто добавлять пробелы, в случае блоков или таблиц можно передавать отступ в процентах или пикселах, увеличивая это значение на какую-то фиксированную или переменную величину.

  Ответить  
 
 автор: Aidaho   (08.11.2011 в 17:07)   письмо автору
 
   для: cheops   (08.11.2011 в 16:38)
 

Чего то не до конца понял по примеру.
А как цикл поймет, что закончились комментарии?
И каким образом лучше реализовать параметр со степенью вложенности?

  Ответить  
 
 автор: cheops   (08.11.2011 в 16:38)   письмо автору
 
   для: Aidaho   (08.11.2011 в 16:33)
 

Функция нужно сделать рекурсивной, т.е. в цикле while добавить вызов этой же самой функции commentShow() для новых позиций. Кроме этого неплохо бы завести второй параметр, через который передавать степень вложенности, увеличивая его на каждом уровне. Пример можно посмотреть по ссылке http://softtime.ru/forum/read.php?id_forum=3&id_theme=79277.

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования