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

Как вывести сумму дополнительного поля?


     06.03.2016    Общие вопросы, Хаки    2340

вопрос
Добрый вечер.

Реализовал под нужду компании веб проект под ДЛЕ 11. Работает шикарно. Но вот застрял в одном моменте:

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

Грубо говоря: Есть категории Дом и Дача. В категории Дом есть 6 записей с дополнтельным полем цена, а в категории Дача 13 записей, тоже с дополнтельным полем цена. Как сделать чтобы при просмотре категории Дом выводилась сумма 6 записей, а в категории Дача 13-ти.

Заранее благодарю!

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


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

LazyDev
PHP-developer

LazyDev - 6 марта 2016 20:59 -

1. Создать файл в /engine/modules - countf.php вставить в него
<?php
/*
Автор : Gameer
-----------------------------------------------------
URL: http://gameer.name/
*/
if( ! defined( 'DATALIFEENGINE' ) ) return;
if($dle_module == "cat")
{
    $field = $db->safesql(trim(strip_tags(stripslashes($field))));
    $count_xfield = dle_cache('news_c_xf_' . $category_id . $field, $config['skin']);
    if(!$count_xfield)
    {
        $count_xfield = $db->super_query("SELECT SUM(SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$field}|', -1 ) ,  '||', 1 )) as count FROM " . PREFIX . "_post WHERE SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$field}|', -1 ) ,  '||', 1 ) != '' AND approve='1' AND category REGEXP '[[:<:]]({$category_id})[[:>:]]'");
        $res = $count_xfield['count'];
        echo $res;
        create_cache('news_c_xf_' . $category_id . $field, $res, $config['skin']);
    }
    else echo $count_xfield;
}

2. Подключить в main.tpl -
{include file="/engine/modules/countf.php?field=test"}

Заменить test на латинское имя нужного доп поля.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

neo-azazello
Юзер

neo-azazello - 6 марта 2016 21:38 -


Gameer, вы гений! Спасибо вам за решение!

Но вот одно остется загадкой: Почему некоторые категории выдают слишком длинные десятичные цифры? Сравните:

LazyDev
PHP-developer

LazyDev - 6 марта 2016 23:02 -

Замените это
$res = $count_xfield['count'];
На это:
$res = round($count_xfield['count'], 2);

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

neo-azazello
Юзер

neo-azazello - 7 марта 2016 08:04 -

Сейчас всё работает прекрасно. Вопрос решен. Спасибо, Gameer!

neo-azazello
Юзер

neo-azazello - 9 марта 2016 19:39 -

Вышла маленькая проблема: Во время вывода суммы, десятичные цифры разделяется запятой. При арифметических калькуляции запятая выдает ошибку. Можно чтобы сумма выводилась точкой вместе запятой?

LazyDev
PHP-developer

LazyDev - 9 марта 2016 19:44 -

neo-azazello, замените
$res = round($count_xfield['count'], 2);
на
$res = number_format($count_xfield['count'], 2, '.', '');

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

neo-azazello
Юзер

neo-azazello - 9 марта 2016 20:19 -


Начал считать, но :

neo-azazello
Юзер

neo-azazello - 9 марта 2016 20:42 -

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

LazyDev
PHP-developer

LazyDev - 9 марта 2016 20:47 -

neo-azazello, замените
$res = number_format($count_xfield['count'], 2, '.', '');
на
$res = str_replace(",",".",round($count_xfield['count'], 2));

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

ARTYOM
Юзер

ARTYOM - 13 января 2020 01:07 -

DLE 13+
не работает (((

neo-azazello
Юзер

neo-azazello - 9 марта 2016 20:52 -

Супер! Великолепно! Спасииибо снова, Gameer! :)

neo-azazello
Юзер

neo-azazello - 3 августа 2016 09:32 -

Еще один вопрос по поводу этой темы: Можно ли разделить тысячные значении точкой или зяпятой? Пробелом видимо не реально из-за арифметической точки зрения.

neo-azazello
Юзер

neo-azazello - 6 августа 2016 14:13 -

@Gameer можете что-нибудь предложить?

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

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

наверх