CMS Drupal

Может плохо искал, но ничего готового не нашел по данной теме. Сначала решил воспользоваться модулем views, т.к. он уже использовался в моем проекте, но данный модуль пока не умеет делать группировки. Нашел модуль views_groupby, который как видно из названия является дополнением к модулю views и добавляет одну группировочную функцию count(), которая мне то и нужна. Но. То ли модуль этот не доделанный, то ли у меня руки кривые, но никак не захотел он у меня делать группировку по ролям. Такое ощущение, что этот модуль справляется с группировкой, когда выборка идет из одной таблицы, а в нашем случае нам надо сделать выборку из трех таблиц: users, users_roles, role.
Поэтому пришлось написать небольшой модуль. Во первых делаем хук для определения собственного блока:

function alex_module_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $blocks = array();
      $blocks[0]['info'] = 'Количество пользователей';
      return $blocks;
    case 'view' :
	  if ($delta == 0) {
		$blocks['subject'] = t('Statistics');
        $blocks['content'] = _stat_block();
      }
  }
  return $blocks;
}

И собственно функция, в котрой делаем нужную нам выборку:

function _stat_block() {
  $result = '<div class="stat item-list"><ul>';
  $query = "SELECT COUNT(*) AS number, r.name
    FROM {users} u INNER JOIN {users_roles} ur ON u.uid = ur.uid
    INNER JOIN {role} r ON r.rid = ur.rid
    WHERE ur.rid > 2 AND u.status = 1
    GROUP BY ur.rid
  ";
  $queryResult = db_query($query);
  while ($item = db_fetch_array($queryResult)) {
    $result .= '<li class="leaf">'.$item['name'].': '.$item['number'].'</li>';
  }
  $result .= '</ul></div>';
  return $result;
}

В запросе я поставил условие ur.rid > 2, чтобы не выводить в блоке такие роли как "anonymous user" и "authenticated user".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".