Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как вывести размер файла в shortstory.tpl

Как вывести размер файла в shortstory.tpl


     09.10.2012    размер файла    Общие вопросы, Общие вопросы по PHP    7114

вопрос
Подскажите пожалуйста как вывести размер файла (аттачмента, прикрепленного к новости) в shortstory.tpl.
Чтобы было видно наглядно я разместила картинку.
Как вывести размер файла в shortstory.tpl

Ответил: Sander


Открыть файл engine/modules/show.short.php
Перед строкой:
$sql_result = $db->query( $sql_select );

Вставить:
$sql_select = str_ireplace(' FROM', ', (SELECT  onserver FROM '.PREFIX.'_files f WHERE f.news_id=p.id LIMIT 1) as onserver FROM', $sql_select );


Далее найти строку:
$news_found = TRUE;

Возле нее вставить:
        if ( $row['onserver'] ) {
            $size = formatsize( @filesize( ROOT_DIR . '/uploads/files/' . $row['onserver'] ) );
            $tpl->set( '[filesize]', "" );
            $tpl->set( '[/filesize]', "" );
            $tpl->set('{filesize}', $size);
        } else $tpl->set_( "'\\[filesize\\](.*?)\\[/filesize\\]'si", "" );

Теперь в шаблоне короткой новости будут новые теги:
[filesize]..[/filesize] - область вывода размера прикрепленного файла, если таковой есть
{filesize} - размер файла

В шаблоне писать:
[filesize]Размер: {filesize}[/filesize]
Отредактировал 16-10-2012, 00:56 - Sander
Причина: Исправил ответ, но теперь работать будет только на DLE 9.6 и старше

16 комментариев

Slavchik
Юзер

Slavchik - 10 октября 2012 08:03 -

а
$tpl->set('{fcount}', intval($row['fcount']));
в какое место вставляем?

Serik
Местный

Serik - 11 октября 2012 18:21 -

На 9.7 не работает
MySQL error in file: /engine/modules/show.short.php at line 65
Error Number: 1054
The Error returned was:
Unknown column 'dle_post.id' in 'where clause'

СПАСИБО надо тыкать в кнопку!

Gelecia93
Юзер

Gelecia93 - 12 октября 2012 19:42 -

На 9.6 тоже не работает, таже ошибка

Emptiness
Юзер

Emptiness - 13 октября 2012 01:14 -

Ответ:
Рабочий способ для 9х:
1.) в файле show.short.php найти строку "$id = $row['id']" ниже добавить этот код:

$db->query( "SELECT * FROM dle_files where news_id = '{$id}'" );
while ( $rows = $db->get_row() ) {
$tpl->set( '{dcount}', $rows['dcount'] );
}

2.) Вставить тег {dcount} в шаблоне shortstory.tpl. Все

Sander
PHP-developer

Sander - 16 октября 2012 00:54 -

Не в обиду, но обрати внимание на замечания..
1. В стандартном файле show.short.php нету строки
$id = $row['id'];
Да и в любом случае эта строка лишняя...

2.
$db->query( "SELECT * FROM dle_files where news_id = '{$id}'" );

* - Не тяни все строки с бд, если нужна только одна, правильно: `dcount`
dle_files - Некоторые люди меняют префикс, правильно: ".PREFIX."_files
news_id = '{$id}' - незачем пересоздавать переменную $id, правильно: news_id = {$row['id']}
Запрос находится внутри другого запроса, поэтому ему надо дать уникальное имя. Пример итого правильной строки:
$att_sql = $db->query( "SELECT dcount FROM ".PREFIX."_files where news_id = {$row['id']}" );


3.
while ( $rows = $db->get_row() ) {

Исходя из правок в предыдущем пункте будет правильно:
while ( $rows = $db->get_row( $att_sql ) ) {


4.
$tpl->set( '{dcount}', $rows['dcount'] );

Если к новости прикреплена не одна новость, а несколько - тогда эта строка будет обрабатываться несколько раз, хотя по факту будет актуальной только последняя.

Исходя из вышеперечисленных пунктов, правильным кодом было бы следующее решение:
$dcount = $db->super_query( "SELECT SUM(dcount) as s FROM ".PREFIX."_files where news_id = {$row['id']}" );
$tpl->set( '{dcount}', intval($dcount['s']) );

И вставлять это все можно после строки:
$news_found = TRUE;


На заметку, такой вариант добавит 1 запрос к каждой короткой новости на сайте. Да и выводит он количество скачиваний, а не размер прикрепленного файла.

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Emptiness
Юзер

Emptiness - 13 октября 2012 01:18 -

В вешеописанном коде добавить строку $tpl->set( '{sizes}', $size ); - вывод размера , а $tpl->set( '{dcount}', $rows['dcount'] ); - вывод скачиваний

ProWebZ
Юзер

ProWebZ - 15 октября 2012 18:02 -

не могу найти эту строчку $id = $row['id'] хоть убей

Dess33
Юзер

Dess33 - 15 октября 2012 22:24 -

От сандера не работает, а Emptiness не понятно в каком месте вставить нужно

Gelecia93
Юзер

Gelecia93 - 12 апреля 2013 11:42 -

Может кто-нибудь все-таки правильный способ, а то реально я ничего не поняла. Вопрос остался открыт.

playgab
Юзер

playgab - 22 марта 2018 23:52 -

Добрыи вечер,

Кто может помоч, когда делаю всё выше вылезает такое ошывка, после того как добовлаю

if ( $row['onserver'] ) {
$size = formatsize( @filesize( ROOT_DIR . '/uploads/files/' . $row['onserver'] ) );
$tpl->set( '[filesize]', "" );
$tpl->set( '[/filesize]', "" );
$tpl->set('{filesize}', $size);
} else $tpl->set_( "'\\[filesize\\](.*?)\\[/filesize\\]'si", "" );

Fatal error: Uncaught Error: Call to undefined method dle_template::set_() in /home/****.net/engine/modules/show.short.php:92 Stack trace: #0 /home/****.net/engine/engine.php(1058): include_once() #1 /home/****.net/engine/init.php(1004): require_once('/home/playgab/t...') #2 /home/****.net/index.php(31): require_once('/home/****..') #3 {main} thrown in /home/p****.net/engine/modules/show.short.php on line 92

baseroad
Юзер

baseroad - 24 августа 2018 12:11 -

Помогите адаптировать этот хак под версию 12.х

Googledono
Юзер

Googledono - 24 августа 2018 13:45 -


baseroad
Юзер

baseroad - 24 августа 2018 16:49 -

Нужно чтобы не в атач.тпл оформлялось, а в нужном мне шаблоне

Googledono
Юзер

Googledono - 24 августа 2018 17:04 -

а что мешает создать доп. поле, куда будут скидываться ссылки?

baseroad
Юзер

baseroad - 25 августа 2018 22:30 -

Потому-что создано 10к новостей. Нужно как-то вывести тег {size} в шаблоне выводимым через custom

dj-avtosh
PHP-developer

dj-avtosh - 27 августа 2018 13:31 -

могу сделать за деньги)

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх