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

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


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

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

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

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

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

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

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


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

Gameer
233

1150 | 399

Gameer - 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 на латинское имя нужного доп поля.

neo-azazello
14

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


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

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

Gameer
233

1150 | 399

Gameer - 6 марта 2016 23:02 - Юзер

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

neo-azazello
14

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

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

neo-azazello
14

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

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

Gameer
233

1150 | 399

Gameer - 9 марта 2016 19:44 - Юзер

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

neo-azazello
14

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


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

neo-azazello
14

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

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

Gameer
233

1150 | 399

Gameer - 9 марта 2016 20:47 - Юзер

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

neo-azazello
14

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

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

neo-azazello
14

neo-azazello - 3 августа 2016 09:32 - Юзер

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

neo-azazello
14

neo-azazello - 6 августа 2016 14:13 - Юзер

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

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

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