Получить дополнительные поля

Проблемы с установкой или работой phpBB 3.1.x? Получите помощь здесь!
С 1 июля 2018 года phpBB Group прекращает поддержку phpBB версии 3.1.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.1 до 1 января 2019 года.
Подробнее: Окончание поддержки phpBB 3.1.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
BBCounter
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 1 месяц

Получить дополнительные поля

Сообщение BBCounter »

Доброго времени суток.
Нужно на странице топиков (viewforum.php) получить дату последнего редактирования первого сообщения топика, в БД это поле post->post_edit_time.

Как такое провернуть? Перерыл весь viewforum.php, не могу понять каким вообще образом данные попадают в переменную $row (строка 799)... в viewtopic.php это поле имеется, но опять же - я никак не могу понять каким образом оно берется там =)

П.с. ещё вопросец: всё в том же viewforum.php есть SQL запросы с сортировкой по полю topic_time. Сделал дамп БД - таких слов там вообще не встречается: ни названий таблиц, ни названий полей. :?

а вот это для меня вообще великая тайна:
файл install/install_install.php, 1393 строка

Код: Выделить всё

'UPDATE ' . $data['table_prefix'] . "topics
				SET topic_time = $current_time, topic_last_post_time = $current_time",
это я так понимаю строка SQL запроса. topics - ЧТО ЭТО!? Почему этой таблицы НЕТ В БД!? :o
BBCounter
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 1 месяц

Re: Получить дополнительные поля

Сообщение BBCounter »

Такс, с отсутствующими полями и таблицами я разобрался :oops: сглупил дико, всё на месте. Остался основной вопрос.
пока имею это:
$topic_first_post_id = $row['topic_first_post_id'];
не густо, но началу положено :lol: теперь осталось получить дату последнего редактирования. Как это можно сделать без дополнительных запросов к БД? Может оно уже есть в какой-то переменной, объявленной ранее?
BBCounter
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 1 месяц

Re: Получить дополнительные поля

Сообщение BBCounter »

В общем сделал сам через дополнительный запрос. Пока делал, кажется нашел баг: если сообщение редактировать без указания причины редактирования, то у сообщения не изменяется время последнего редактирования:
includes/functions_posting.php (примерно 1697 строка)

Код: Выделить всё

if ($data['post_edit_reason'] || (!$auth->acl_get('m_edit', $data['forum_id']) && ($post_mode == 'edit' || $post_mode == 'edit_first_post')))
{
    $data['post_edit_reason']		= truncate_string($data['post_edit_reason'], 255, 255, false);

    $sql_data[POSTS_TABLE]['sql']	= array(
        'post_edit_time'	=> $current_time,
        'post_edit_reason'	=> $data['post_edit_reason'],
        'post_edit_user'	=> (int) $data['post_edit_user'],
    );

    $sql_data[POSTS_TABLE]['stat'][] = 'post_edit_count = post_edit_count + 1';
}
else if (!$data['post_edit_reason'] && $mode == 'edit' && $auth->acl_get('m_edit', $data['forum_id']))
{
    $sql_data[POSTS_TABLE]['sql'] = array(
        'post_edit_reason'	=> '', // вот то самое проблемное место - сообщение будет отредактировано,
        // но дата редактирования не изменится! Лечится добавлением вот этих строк:
        // 'post_edit_time'	=> $current_time,
        // 'post_edit_user'	=> (int) $data['post_edit_user'],
    );
}

А само решение моей проблемы выглядит так:

Код: Выделить всё

$topic_first_posts = array();
    $last_edit_dates = array();
    
    foreach ($topic_list as $topic_id)
    {
        $row = &$rowset[$topic_id];
        $topic_first_posts[] = $row['topic_first_post_id'];
    }
    
    $topic_first_posts = join(',', $topic_first_posts);
    
    $sql_ex = 'SELECT post_edit_time, post_id 
               FROM ' . POSTS_TABLE . '
               WHERE post_id IN (' . $topic_first_posts . ')';

    $result_ex = $db->sql_query($sql_ex);
    
    while($row_ex = $db->sql_fetchrow($result_ex)) {
        $last_edit_dates[$row_ex['post_id']] = $row_ex['post_edit_time'];
    }
    
    $db->sql_freeresult($result_ex);
    
    $s_type_switch = 0;
    foreach ($topic_list as $topic_id)
    {
        $row = &$rowset[$topic_id];
        
        /** бла-бла-бла **/
        
        $topic_first_post_id = $row['topic_first_post_id'];
        $issue_alt = (isset($last_edit_dates[$topic_first_post_id]) && $last_edit_dates[$topic_first_post_id])
                        ? $user->format_date($last_edit_dates[$topic_first_post_id]) 
                        : '-';
                        
        $topic_row = array(
            'ISSUE_STATUS'              => $issue_status,
            'ISSUE_ALT'                 => $issue_alt,
            
        /** бла-бла **/
BBCounter
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 1 месяц

Re: Получить дополнительные поля

Сообщение BBCounter »

Ну и скриншот того, что получилось и из-за чего, собственно, сыр-бор :)
status.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Вернуться в «Поддержка phpBB 3.1.x»