Подсчитывание контента и вывод в блок

Главные вкладки

Аватар пользователя CASHMAR CASHMAR 18 сентября 2009 в 20:19

Приветствую всех.

Появилась проблема...
Нужно вывести в блок количество групп и общий объём данных (суммарное значение всех файлов).

Группа — это материал с типом "новость". Соответственно, нужно подсчитывать количество материалов этого типа.
В материалах (новость о группе) есть строка (используется CCK) "Размер", в которой указан размер альбома группы. Нужно суммировать значение всех строк из всех новостей.

Может есть какой-либо модуль или что-то ещё. Ума не приложу как это реализовать.
Прошу помощи.
Благодарю заранее.

Комментарии

Аватар пользователя CASHMAR CASHMAR 18 сентября 2009 в 20:46

Есть новости об альбомах рок-групп. В каждой новости указано название группы, альбома, год выпуска, размер и треклист (в треклисте после списка треков указана ссылка на скачивание альбома).

Нужно суммировать все показания строк "размер" и полученное число вывести в блок.

Аватар пользователя Dan Dan 19 сентября 2009 в 1:09

Лучше всего простой SQL-запрос в своём модуле, который будет предоставлять блок (hook_block), плюс кэширование блока. Кэш блока сбрасывать по изменению материала Группа. То есть этот SQL-запрос у вас будет срабатывать только при изменении нод, в остальное время - браться из кэша.

Аватар пользователя CASHMAR CASHMAR 19 сентября 2009 в 9:56

Я с программированием на далекой руке (основы php немного знаю, но об API друпала мне ничего не известно).
Если не сложно, пожалуйста, напишите рабочий код и укажите куда его вставить. Буду очень благодарен.

Аватар пользователя Dan Dan 21 сентября 2009 в 15:53

Было бы чудесно если бы Вы написали SQL-запрос, т.к. не знаю Вашей структуры. Если не можете, то скажите как называется тип материала и какое системное имя у поля "размер".

Аватар пользователя CASHMAR CASHMAR 21 сентября 2009 в 18:41

С SQL языком я пока в ещё больших неладах, нежели с php. =[

Тип материала: "news" (создавал вручную).
Системное имя поля "размер": "field_mb" (повторюсь, CCK).

Аватар пользователя Dan Dan 21 сентября 2009 в 20:23

Хорошо. Но Вы можете проверить запрос (например в phpMyAdmin)?

SELECT SUM(node_news.field_mb_value) AS mb_value FROM node node
LEFT JOIN content_type_news node_news ON node.vid = node_news.vid
WHERE node.type in ('news') AND node.status <> 0

Если Вы используете префиксы, то замените PREF_ на свой:

SELECT SUM(node_news.field_mb_value) AS mb_value FROM PREF_node node
LEFT JOIN PREF_content_type_news node_news ON node.vid = node_news.vid
WHERE node.type in ('news') AND node.status <> 0

Это запрос считает сумму по полю field_mb. Подразумевается, что тип у этого поля - integer.

Аватар пользователя marazmus marazmus 21 сентября 2009 в 20:43

"Dan" wrote:
Подождём что скажет MDinc - у него, видимо, решение лучше.

MDInc у нас важная птица, он бесплатно не работает Smile

Аватар пользователя CASHMAR CASHMAR 21 сентября 2009 в 21:18

Амперметр мне в руку! ))

Результат: mb_value = 2005.9
Это магия какая-то. )) Спасибо. Pardon
Не подскажите как это вывести в блок и там же подсчитать кол-во групп (то бишь, материалов типа "news")?

Аватар пользователя Dan Dan 22 сентября 2009 в 3:35

2marazmus: ну наскребём 30$ всем миром, может хватит Smile

2CASHMAR: Да, подскажу, но чуть позже - сейчас пока со временем завал.