Всем привет. В данном блоге собираюсь запустить несколько уроков по созданию полезных дополнений для InstantCMS 2. Для этого мы создаем компонент exemple и там будем разрабатывать свои дополнения

Создаем кнопку "Начислять рейтинг"

Всем привет.

В данном блоге собираюсь запустить несколько уроков по созданию полезных дополнений для InstantCMS 2. Для этого мы создаем компонент exemple и там будем разрабатывать свои дополнения.

Первая наша разработка это кнопка Начислять рейтинг в профиле пользователя.

Итак создаем папку exemple в /system/controllers

Внутри папки /system/controllers/exemple создаем папку hooks

Внутри hooks создаем файл user_profile_buttons.php (кодировка UTF-8)

<?php
class onExempleUserProfileButtons extends cmsAction {
    function run($data) {
        $user = cmsUser::getInstance();
        if (!$user->is_admin) {return $data;}
        $data['buttons'][] =
            array('title' =>
                'Начислять рейтинг',
                'class' => 'ajax_modal add',
                'href' => href_to($this->name, 'rating', $data['profile']['id']));
        return $data;
    }
}

Тут в начале определяем класс onExempleUserProfileButtons - более подробно можете узнать в документация инстанта или в видеоуроках.

В строке 3 получаем данные в массиве $data

В строке 4 создаем объект юзера со всеми данными.

Строка 5 проверяем, если юзер не админ но передаем данные без изменения

Далее создаем кнопку Начислять рейтинг с классом add и с url /exemple/rating/{id} и передаем данные дальше.

Теперь нам надо создать файл manifest.php

<?php
    return array(
        'hooks' => array(
            'user_profile_buttons',
        )
    );

В результате в профиле пользователя, появиться кнопка Начислять рейтинг (видит админ)

При нажатии мы попадаем на несуществующую страницу, которую надо создать

Создаем файл \system\controllers\exemple\frontend.php (кодировка UTF-8)

<?php
class exemple extends cmsFrontend {
    public function actionRating($id = FALSE) {
        if(!is_numeric($id) || !$id) cmsCore::error404();
        if($this->cms_user->is_admin) {
            $form = $this->getForm('rating_add');
            $is_submitted = $this->request->get('submit');            
            $errors = false;
            if($is_submitted){
                $rating = $form->parse($this->request, $is_submitted);
                $errors = $form->validate($this, $rating);
                if($errors) {
                    cmsUser::addSessionMessage('Ошибки в форме', 'error');
                } else {
                    $rating_id = $this->model->filterEqual('id', $id)->increment('cms_users', 'rating', $rating['count']);
                    if($rating_id){
                        cmsUser::addSessionMessage('Рейтинг успешно изменен.', 'success');
                    }
                    $this->redirect('/users/'.$id);
                }                
            }
            $this->cms_template->render('rating_add', array(
                'form' => $form,
                'rating' => isset($rating) ? $rating : false,
                'errors' => isset($errors) ? $errors : false
            ));
        }
    }
}

Здесь я не буду объяснять работу Формы (можете прочесть в документации на Офф сайте) я лишь расскажу что делает код когда получает данные из формы.

В строке 15 мы обновляем поле rating в таблице cms_users

$rating_id = $this->model->filterEqual('id', $id)->increment('cms_users', 'rating', $rating['count']);

Если запрос вернул TRUE выводим сообщение "Рейтинг успешно изменен!!!" и перенаправляемся на страницу данного пользователя.

Теперь нам надо создать форму и шаблона для вывода формы.

Создаем файл \system\controllers\exemple\forms\form_rating_add.php

<?php
class formExempleRatingadd extends cmsForm {
    public function init() {
        return array(
            array(
                'type' => 'fieldset',
                'childs' => array(
                    new fieldNumber('count', array(
                        'title' => 'Количество рейтингов',
                        'rules' => array(
                            array('required')
                        )
                    ))
                )  
            )
        );
    }
}

И создаем шаблон для вывода формы

Создаем файл \templates\default\controllers\exemple\rating_add.tpl.php (UTF-8)

<?php
    $this->addBreadcrumb(LANG_USERS, '/users');
    $this->addBreadcrumb('Начислять рейтинг');    
    $this->setPageTitle('Начислять рейтинг');
?>
<h1>Начислять рейтинг</h1>
<?php
$this->renderForm($form, $rating, array(
    'action' => '',
    'method' => 'post',
    'toolbar' => false
), $errors);
?>

Вот и всё, наша форма готова

Скачать готовые файлы можете здесь (Загрузить по FTP)

Нравится
Не нравится
RSS
07:24
Классно, то что давно искал!
Хушруз
15:10
есть возможность автоматический уведомлять пользователь после получеин рейтинга
Хушруз
15:15
и есть ли возможность управлять рейтингом пользователя?
Спасибо вам Парвиз все работает на моем сайте но хочу узнать об управление рейтинг пользователей
15:49
Управление рейтингом, в админке — компоненты- рейтинг
Уведомлении после начислении нет.
15:59
как активировать репутацию для администраторов например у меня как администратор показывает 0
Marat
15:26
Круто спасибо! Очень полезно нужно будет почаще к вам заходить:)
Владимир
13:11
Блин! Никак не работает!
При нажатии на кнопку «Сохранить» (кол. рейтингов):
Fatal error: Uncaught Error: Call to a member function filterEqual() on null in /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/controllers/exemple/frontend.php:15 Stack trace: #0 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/core/controller.php(362): exemple->actionRating('16') #1 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/core/core.php(664): cmsController->runAction('rating', Array) #2 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/index.php(40): cmsCore->runController() #3 {main} thrown in /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/controllers/exemple/frontend.php on line 15
При нажатии «Обновить дату»:
Fatal error: Uncaught Error: Call to a member function update() on null in /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/controllers/exemple/actions/top.php:5 Stack trace: #0 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/core/controller.php(429): actionExempleTop->run('articles', '862') #1 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/core/controller.php(347): cmsController->runExternalAction('top', Array) #2 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/core/core.php(664): cmsController->runAction('top', Array) #3 /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/index.php(40): cmsCore->runController() #4 {main} thrown in /home/users/r/reneplus/domains/xn----ctbbj1acidfjbu3a.xn--p1ai/system/controllers/exemple/actions/top.php on line 5
Загрузка...

Новые комментарии

Без доработки кода не получиться это сделать
АлександрЛента событий 2 дня назад
Добрый день! Не подскажите как сделать Чтоб по умолчанию событие "Постить в стену" было включено т....
Обновите шаблон до 2.7
Здравствуйте! После установки шаблона проблема с биллингом - не выводятся системные сообщения "вам ...
Здравствуйте, на 2.9 еще не тестировал, чуть позже отвечу
Здравствуйте, сейчас при получение подарка, можно выводить в виде стикера на аватарке, на несколько ...
Возможно ли использование компонента, в виде выдачи наград: VIP-пользователь и т.п.? То есть чтобы п...
ИльяМультиязычность для InstanCMS 2.5 6 дней назад
2.9.0 что то не работает, идет прогрузка содержимого, во всех разделах и так ничего и не находит
ЮрийБесплатный шаблон для InstantCMS2 7 дней назад
Спасибо за ответ! Проблема решилась сама собой. Видимо, кэш мешал. Теперь проблема с добавлением фо...
Здравствуйте, не должна пропадать, можно ссылку на сайт?

Кошелек для оплаты

WebMoney: R380642925354 | Z170841179282

Яндекс деньги: 410012099984285

Qiwi: +79269354436

Счет сбербанк: 40817810640001679889

* если после оплаты товар не получили, проверьте папку Спам