Что нового

Как правильно организовать вывод кратких новостей в модуле DLE?

kosta6832

Посетитель
Регистрация
3 Июн 2021
Сообщения
1
Реакции
0
Добрый день! Нужно помощь мододелов, застопорился на выводе кратких новостей по списку ID.

Возможно ли вывести список кратких новостей через метод $tpl->set('', $list)?

Пример кода, в конце как раз вывод shortstory. Пробовал по всякому выводить, либо выводятся только новости, без другой информации. Или выводится только информация по модулю, но без кратких новостей. Должен же быть какой-то адекватный способ вывести через функции dle, чтобы не писать дополнительно обработку кратких новостей для модуля..


PHP:
private function handleView()
    {
        global $tpl, $db, $config;
        

        $id = $this->getValidId();
        $data = $this->getCollectionData($id);

        if (!$data) {
            $this->showMessage('Ошибка', "Подборка не найдена.");
            return;
        }

        // Добавляем SpeedBar с названием подборки
        $this->generateSpeedBar(array(
            array(
                'name' => $data['title'],
                'url' => ''
            )
        ));

        // Проверяем доступ - либо подборка approved, либо это автор/админ
        if (
            $data['approve'] != 1 &&
            ($this->member_id['name'] != $data['user_id'] && $this->member_id['user_group'] != 1)
        ) {
            $this->showMessage('Ошибка', "Эта подборка еще не прошла модерацию.");
            return;
        }

        // Увеличиваем счетчик просмотров
        $this->db->query("UPDATE " . PREFIX . "_user_collections SET views = views + 1 WHERE id = '$id'");

        // Выводим основную информацию о подборке
        $this->tpl->load_template('ucollection_view.tpl');

        // Обработка tpl
        
        // .....

        // Выводим список ID
        // Если $data['news_id'] это строка с числами через запятую
        if (is_string($data['news_id']) && strpos($data['news_id'], ',') !== false) {
            $id_news = $data['news_id'];
        }
        // Если это массив
        elseif (is_array($data['news_id'])) {
            $id_news = implode(',', $data['news_id']);
        }
        // Если это одно число
        else {
            $id_news = (string)$data['news_id'];
        }
        if (empty($id_news)) {
            $this->tpl->set('{news-list}', '<div class="ucollection-empty">В подборке пока нет фильмов</div>');
            $this->tpl->compile('content');
            return;
        }

        // Вывод shortStory

        $cstart = $_GET['cstart'] ?? 0;

        if ($cstart) {
            $cstart = $cstart - 1;
            $cstart = $cstart * $this->ucollection_config['countPostItemPage'];
        }
        $cstart = intval($cstart);

        if (isset($_SESSION['dle_sort_lastnews'])) {
            $news_sort_by = $_SESSION['dle_sort_lastnews'];
        } else {
            $news_sort_by = "date";
        }

        if (isset($_SESSION['dle_direction_lastnews'])) {
            $news_direction_by = $_SESSION['dle_direction_lastnews'];
        } else {
            $news_direction_by = "DESC";
        }

        $where = "id IN(" . $this->db->safesql($id_news) . ")";
        $stop_list = "";
        $where_date = "";
        
        if ($where && !empty($id_news)) {

            $sql_select = "SELECT id, autor, date, alt_name, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, actors, category, comm_num, allow_comm, approve, tags FROM " . PREFIX . "_post WHERE {$stop_list}approve=1 AND " . $where . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $this->config['news_number'];
            $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}approve=1 AND " . $where . $where_date;

            $count_all = $this->db->super_query($sql_count);
            
            // Сохраняем текущий контент
            $old_content = $this->tpl->result['content'];

            // Генерируем список новостей
            $this->tpl->result['content'] = '';
            
            $allow_active_news = true;
            include_once(DLEPlugins::Check(ENGINE_DIR . '/modules/show.short.php'));
        
            // Сохраняем сгенерированные новости
            $news_content = $this->tpl->result['content'];
            
            // Восстанавливаем старый контент и добавляем новости
            $this->tpl->result['content'] = $old_content;
            
            $this->tpl->set('{news-list}', $news_content);

            // Добавляем пагинацию
            if ($count_all['count'] > $this->$config['news_number']) {
                $this->generatePagination($count_all['count'], $this->config['news_number'], ($cstart / $this->config['news_number']) + 1, "ucollection/view/{$id}");
                $this->tpl->set('{pagination}', $this->tpl->result['navigation']);
            } else {
                $this->tpl->set('{pagination}', '');
            }
        }

        $this->tpl->compile('content');
        $this->tpl->clear();
    }
 
Если установишь тег, то должно выводить. Однако $list должен быть уже скомпилированным.
$this->tpl->compile('content'); $this->tpl->clear();
Сохраняй сначала в переменную скомпилированный контент, потом чисть
 
Последнее редактирование:
Верх