Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы Как вывести размер файла в shortstory.tpl

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


     09.10.2012    Общие вопросы, Общие вопросы по PHP    4300

вопрос
Подскажите пожалуйста как вывести размер файла (аттачмента, прикрепленного к новости) в 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 и старше

Комментарии пользователей (9)

Slavchik
114 | 67

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

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

Serik
4

408 | 191

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
19 | 5

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

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

Emptiness
2 | 2

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
1125

1637 | 1204

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 - мой блог.

ICQ: 404-037-556
Skype: Sander8804

Emptiness
2 | 2

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

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

ProWebZ
9 | 6

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

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

Dess33
3 | 2

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

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

Gelecia93
19 | 5

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

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

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

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