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

Количество скачиваний в краткой новости


     10.09.2011    Краткая новость    Все вопросы » Общие вопросы    8567

вопрос
Здравствуйте. Помогите пожалуйста реализовать следующую идею.

Я держу музыкальный сайт внутри сети своего провайдера. Так вот, что мне нужно сделать. У меня ссылка на скачивание музыки идет через аттач, прописывается в дополнительном поле и выводиться в полной новости там, где прописываются количество комментариев и количество просмотров.

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

То есть выглядеть будет это в краткой новости примерно так.
Просмотров: 5 | Комментариев: 0 | Скачиваний: 25

Помогите реализовать. Заранее спасибо.

Ответил: Sander


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

Вставить:
$sql_select = str_ireplace(' FROM', ', (SELECT sum(dcount) FROM '.PREFIX.'_files f WHERE f.news_id='.PREFIX.'_post.id) as fcount FROM', $sql_select );


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

Возле нее вставить:
        if ( $row['fcount'] ) {
            $tpl->set( '[fcount]', "" );
            $tpl->set( '[/fcount]', "" );
            $tpl->set('{fcount}', $row['fcount']);
        } else $tpl->set_block( "'\\[fcount\\](.*?)\\[/fcount\\]'si", "" );

Теперь в шаблоне короткой новости будут новые теги:
[fcount]..[/fcount] - область вывода количества прикрепленных файлов, если таковые есть
{fcount} - количество (число) прикрепленных файлов к новости


Или просто:
$tpl->set('{fcount}', intval($row['fcount']));

В шаблоне писать:
Скачиваний: {fcount}
Отредактировал 12-09-2011, 05:47 - Sander
Причина: Исправил второй вариант

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

Sander
PHP-developer

Sander - 10 сентября 2011 13:46 -

Это скорее стол заказов.
Но это будет +1 запрос на каждую выводимую новость, т.е. будут делаться два запроса в одном.

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

Telegram: @sandev
Skype: Sander8804

ScreN
Юзер

ScreN - 10 сентября 2011 14:47 -

Sander,
Про +1 запрос к базе я в курсе. Но очень уж хочу реализовать такую фишку.

ScreN
Юзер

ScreN - 11 сентября 2011 05:48 -

Sander,
Огромное тебе спасибище дружище. Оказалось все так просто. Прям респектище огромное тебе.

ScreN
Юзер

ScreN - 11 сентября 2011 05:54 -

Sander,
Хотя есть проблема. Не правильно показывает количество скачиваний. Первый пост показывает 3 скачивания, хотя в нем самом из 28 скачиваний. А остальные посты показывает по 1 скачиванию, хотя в них по 4 по 10 по 20 и.т.д Как поправить?

ScreN
Юзер

ScreN - 11 сентября 2011 05:55 -

Sander,
Ммм.... Это же ты сделал вывод количество прикрепленных файлов. Вот он и показыват, то что в первом посту у меня 3 файла прикреплено, а в остальных по 1. Вот он поэтому так показывает. А мне нужно же количество скачиваний.

nowheremany
Эксперт

nowheremany - 11 сентября 2011 10:21 -

SELECT sum(dcount) as count FROM

Благодарность принимаю тут Связь

ScreN
Юзер

ScreN - 11 сентября 2011 10:42 -

nowheremany,
О. Спасибо. Теперь все правильно показывает. Но когда скачиваний 0, то строка вообще не показывается. Можно сделать как нибудь чтобы если 0 скачиваний, то писалось Скачиваний: 0.

проверку сделать. может под ELSE?

ScreN
Юзер

ScreN - 11 сентября 2011 10:48 -

Сделал по простому. Не знаю, не будет ли это чему нибудь мешать.

Сделал так.


if ( $row['fcount'] ) {
            $tpl-
2;set( '[fcount]', "" );
            $tpl-
2;set( '[/fcount]', "" );
            $tpl-
2;set('{fcount}', $row['fcount']);
        } else $tpl->set_block( "'\\[fcount\\](.*?)\\[/fcount\\]'si&
#34;, "Скачиваний: 0" );


То есть IF(Если) скачиваний небыло, пустое значение "". ELSE(То) вывести строку "Скачиваний: 0"


А в шаблоне стоит так.
[fcount]Скачиваний: {fcount}[/fcount]

Теперь если скачиваний 0. То выводиться строка Скачиваний: 0, которая берется из ELSE. Если же скачивания были, то строка заменяется на нужное количество скачиваний. Вроде работает все.

nowheremany
Эксперт

nowheremany - 11 сентября 2011 14:21 -


       if ( $row['fcount'] ) {
            $tpl->set('{fcount}', $row['fcount']);
        } else{
            $tpl->set('{fcount}', '0');
        }

Благодарность принимаю тут Связь

ScreN
Юзер

ScreN - 11 сентября 2011 15:22 -

nowheremany,
Так получается косяк. Выводит так

[fcount]Скачиваний: 0[/fcount]

nowheremany
Эксперт

nowheremany - 11 сентября 2011 18:05 -

Тэги [fcount][/fcount] тебе уже не нужны

Благодарность принимаю тут Связь

ПафНутиЙ
Админ

ПафНутиЙ - 11 сентября 2011 19:30 -

Оформляйте от и до. добавлю в ответ. довольно полезный хак.

Каков вопрос - таков и ответ. Просто помните об этом.

ScreN
Юзер

ScreN - 12 сентября 2011 03:02 -

Так. Подведем тогда итоги.

Изначальный код от Sander, работает, но показывает сколько файлов прикреплено к новости, а не количество их скачиваний.

Ниже в комментах тот код который представил Nowheremany, а именно вот этот кусок
SELECT sum(dcount) as count FROM

Как раз то что мне было нужно. Но, если скачиваний вообще небыло, то строка вообще не показывалась. Хотя как вариант, можно использовать данный пример, так как у меня есть новости на сайте, без прикрепленных файлов и тогда к этим новостям выводиться строка с количеством не будет, это в общем хорошо, потому что скачивать та в этих новостях вовсе нечего.

Дальше....

Код который представил ниже опять же Nowheremany

       if ( $row['fcount'] ) {
            $tpl->set('{fcount}', $row['fcount']);
        } else{
            $tpl->set('{fcount}', '0');
        }

А в шаблоне просто {fcount}
Работает отлично, все как надо.

Конечный вариант который представили последним уже в ответ, работает тоже не плохо, но если в новости нет файлов, то строка выводиться так Скачиваний: <--- и тут пустое место.

А теперь еще один вопрос. Можно ли как сделать так, что если файлов в новости нету вообще, то есть не прикреплено файлов к новости, то строка вообще к таким постам не выводилась. А если в новости есть прикрепленные файлы, то строка выводилась с количеством скачиваний данного файла прикрепленного к данному посту?

Вот такое еще вопрос.

Всем спасибо за примеры которые выложили. Пока останусь на последнем примере от nowheremany

       if ( $row['fcount'] ) {
            $tpl->set('{fcount}', $row['fcount']);
        } else{
            $tpl->set('{fcount}', '0');
        }

В шаблоне {fcount}

nowheremany
Эксперт

nowheremany - 12 сентября 2011 07:24 -

А теперь еще один вопрос. Можно ли как сделать так, что если файлов в новости нету вообще, то есть не прикреплено файлов к новости, то строка вообще к таким постам не выводилась. А если в новости есть прикрепленные файлы, то строка выводилась с количеством скачиваний данного файла прикрепленного к данному посту?


Будет ещё один запрос к новости тогда.


Благодарность принимаю тут Связь

alkrav
Юзер

alkrav - 15 сентября 2011 00:38 -

А как тоже самое сообразить, но только для полной новости. Там строчки другие.

Aleks
Юзер

Aleks - 15 сентября 2011 12:05 -

alkrav,
вот нашол посмотри то что тебе нужно

alkrav
Юзер

alkrav - 15 сентября 2011 13:15 -

Нет, это не подходит. В целом он делает тоже самое что и ДЛЕ сам может.
Не понимаю зачем этот хак. А мне нужно вывести в fullstory общее количество скачиваний всех файлов, которые привязаны к одной новости.

ScreN
Юзер

ScreN - 17 июля 2012 17:37 -

ХМ... А вот для DLE 9.6, запрос менять нужно. Ошибка выходит.

razrushutel
Юзер

razrushutel - 30 сентября 2014 16:55 -

на DLE 10.1 видает вот такую ошибку http://joxi.ru/DagqVP3JTJAeXa_ADRc помогите исправить?

The Error returned was:
Unknown column 'dle_post.id' in 'where clause'

sadan
Юзер

sadan - 30 сентября 2014 17:32 -


razrushutel
Юзер

razrushutel - 30 сентября 2014 17:46 -

Спасибо)

startget
Юзер

startget - 1 августа 2017 11:09 -

$sql_select = str_ireplace(' FROM', ', (SELECT sum(dcount) FROM '.PREFIX.'_files f WHERE f.news_id=e.news_id) as fcount FROM', $sql_select );

Gooroo-vs
Юзер

Gooroo-vs - 6 февраля 2015 11:44 -

Здравствуйте. У меня такая же проблема после проделанных манипуляций по инструкции выше.

Ошибка:

Error Number: 1054
The Error returned was:
Unknown column 'dle_post.id' in 'where clause'

DLE 10.4

Переходил по ссылке, что на 2 поста выше, но так и не понял, для чего она и как можно решить проблему. Буду рад решению. Заранее спасибо.

mpavelvl
Юзер

mpavelvl - 14 марта 2015 10:58 -

Добрый день. Пробовал на версии 10.2 - выдает ошибку. Подскажите пожалуйста что изменить в коде для 10-х?

startget
Юзер

startget - 1 августа 2017 11:09 -

***Комментарий удален***

startget
Юзер

startget - 1 августа 2017 11:09 -

***Комментарий удален***

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

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

наверх