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

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


     10.09.2011    Общие вопросы    5536

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

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

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

То есть выглядеть будет это в краткой новости примерно так.
Просмотров: 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
Причина: Исправил второй вариант

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

Sander
1126

1637 | 1204

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

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

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

ICQ: 404-037-556
Skype: Sander8804

ScreN
10

207 | 102

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

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

ScreN
10

207 | 102

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

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

ScreN
10

207 | 102

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

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

ScreN
10

207 | 102

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

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

nowheremany
192

1659 | 1292

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

SELECT sum(dcount) as count FROM

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

ScreN
10

207 | 102

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

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

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

ScreN
10

207 | 102

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
192

1659 | 1292

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


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

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

ScreN
10

207 | 102

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

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

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

nowheremany
192

1659 | 1292

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

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

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

ПафНутиЙ
1065

3395 | 2434

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

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

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

ScreN
10

207 | 102

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
192

1659 | 1292

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

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


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


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

alkrav
2 | 2

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

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

Aleks
1

21 | 19

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

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

alkrav
2 | 2

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

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

ScreN
10

207 | 102

ScreN - 17 июля 2012 17:37 - Юзер

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

razrushutel
3

42 | 8

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
16

107 | 38

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


razrushutel
3

42 | 8

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

Спасибо)

Gooroo-vs
1

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
10 | 2

mpavelvl - 14 марта 2015 10:58 - Юзер

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

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

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