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

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

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


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

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

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

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

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

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

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


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

LazyDev
PHP-developer

LazyDev - -

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


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

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

LazyDev
PHP-developer

LazyDev - -

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

Мой блог: LazyDev.pro

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

neo-azazello
Юзер

neo-azazello - -

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

neo-azazello
Юзер

neo-azazello - -

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

LazyDev
PHP-developer

LazyDev - -

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

Мой блог: LazyDev.pro

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

neo-azazello
Юзер

neo-azazello - -


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

neo-azazello
Юзер

neo-azazello - -

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

LazyDev
PHP-developer

LazyDev - -

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

Мой блог: LazyDev.pro

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

ARTYOM
Юзер

ARTYOM - -

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

neo-azazello
Юзер

neo-azazello - -

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

neo-azazello
Юзер

neo-azazello - -

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

neo-azazello
Юзер

neo-azazello - -

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

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

наверх