Как вывести в компонент люди "users" количество сообщений
Что за сообщения? В какой таблице базы хранится количество сообщений (или сами сообщения, если нет готовой цифры подсчитанных сообщений)?
Нико,
Что за сообщения? В какой таблице базы хранится количество сообщений (или сами сообщения, если нет готовой цифры подсчитанных сообщений)?
Да я так и сделал но не получается из фильтров. Я его делаю в виджете на главном если напишу код постепенно сможете как то помочь с подсказками?
В общем-то главная подсказка уже подсказана:постепенно сможете как то помочь с подсказками ?
$this->model->filterEqual("user_id", $user_id); $mess_count = $this->model->getCount('таблица_с_сообщениями', '*');
В общем-то главная подсказка уже подсказана:постепенно сможете как то помочь с подсказками ?
$this->model->filterEqual("user_id", $user_id); $mess_count = $this->model->getCount('таблица_с_сообщениями', '*');
Смотрите я вывожу его как виджет на главном вот
Вот сам виджет
<?php class widgetUsersList extends cmsWidget { public function run(){ $show = $this->getOption('show', 'all'); $dataset = $this->getOption('dataset', 'latest'); $groups = $this->getOption('groups'); $list_fields = $this->getOption('list_fields'); $user = cmsUser::getInstance(); $model = cmsCore::getModel('users'); $model->filterEqual("id", $user->id); Вот добавил. $mess_count = $model->getCount('users_messages', 'is_new'); Вот добавил. if($list_fields){ $content_model = cmsCore::getModel('content'); $content_model->setTablePrefix('')->orderBy('ordering'); $content_model->filterIn('id', $list_fields); $fields = $content_model->getContentFields('cms_users'); } switch ($show){ case 'friends': if (!$user->is_logged) { return false; } $model->filterFriends($user->id); break; case 'friends_online': if (!$user->is_logged) { return false; } $model->filterFriends($user->id); $model->joinInner('sessions_online', 'online', 'i.id = online.user_id'); break; } switch ($dataset){ case 'latest': $model->orderBy('date_reg', 'desc'); break; case 'rating': $model->orderBy('karma desc, rating desc'); break; case 'popular': $model->orderBy('friends_count', 'desc'); break; case 'date_log': $model->orderBy('date_log', 'desc'); break; } if ($groups){ $model->filterGroups($groups); } $profiles = $model->limit($this->getOption('limit', 10))->getUsers(); if (!$profiles) { return false; } if($fields){ foreach ($profiles as $key => $profile) { foreach($fields as $field){ if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } if (!$profile[$field['name']] && $profile[$field['name']] !== '0') { continue; } $label_pos = 'none'; } else { $label_pos = $field['options']['label_in_list']; } $field_html = $field['handler']->setItem($profile)->parseTeaser($profile[$field['name']]); if (!$field_html) { continue; } 'label_pos' => $label_pos, 'type' => $field['type'], 'name' => $field['name'], 'title' => $field['title'], 'html' => $field_html ); } } } 'profiles' => $profiles, 'style' => $this->getOption('style', 'list'), 'is_avatars' => $this->getOption('is_avatars') ); } }
Так теперь этот $mess_count надо как-то в шаблоне виджета вывести.
И в return добавьте
'mess_count' => $mess_count
Нико,
Так теперь этот $mess_count надо как-то в шаблоне виджета вывести.
И в return добавьте
'mess_count' => $mess_count
Мне просто нужно как то вот этот чат вывести с боку и что бы всегда было открыто типо этого
Вот добавил в шаблон
return array(
'profiles' => $profiles,
'mess_count' => $mess_count,
'style' => $this->getOption('style', 'list'),
'is_avatars' => $this->getOption('is_avatars')
);
На фотке 1 появился с рядом именем но контакты пропали остался только пользователь под своим ид
php ни на что не ругается? Отладка включена? В консоли никаких предупреждений?
Нико,
php ни на что не ругается? Отладка включена? В консоли никаких предупреждений?
Нет все работает, мы просто отфильтровали
$model->filterEqual("id", $user->id);
Нико,
php ни на что не ругается? Отладка включена? В консоли никаких предупреждений?
А, так тогда
$this->model->filterEqual("from_id", $user_id);
Нико,
А, так тогда
$this->model->filterEqual("from_id", $user_id);
Я знаю что вы говорите но не сработает, а join делал не получается для виджета сделать это.
<?php class widgetUsersList extends cmsWidget { public function run(){ $show = $this->getOption('show', 'all'); $dataset = $this->getOption('dataset', 'latest'); $groups = $this->getOption('groups'); $list_fields = $this->getOption('list_fields'); $user = cmsUser::getInstance(); $model = cmsCore::getModel('users'); //$model->filterEqual("from_id", $user->id); //$mess_count = $model->getCount('users_messages', 'is_new'); if($list_fields){ $content_model = cmsCore::getModel('content'); $content_model->setTablePrefix('')->orderBy('ordering'); $content_model->filterIn('id', $list_fields); $fields = $content_model->getContentFields('cms_users'); } switch ($show){ case 'friends': if (!$user->is_logged) { return false; } $model->filterFriends($user->id); break; case 'friends_online': if (!$user->is_logged) { return false; } $model->filterFriends($user->id); $model->joinInner('sessions_online', 'online', 'i.id = online.user_id'); break; } switch ($dataset){ case 'latest': $model->orderBy('date_reg', 'desc'); break; case 'rating': $model->orderBy('karma desc, rating desc'); break; case 'popular': $model->orderBy('friends_count', 'desc'); break; case 'date_log': $model->orderBy('date_log', 'desc'); break; } if ($groups){ $model->filterGroups($groups); } $profiles = $model->limit($this->getOption('limit', 10))->getUsers(); if (!$profiles) { return false; } if($fields){ foreach ($profiles as $key => $profile) { foreach($fields as $field){ if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } if (!$profile[$field['name']] && $profile[$field['name']] !== '0') { continue; } $label_pos = 'none'; } else { $label_pos = $field['options']['label_in_list']; } $field_html = $field['handler']->setItem($profile)->parseTeaser($profile[$field['name']]); if (!$field_html) { continue; } 'label_pos' => $label_pos, 'type' => $field['type'], 'name' => $field['name'], 'title' => $field['title'], 'html' => $field_html ); } } } 'profiles' => $profiles, 'mess_count' => $mess_count, 'style' => $this->getOption('style', 'list'), 'is_avatars' => $this->getOption('is_avatars') ); } }
В смысле нужно в виджете вывода юзеров вывести, сколько он сообщений написал?
Сейчас гляну, как сделать.
=====================================================================
В общем найдите в файле \templates\default\controllers\users\widgets\list\list.tpl.php строку:
<a href="<?php echo $url; ?>"><?php html($profile['nickname']); ?></a>
<a href="<?php echo $url; ?>"><?php html($profile['nickname']); echo ' ('.cmsCore::getModel('messages')->filterEqual('from_id', $profile['id'])->getCount('users_messages', 'id').')';?></a>
Нико,
В смысле нужно в виджете вывода юзеров вывести, сколько он сообщений написал?
Сейчас гляну, как сделать.
=====================================================================
В общем найдите в файле \templates\default\controllers\users\widgets\list\list.tpl.php строку:
Да спасибо большое вывелось, а вот так если сделать будет исчислять только непрочитанные.
filterEqual('is_new', 1)->