Батосай,
Создайте в панели управления в настройках компонента "Профили пользователей" новое поле "Почта" в качестве системного имени укажите любое, потом в базе данных в таблице cms_users_fields исправьте системное имя на email (сразу такое системное имя движок выдать не разрешит) и будет доступен просмотр своего мыла в "Редактировании профиля".
Как это скрывать от других пользователей — придумывайте сами…
Ris
+657
Репутация
3771
Рейтинг
#2
[ЕСТЬ РЕШЕНИЕ] В админке отключил регистрацию. Как теперь войти в админку?
27 ноября 2015 в 00:18
В таблице cms_components у компонента "регистрация" в колонке published единицу поставьте.Чуть поподробней не смогли бы?
В общем разобраться с шаблоном в двойке — перелом мозга.
Сделал вот так:
widget.tpl.php
rating.js
vote.php
Я ж не кодер, я инженегр. Человек, который решает технические проблемы.
Понадобился группе людей сайт, перебрал кучу CMS, остановился на инстанте. Пятый год сайт работает.
Понадобилось уведомление в личку — потыркался, сделал.
А изучить теорию всё никак руки не доходят...
Нет, вроде не работает. Не проверял.
Но можно сделать выбор из "на почту и на сайте" и "не уведомлять"
'options' => array('both', '')
Зомбирование пользователя при мелькании страниц на экране монитора.
Сделал вот так:
widget.tpl.php
<?php $is_first_widget = $this->addJS('templates/default/js/rating.js'); ?> <div class="rating_widget" id="rating-<?php echo $target_subject; ?>-<?php echo $target_id; ?>" <?php if ($is_enabled || $options['is_show']){ ?> data-target-controller="<?php echo $target_controller; ?>" data-target-subject="<?php echo $target_subject; ?>" data-target-id="<?php echo $target_id; ?>" <?php if ($options['is_show']){ ?> data-info-url="<?php echo $this->href_to('info'); ?>" <?php } ?> <?php } ?> > <?php if ($target_subject == 'anec'){ ?> <div class="arrow up"> <?php if ($is_enabled){ ?> <b><a href="#vote-up" class="vote-up5" style = "color:green"; title="<?php echo LANG_RATING_VOTE_UP; ?>">+5</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+5</span> <?php } ?> </div> <div class="arrow up"> <?php if ($is_enabled){ ?> <b><a href="#vote-up" class="vote-up3" style = "color:green"; title="<?php echo LANG_RATING_VOTE_UP; ?>">+3</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+3</span> <?php } ?> </div> <?php } ?> <div class="arrow up"> <?php if ($is_enabled){ ?> <b><a href="#vote-up" class="vote-up1" style = "color:green"; title="<?php echo LANG_RATING_VOTE_UP; ?>">+1</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+1</span> <?php } ?> </div> <div class="score" title="<?php echo LANG_RATING; ?>"> <?php if ($options['is_hidden'] && !$is_voted && ($is_enabled || $is_guest)){ ?> <span>—</span> <?php } else { ?> <span class="<?php echo html_signed_class($current_rating); ?><?php if ($options['is_show']) { ?> clickable<?php } ?>"> <?php echo html_signed_num($current_rating); ?> </span> <?php } ?> </div> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <b> <a href="#vote-down" class="vote-down1" style = "color:red"; title="<?php echo LANG_RATING_VOTE_DOWN; ?>">-1</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-1</span> <?php } ?> </div> <?php if ($target_subject == 'anec'){ ?> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <b><a href="#vote-down" class="vote-down3" style = "color:red"; title="<?php echo LANG_RATING_VOTE_DOWN; ?>">-3</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-3</span> <?php } ?> </div> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <b><a href="#vote-down" class="vote-down5" style = "color:red"; title="<?php echo LANG_RATING_VOTE_DOWN; ?>">-5</a></b> <?php } else { ?> <span class="disabled" style = "color:silver"; title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-5</span> <?php } ?> </div> <?php } ?> </div>
this.onDocumentReady = function(){ var widget = $(this); var controller = widget.data('target-controller'); var subject = widget.data('target-subject'); var id = widget.data('target-id'); $('a.vote-up1', widget).click(function(){var points =1; icms.rating.vote('up', controller, subject, id, points); }); $('a.vote-down1', widget).click(function(){var points =1; icms.rating.vote('down', controller, subject, id, points); }); $('a.vote-up3', widget).click(function(){var points =3; icms.rating.vote('up', controller, subject, id, points); }); $('a.vote-down3', widget).click(function(){var points =3; icms.rating.vote('down', controller, subject, id, points); }); $('a.vote-up5', widget).click(function(){var points =5; icms.rating.vote('up', controller, subject, id, points); }); $('a.vote-down5', widget).click(function(){var points =5; icms.rating.vote('down', controller, subject, id, points); }); $('.score span.clickable', widget).on("click", function(){ var url = widget.data('info-url'); icms.modal.openAjax(url, { controller: controller, subject: subject, id: id }); }); }); } //====================================================================// this.vote = function(direction, controller, subject, id, points){ var widget_id = 'rating-' + subject + '-' + id; var widget = $('#'+widget_id); $('.arrow', widget).html('<span class="disabled"></span>'); $('.score', widget).html('<div class="loading-icon"></div>'); $.post(this.options.url, { direction: direction, controller: controller, subject: subject, id: id, points: points }, function(result){ if (!result.success){ $('.score', widget).html('<span class="zero">—</span>'); return; } $('.score', widget).html('<span class="'+result.css_class+'">'+result.rating+'</span>'); $('.disabled', widget).attr('title', result.message); }, "json"); }
vote.php
class actionRatingVote extends cmsAction{ public
Виктор,
Идея отличная! Я что-то и внимания не обратил на эту функцию.
Спасибо, Виктор!
Но увы… почему-то не заработало. Буду искать…
Идея отличная! Я что-то и внимания не обратил на эту функцию.
Спасибо, Виктор!
Но увы… почему-то не заработало. Буду искать…
Val,
Но значение остальных 4 переменных передаются из rating.js в vote.php без проблем.
Вписываю пятую переменную — она не передается.
Вот же функция .click(function(){ icms.rating.vote('up', controller, subject, id, points); });
Вот первые четыре переменные отлично передаются, а points — нет. Почему такое может быть?
Потом разберусь с методом post.
Пока задача стоит явно объявленную переменную var points = 5; отправить в php скрипт vote.php.
Или нельзя прямо в яваскрипте задать значение переменной?
Но значение остальных 4 переменных передаются из rating.js в vote.php без проблем.
Вписываю пятую переменную — она не передается.
Вот же функция .click(function(){ icms.rating.vote('up', controller, subject, id, points); });
Вот первые четыре переменные отлично передаются, а points — нет. Почему такое может быть?
Потом разберусь с методом post.
Пока задача стоит явно объявленную переменную var points = 5; отправить в php скрипт vote.php.
Или нельзя прямо в яваскрипте задать значение переменной?
Потребовалось для одного из типов контента несколько расширить функцию рейтинга. Вместо "нравится-не нравится" нужно сделать голосование по шестибалльной системе. +5 +3 +1 -1 -3 -5
Как сделать шесть кнопок, вроде разобрался.
Как это всё украсить — потом разберусь. Пока не работает сам функционал.
Но теперь не знаю, как передать из \templates\tseso\js\rating.js значение балла рейтинга в \system\controllers\rating\actions\vote.php
Даже если просто объявить переменную в js файле
Все равно vote.php это значение не подхватывает и даже если отменить проверку на is_numeric($points) — все равно в базу пишется NULL
Кто из понимающих людей поможет разобраться?
Заранее признателен.
Как сделать шесть кнопок, вроде разобрался.
<?php if ($target_subject == 'anec'){ ?> <div class="arrow up"> <?php if ($is_enabled){ ?> <a href="#vote-up" class="vote-up" title="<?php echo LANG_RATING_VOTE_UP; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+5</span> <?php } ?> </div> <div class="arrow up"> <?php if ($is_enabled){ ?> <a href="#vote-up" class="vote-up" title="<?php echo LANG_RATING_VOTE_UP; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+3</span> <?php } ?> <?php } ?> </div> <div class="arrow up"> <?php if ($is_enabled){ ?> <a href="#vote-up" class="vote-up" title="<?php echo LANG_RATING_VOTE_UP; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">+1</span> <?php } ?> </div> <div class="score" title="<?php echo LANG_RATING; ?>"> <?php if ($options['is_hidden'] && !$is_voted && ($is_enabled || $is_guest)){ ?> <span>—</span> <?php } else { ?> <span class="<?php echo html_signed_class($current_rating); ?><?php if ($options['is_show']) { ?> clickable<?php } ?>"> <?php echo html_signed_num($current_rating); ?> </span> <?php } ?> </div> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <a href="#vote-down" class="vote-down" title="<?php echo LANG_RATING_VOTE_DOWN; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-1</span> <?php } ?> </div> <?php if ($target_subject == 'anec'){ ?> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <a href="#vote-down" class="vote-down" title="<?php echo LANG_RATING_VOTE_DOWN; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-3</span> <?php } ?> </div> <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>"> <?php if ($is_enabled){ ?> <a href="#vote-down" class="vote-down" title="<?php echo LANG_RATING_VOTE_DOWN; ?>"></a> <?php } else { ?> <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>">-5</span> <?php } ?> </div> <?php } ?>
Но теперь не знаю, как передать из \templates\tseso\js\rating.js значение балла рейтинга в \system\controllers\rating\actions\vote.php
Даже если просто объявить переменную в js файле
this.onDocumentReady = function(){ var widget = $(this); var controller = widget.data('target-controller'); var subject = widget.data('target-subject'); var id = widget.data('target-id'); var points = 5; $('a.vote-up', widget).click(function(){ icms.rating.vote('up', controller, subject, id, points); }); $('a.vote-down', widget).click(function(){ icms.rating.vote('down', controller, subject, id, points); });
public function run(){ if (!$this->request->isAjax()){ cmsCore::error404(); } // Получаем параметры $direction = $this->request->get('direction'); $target_controller = $this->request->get('controller'); $target_subject = $this->request->get('subject'); $target_id = $this->request->get('id'); $points = $this->request->get('points'); $template = cmsTemplate::getInstance(); $is_valid = ($this->validate_sysname($target_controller)===true) && ($this->validate_sysname($target_subject)===true) && $user = cmsUser::getInstance(); // Объединяем всю информацию о голосе 'user_id' => $user->id, 'target_controller' => $target_controller, 'target_subject' => $target_subject, 'target_id' => $target_id, 'score' => $direction=='up' ? $points : -$points );
Заранее признателен.
И если не трудно зарегайтесь у нас, нам необходимо собрать команду кодеров,
Я ж не кодер, я инженегр. Человек, который решает технические проблемы.
Понадобился группе людей сайт, перебрал кучу CMS, остановился на инстанте. Пятый год сайт работает.
Понадобилось уведомление в личку — потыркался, сделал.
А изучить теорию всё никак руки не доходят...
Ещё вопрос, а если выберут уведомлять на сайте, только на сайте будут уведомляться?
Нет, вроде не работает. Не проверял.
Но можно сделать выбор из "на почту и на сайте" и "не уведомлять"
'options' => array('both', '')
Что может быть плохого?
Зомбирование пользователя при мелькании страниц на экране монитора.
Вот в этом файлике уж сильно интересно наверчено:
\core\cms.php
Аж прямо Замена числового обозначения месяца на словесное (склоненное в падеже) 
Попробуйте там настроить отображение даты.
Закомментировал эту замену на слова и стало так:
было
\core\cms.php
static function dateFormat($date, $is_full_m = true, $is_time=false, $is_now_time = true){ if((int)$date == 0){ return ''; } $inConf = cmsConfig::getInstance(); global $_LANG; // формируем входную $date с учетом смещения // сегодняшняя дата // вчерашняя дата // получаем значение даты и времени switch( $day ) { // Если дата совпадает с сегодняшней case $today: $result = $_LANG['TODAY']; if ($is_now_time && $time) { $result .= ' '.$_LANG['IN'].' '.$h.':'.$m; } break; //Если дата совпадает со вчерашней case $yesterday: $result = $_LANG['YESTERDAY']; if ($is_now_time && $time) { $result .= ' '.$_LANG['IN'].' '.$h.':'.$m; } break; default: { // Разделяем отображение даты на составляющие // Замена числового обозначения месяца на словесное (склоненное в падеже) if ($is_full_m){ $m = $_LANG['MONTH_'.$m]; }else{ $m = $_LANG['MONTH_'.$m.'_SHORT']; } // Замена чисел 01 02 на 1 2 // Формирование окончательного результата $result = $d.' '.$m.' '.$y; if( $is_time && $time) { // Получаем отдельные составляющие времени // Секунды нас не интересуют $result .= ' '.$_LANG['IN'].' '.$h.':'.$m; } } } return $result; } /** * Возвращает день недели по дате * @param string $date * @return string */

Попробуйте там настроить отображение даты.
Закомментировал эту замену на слова и стало так:
было
стало
В админке наверное
В общем сделал как просили. В профиле надо выставить "по емейл и на сайте".
Уведомления в личку отправляются вне зависимости на сайте юзер или нет. Если юзера нет на сайте — дублируется на почту.
Готовые файлы во вложении. Распаковать в корень сайта.
Если кто хочет, чтобы в офлайне уведомления в личку не отправлялись, тогда саму отправку переделайте так:
instantcms.ru/users/files/download5574.html
Уведомления в личку отправляются вне зависимости на сайте юзер или нет. Если юзера нет на сайте — дублируется на почту.
public function notifyParent($comment, $parent_comment){ if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; } $messenger = cmsCore::getController('messages'); $is_guest_parent = !$parent_comment['user_id'] && $parent_comment['author_email']; $is_guest_comment = !$comment['user_id']; $page_url = href_to_abs($comment['target_url']) . "#comment_{$comment['id']}"; $page_url_pm = href_to($comment['target_url']) . "#comment_{$comment['id']}"; /*Сообщение для отправки в личку*/ 'is_closeable' => true), 'title' => LANG_SHOW, 'href' => href_to( $page_url_pm ) ),)); /*Сообщение для отправки на почту*/ 'page_url' => $page_url, 'page_title' => $comment['target_title'], 'author_url' => $is_guest_comment ? $page_url : href_to_abs('users', $comment['user_id']), 'author_nickname' => $is_guest_comment ? $comment['author_name'] : $comment['user_nickname'], 'comment' => $comment['content'], 'original' => $parent_comment['content'], ); /*Отправляем сообщение об ответе*/ if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $parent_user = $parent_comment['user']; $messenger->sendNoticePM($notice,'comments_reply'); /*Если пользователь не в онлайне - отправляем ему на почту*/ if (!$parent_user['is_online']) { $messenger->sendNoticeEmail('comments_reply', $letter_data);} } if ($is_guest_parent){ $letter_data['nickname'] = $parent_comment['author_name']; $messenger->sendEmail($to, $letter, $letter_data); } }
Если кто хочет, чтобы в офлайне уведомления в личку не отправлялись, тогда саму отправку переделайте так:
/*Отправляем сообщение об ответе*/ if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $parent_user = $parent_comment['user']; /*Если пользователь не в онлайне - отправляем ему на почту*/ if (!$parent_user['is_online']) { $messenger->sendNoticeEmail('comments_reply', $letter_data);} /*Если в онлайне - в личку*/ else { $messenger->sendNoticePM($notice,'comments_reply');} }
Тогда уж делать не "полноценный хак", а полноценное дополнение, которое можно переустановить при обновлении системы.
В первой ветке можно было сделать плагин. А как это должно по идее выглядеть во второй ветке? Кто знает?
Компонент "Уведомления" писать что ли?
В первой ветке можно было сделать плагин. А как это должно по идее выглядеть во второй ветке? Кто знает?
Компонент "Уведомления" писать что ли?
Колян,
Можно вот так сделать
Но тогда уведомления летят и в личку и на почту вне зависимости от настроек профиля.
Надо дальше разбираться…
Можно вот так сделать
public function notifyParent($comment, $parent_comment){ if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; } $messenger = cmsCore::getController('messages'); $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}"; $page_url_mail = href_to_abs($comment['target_url']) . "#comment_{$comment['id']}"; 'title' => LANG_SHOW, 'href' => href_to( $page_url ) ),)); if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $messenger->sendNoticePM($notice,'comments_reply'); } if ($is_guest_parent){ $letter_data['nickname'] = $parent_comment['author_name']; $messenger->sendEmail($to, $letter, $notice); } 'page_url' => $page_url_mail, 'page_title' => $comment['target_title'], 'author_url' => $is_guest_comment ? $page_url : href_to_abs('users', $comment['user_id']), 'author_nickname' => $is_guest_comment ? $comment['author_name'] : $comment['user_nickname'], 'comment' => $comment['content'], 'original' => $parent_comment['content'], ); if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $messenger->sendNoticeEmail('comments_reply', $letter_data); } if ($is_guest_parent){ $letter_data['nickname'] = $parent_comment['author_name']; $messenger->sendEmail($to, $letter, $letter_data); } }
Надо дальше разбираться…
Колян,
Прекрасно понимаю Ваши чаяния. Но ко мне — ехать. Шашечки — к разработчикам.
Я ж писал еще в марте месяце:
Прекрасно понимаю Ваши чаяния. Но ко мне — ехать. Шашечки — к разработчикам.
Я ж писал еще в марте месяце:
В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной,
Колян,
Из какого компонента первое уведомление?
К разработчикам.
Из какого компонента первое уведомление?
Так интересно а к кому с феншуем обратиться...
К разработчикам.