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

Filesize + доп. поле = вывод в полной новости размера файла!?


     12.02.2015    Все вопросы » Общие вопросы по PHP    2951

вопрос
В доп. поле [xvalue_file007] вставлена прямая ссылка на файл.
Как сделать в полной новости вывод размера файла?

В show.full.php после
$tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template );

добавил -
if ($value[0] == "file007") {
$file007 = formatsize( @filesize($xfieldsdata[$value[0]]));
}


В fullstory.tpl вставил [xvalue_file007]
Но размер не выводится, просто прямая ссылка =(
Можно ли как то по другому сделать, главное чтобы выводило размер файла из доп. поля?

Ответа пока нет


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

FastFud
Юзер

FastFud - 12 февраля 2015 22:43 -

Открыть show.full.php и найти
$tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template );
после, добавить
$xfsize = formatsize( @filesize( $xfieldsdata[$value[0]] ));
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", $xfsize, $tpl->copy_template );
в fullstory.tpl использовать
[xfvalue_size_название_доп_поля]
В вашем случае будет так
[xfvalue_size_file007]

vadims
Гости

vadims - 12 февраля 2015 22:52 -

К сожалению выводит -
 b

vitnet
PHP-developer

vitnet - 13 февраля 2015 00:01 -


либо v2 побыстрее

vadims
Гости

vadims - 13 февраля 2015 00:28 -

Спасибо вам FastFud и vitnet!
Почти все работает НО только с ссылкой.

Если вставить -
$xfsize = formatsize( remote_filesize($xfieldsdata[$value[0]]));
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", $xfsize, $tpl->copy_template );


Отображается -
0 b


Если -
$xfsize = formatsize( remote_filesize('ссылка_на_файл.pdf'));
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", $xfsize, $tpl->copy_template );


Определяется файл, отображается как надо -
2.84 Mb


Что не так в строке -
$xfsize = formatsize( remote_filesize($xfieldsdata[$value[0]]));



vitnet
PHP-developer

vitnet - 13 февраля 2015 09:58 -

Проверил у себя, все ок. (В моем случае это поле image, измените на свое)
                if( $value[0] == "image" ) {
                    $file007 = formatsize( remote_filesize( $xfieldsdata[$value[0]] ) );

                    $tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", ($file007 ? $file007 : ""), $tpl->copy_template );
                }

vadims
Гости

vadims - 13 февраля 2015 10:56 -

Добавил так -
 if( $value[0] == "file007" ) {
$xfsize = formatsize( remote_filesize( $xfieldsdata[$value[0]] ) );
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", ($xfsize ? $xfsize : ""), $tpl->copy_template );
                }    


Но отображается - 0 b

Если так добавить, то все определяет -
 if( $value[0] == "file007" ) {
                    $xfsize = formatsize( remote_filesize('прямая_ссылка_на_файл_pdf') );
                    $tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", ($xfsize ? $xfsize : ""), $tpl->copy_template );
                }    

так тоже определяет -
$xfsize = formatsize( remote_filesize('прямая_ссылка_на_файл_pdf') );
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", ($xfsize ? $xfsize : ""), $tpl->copy_template ); 


Если вставить [xfvalue_{$value[0]}] то отображается просто ссылка (как будто код не работает, а стандартные доп. поле работает).
[xfvalue_size_file007] отлично тем, что можно вывести размер, а [xfvalue_file007] саму ссылку.
Но почему у Вас работает, а у меня нет? Может на сервер не только curl (apt-get install php5-curl) нужно установить? Хотя ошибки не выводит.

P.S. Этот код -
function remote_filesize($url) {   
    ob_start();  
    $ch = curl_init($url);  
    curl_setopt($ch, CURLOPT_HEADER, 1);  
    curl_setopt($ch, CURLOPT_NOBODY, 1);  
    $ok = curl_exec($ch);  
    curl_close($ch);  
    $head = ob_get_contents();  
    ob_end_clean();  
    $regex = '/Content-Length:\s([0-9].+?)\s/';  
    $count = preg_match($regex, $head, $matches);  
    return isset($matches[1]) ? $matches[1] : '0';  
}


я вставил после -
$xfieldsdata = xfieldsdataload( $row['xfields'] );

Может где то в другом месте нужно вставить? Хотя, по прямой ссылке определяет размер.

vadims
Гости

vadims - 13 февраля 2015 12:08 -

Извините меня, сделал ошибку и не работало!
Спасибо большое vitnet и FastFud за помощь!
Оба последних варианта правильны!

Инструкция (может еще кому пригодится)

В доп. полях создать поле, например filesize

После -
$xfieldsdata = xfieldsdataload( $row['xfields'] );

Добавить -
function remote_filesize($url) {   
    ob_start();  
    $ch = curl_init($url);  
    curl_setopt($ch, CURLOPT_HEADER, 1);  
    curl_setopt($ch, CURLOPT_NOBODY, 1);  
    $ok = curl_exec($ch);  
    curl_close($ch);  
    $head = ob_get_contents();  
    ob_end_clean();  
    $regex = '/Content-Length:\s([0-9].+?)\s/';  
    $count = preg_match($regex, $head, $matches);  
    return isset($matches[1]) ? $matches[1] : '0';  
}


После -
$tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template );

Добавить -
$xfsize = formatsize( remote_filesize($xfieldsdata[$value[0]]) );
$tpl->copy_template = str_replace( "[xfvalue_size_{$value[0]}]", $xfsize, $tpl->copy_template );


В шаблон fullstory.tpl в нужное место вставить - [xfvalue_size_filesize].
Так же можно использовать для ссылки на файл [xfvalue_filesize].

P.S. Я этот хак использую с модулем "Добавление картинок и файлов в новость v4.0.3" (для прямых ссылок на файлы)

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

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

наверх