Хук integrate_prepare_display_context

С помощью этого хука можно работать с сообщениями в темах форума, меняя как сами посты, так и контент между ними.

Расположение

Display.php

call_integration_hook('integrate_prepare_display_context', array(&$output, &$message, $counter));

Хук принимает в качестве параметра массивы $output, $message и $counter. В них содержатся, соответственно, отображаемое сообщение (конечный результат), текущее сообщение темы (исходный вариант) и счётчик (порядковый номер отображаемого сообщения, начинающийся с нуля на каждой странице темы).

Использование

Как подключить

Рассмотрим пример:

<?php

if (!defined('SMF'))
    die('No direct access...');

class YourModName
{
    // В этой функции подключаем используемые хуки
    public function hooks()
    {
        add_integration_function('integrate_prepare_display_context', __CLASS__ . '::prepareDisplayContext#', false, __FILE__);
    }

    // Вызывается для каждого сообщения темы, перед отображением на странице
    public function prepareDisplayContext(&$output, &$message, $counter)
    {
        // Просмотр всех данных текущего сообщения
        var_dump($message);

        // Замена содержания сообщения при отображении (как пример)
        $output['body'] = 'Новый текст сообщения';

        // Отображение текущего порядкового номера сообщения на странице
        var_dump($counter);
    }
}

А вот так, например, можно добавить полоски с цветом группы автора каждого сообщения:

<?php

    // ...

    public function prepareDisplayContext(array &$output)
    {
        if (!empty($output['member']['group_color'])) {
            echo '
            <style>
                #msg' . $output['id'] . ' .inner,
                #msg' . $output['id'] . ' .custom_fields_above_signature {
                    border-top: 1px solid ' . $output['member']['group_color'] . ';
                }
            </style>';
        }
    }

Пример

Хук чрезвычайно полезен при работе с сообщениями темы. С помощью него в моде Karma Post Rating, например, отображается рейтинг каждого сообщения, а также выводятся кнопочки для изменения рейтинга.