newbie 1723 01/26/17 08:51 А как в настройках админки кол-во сообщений заменить на кол-во рейтинга?А какая разница? Читайте "Минимальное количество сообщений для получения звания" как "Минимальный рейтинг, необходимый для получения звания".Вы же в коде кол-во постов меняете на свое значение. И не более. 1 Поделиться сообщением Ссылка на сообщение
Strategius 52 01/26/17 09:23 Все работает, спасибо большое! Поделиться сообщением Ссылка на сообщение
Strategius 52 10/09/17 17:17 А возможно ли добавить этот рейтинг в форум как репутацию, чтобы он кэшировался в базе данных и по его переменной можно было создавать условия доступа к функциям форума? Например: <if test="$member['grating'] > 1">Отображение кнопки, если рейтинг больше единицы</if> Поделиться сообщением Ссылка на сообщение
newbie 1723 10/10/17 08:32 А возможно ли добавить этот рейтинг в форум как репутацию, чтобы он кэшировался в базе данных и по его переменной можно было создавать условия доступа к функциям форума?Не всегда и не везде доступны данные.Например: Вообще можно такОтображение кнопки, если рейтинг больше единицы 2 Поделиться сообщением Ссылка на сообщение
Strategius 52 10/10/17 09:23 Не всегда и не везде доступны данные.А нельзя сделать, чтобы рейтинг один раз рассчитался и хранился в таблице, и данные будут браться из нее? <if test="(floor($member['posts']/100) + floor($member['pp_reputation_points']/10)) > 1">Отображение кнопки, если рейтинг больше единицы</if>Так конечно можно, но это много где необходимо будет исправлять. Поделиться сообщением Ссылка на сообщение
newbie 1723 10/10/17 11:37 А нельзя сделать, чтобы рейтинг один раз рассчитался и хранился в таблице, и данные будут браться из нее?Так это же переменная величина, которая зависит от постов и репутации.Так конечно можно, но это много где необходимо будет исправлять. Добавьте функцию, например, в класс IPSMember. Поделиться сообщением Ссылка на сообщение
Strategius 52 10/10/17 11:45 (изменено) Так это же переменная величина, которая зависит от постов и репутации.Понял. Да, это слишком сложно получается. Добавьте функцию, например, в класс IPSMember.А как это сделать, не подскажете? Изменено 10 октября 2017 пользователем Strategius Поделиться сообщением Ссылка на сообщение
newbie 1723 10/10/17 11:55 А как это сделать, не подскажете? Открываете admin/sources/base/ipsMember.phpИ добавляете что-то типа public static function rating($member) { if (isset($member['posts']) and isset($member['pp_reputation_points'])) { return (floor($member['posts']/100) + floor($member['pp_reputation_points']/10)); } return 0; }Далее в шаблоне используете<if test="IPSMember::rating($member) > 1">Отображение кнопки, если рейтинг больше единицы</if> 2 Поделиться сообщением Ссылка на сообщение
Strategius 52 10/16/17 09:04 @newbie, а Вы не подскажете, как добавить к Вашему методу из поста #15 дополнительные выборки в виде сортировки по репутации и статьям (компонент установлен). Добавляю эти выборки в выпадающий список (что в расширенных фильтрах поиска), но почему-то работает только выборка по $grating. $this->DB->build( array( 'select' => ' m.member_id',меняю на: $grating = "(FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating"; $reputation = "(FLOOR(pp.pp_reputation_points)) AS reputation"; $articles = "(FLOOR(m.tutorials_articles)) AS articles"; $this->DB->build( array( 'select' => "m.member_id, {$grating}, {$reputation}, {$articles}",А эта строка: if ( $_queryPP )Заменена на: if ( $_queryPP or 1==1 )Но выборка в выпадающем списке работает только по $grating, по репутации и статьям выдает ошибку базы данных. Подозреваю, что из-за обращения к не существующим полям в таблице members, но по рейтингу-то работает... Лог ошибки: mySQL query error: SELECT m.member_id FROM members m LEFT JOIN pfields_content p ON ( p.member_id=m.member_id ) LEFT JOIN profile_portal pp ON ( pp.pp_member_id=m.member_id ) WHERE m.members_l_display_name !='' AND m.members_l_display_name IS NOT NULL AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY articles desc LIMIT 0,20 Поделиться сообщением Ссылка на сообщение
newbie 1723 10/16/17 12:16 Лог ошибки:Тут только запрос. Где сама ошибка? Поделиться сообщением Ссылка на сообщение
Strategius 52 10/16/17 12:23 Тут только запрос. Где сама ошибка? Вот, все что было в файле... Date: Mon, 16 Oct 2017 09:02:38 +0000 Error: 1054 - Unknown column 'articles' in 'order clause' IP Address: /index.php?app=members&module=list ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mySQL query error: SELECT m.member_id FROM members m LEFT JOIN pfields_content p ON ( p.member_id=m.member_id ) LEFT JOIN profile_portal pp ON ( pp.pp_member_id=m.member_id ) WHERE m.members_l_display_name !='' AND m.members_l_display_name IS NOT NULL AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY articles desc LIMIT 0,20 .--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. | File | Function | Line No. | |----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------| | test.ru\admin\sources\base\ipsController.php | [public_members_list_view].doExecute | 306 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------' Поделиться сообщением Ссылка на сообщение
newbie 1723 10/17/17 06:41 Вот ошибкаUnknown column 'articles' in 'order clause'Прикрепите измененный файл, чтобы посмотреть, что Вы там сделали Поделиться сообщением Ссылка на сообщение
Strategius 52 10/17/17 09:19 @newbie, а, понял. Значит, всё-таки в статьях ошибка закопалась?Вот, это тот файл, с которым тестировал: view.php Поделиться сообщением Ссылка на сообщение
newbie 1723 10/17/17 10:11 $this->DB->build( array( 'select' => 'm.member_id' . (($this->sort_key == 'grating') ? ", (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS grating" : ''), ............................................................ 'order' => $this->sort_key . ' ' . $this->sort_order, Обратите внимание на select.Когда сортировка идет по grating, то select выглядит как SELECT m.member_id, (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS gratingВо всех остальных случаях SELECT m.member_idА в order используется $this->sort_key, значение которого при вышеуказанной ошибке равно articles. Естественно данного поля нет. Поделиться сообщением Ссылка на сообщение
Strategius 52 10/17/17 10:25 @newbie, если честно, не понял... Строка $this->DB->build( array( 'select' => 'm.member_id' . (($this->sort_key == 'grating') ? ", (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS grating" : ''),У меня отвечает за кнопку выборки по рейтингу, она работает, а список сортировок, который не работает находится в строке ниже, с ней и проблема... $this->DB->build( array( 'select' => "m.member_id, {$grating}, {$reputation}, {$articles}",Исправил, как Вы написали, но все равно не работает. Поделиться сообщением Ссылка на сообщение