Выбор роли участника сообщества (готовое решение) / Советы и решения / cogear - система управления сайтами, бесплатная cms для социальной сети http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html/ ru http://cogear.ru http://cogear.ru/templates/cogear/img/logo.png cogear - система управления сайтами, бесплатная cms для социальной сети <![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2382 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2382 inetlover Mon, 11 Jan 2010 16:49:23 GMT <![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2376 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2376 Решение проблемы 1. в файле gears/community/models/community.php в функции _query() комментируем строчки:
function _query(){ $this->db->select('community.*'); //$this->db->join('community_users','community.id = community_users.cid AND community_users.role = "admin"','left'); //$this->db->select('users.name as aname,users.url_name as aurl_name,users.avatar as uavatar'); //$this->db->join('users','users.id = community_users.uid'); $this->db->select('(SELECT COUNT(id) FROM community_users WHERE cid = community.id && approved = true) as users_num',FALSE); $this->db->select('(SELECT COUNT(id) FROM nodes WHERE cid = community.id) as nodes_num',FALSE); return $this->db; }
2. в файле gears/community/index.php в функции index($url_name = FALSE, $action = FALSE, $subaction = FALSE) после строчки
foreach($all as &$community){ добавляем код:
$admins = $this->db->get_where('community_users',array('cid'=>$community['id'],'role'=>'admin'))->result_array(); $community['aname']= ''; foreach($admins as &$admin){ $auser=$this->db->get_where('users',array('id'=>$admin['uid']))->row(); $community['aname'] .= $this->builder->a($auser->name,l('/user/'.$auser->url_name),'user').' '; }
3. там же находим строку
'aname'=>array(fc_t('admin'),'link','10%','before'=>'<span class="user">','after'=>'</span>'), и заменяем ее на
'aname'=>array(fc_t('admin'),'text','10%')
Внимание! У этого решения есть существенный недостаток: число запросов к базе данных при выводе списка сообществ становится OVER 9000 достаточно большим
]]>
suder Sun, 10 Jan 2010 19:47:30 GMT
<![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2374 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2374 http://cogear.ru/community/tips-n-tricks/vybor-roli-uchastnika-soobshhestva-159.html#comment-2372 Есличто ]]> suder Sun, 10 Jan 2010 15:43:19 GMT <![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2373 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2373 Сейчас думаю как решать. (описана вот тут) ]]> suder Sun, 10 Jan 2010 15:30:05 GMT <![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2372 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2372 Сча буду исправлять. Я слишком плохо знаю sql.
Если кто может помочь — суть косяка: сообщество выводится в списке столько раз, сколько у него админов.

Как мне кажется проблема вот в чем:
файл gears/community/models/community.php:
function _query(){ $this->db->select('community.*'); $this->db->join('community_users','community.id = community_users.cid AND community_users.role = "admin"','left'); $this->db->select('users.name as aname,users.url_name as aurl_name,users.avatar as uavatar'); $this->db->join('users','users.id = community_users.uid'); $this->db->select('(SELECT COUNT(id) FROM community_users WHERE cid = community.id && approved = true) as users_num',FALSE); $this->db->select('(SELECT COUNT(id) FROM nodes WHERE cid = community.id) as nodes_num',FALSE); return $this->db; } ]]>
suder Sun, 10 Jan 2010 15:18:07 GMT
<![CDATA[]]> http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2371 http://cogear.ru/vybor-roli-uchastnika-soobshhestva-159.html#comment-2371 dqpb Sun, 10 Jan 2010 15:14:10 GMT