Технический сбой

Сайт временно работает в режиме только для чтения, идут восстановительные работы. Приносим свои извинения за неудобства.
DLE FAQ » Все вопросы » Общие вопросы » Количество скачиваний в краткой новости

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


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

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

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

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

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

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

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

Telegram: @sandev
Skype: Sander8804

ScreN
Юзер

ScreN - -

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

ScreN
Юзер

ScreN - -

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

ScreN
Юзер

ScreN - -

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

ScreN
Юзер

ScreN - -

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

nowheremany
Эксперт

nowheremany - -

SELECT sum(dcount) as count FROM

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

ScreN
Юзер

ScreN - -

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

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

ScreN
Юзер

ScreN - -

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

Сделал так.


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


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

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

ScreN
Юзер

ScreN - -

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

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

nowheremany
Эксперт

nowheremany - -

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

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

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

ПафНутиЙ - -

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

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

ScreN
Юзер

ScreN - -

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

Изначальный код от 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 - -

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


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


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

alkrav
Юзер

alkrav - -

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

Aleks
Юзер

Aleks - -

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

alkrav
Юзер

alkrav - -

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

ScreN
Юзер

ScreN - -

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

razrushutel
Юзер

razrushutel - -

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

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

razrushutel
Юзер

razrushutel - -

Спасибо)

startget
Юзер

startget - -

$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 - -

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

Ошибка:

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

DLE 10.4

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

mpavelvl
Юзер

mpavelvl - -

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

startget
Юзер

startget - -

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

startget
Юзер

startget - -

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

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

наверх