Java-скрипт только для авторизованных

#1 17 августа 2014 в 19:03
Как сделать что бы не которые скрипты работали только для авторизованных пользователей?

К примеру сейчас зайдя гостем в коде страницы можно увидеть следующий код:

  1. <script type="text/javascript">var LANG_CONFIRM_DELETE_POLL = 'Вы уверены что хотите удалить этот опрос?'; var LANG_CONFIRM_DEL_POST = 'Вы уверены что хотите удалить это сообщение?'; var LANG_CONFIRM_DEL_THREAD = 'Вы уверены что хотите удалить эту тему?'; var LANG_MOVE_THREAD = 'Перенести тему'; var LANG_MOVE_POST = 'Перенести сообщение в другую тему'; var LANG_RENAME_THREAD = 'Переименовать тему'; var LANG_CONFIRM_DELETE_FILE = 'Вы уверены что хотите удалить этот файл?'; var LANG_SELECT_NEW_FILE_UPLOAD = 'Выберите новый файл для загрузки'; var LANG_SELECT_TEXT_QUOTE = 'Выделите текст для цитирования!'; var LANG_CBOX_IMAGE = 'Фото'; var LANG_CBOX_FROM = 'из'; var LANG_CBOX_PREVIOUS = 'Предыдущее'; var LANG_CBOX_NEXT = 'Следующее'; var LANG_CBOX_CLOSE = 'Закрыть'; var LANG_CBOX_XHR_ERROR = 'Не удалось загрузить контент.'; var LANG_CBOX_IMG_ERROR = 'Не удалось загрузить фото.'; var LANG_CBOX_SLIDESHOWSTOP = 'Остановить слайдшоу'; var LANG_CBOX_SLIDESHOWSTART = 'Запустить слайдшоу'; var LANG_SEND = 'Отправить'; var LANG_CONTINUE = 'Продолжить'; var LANG_CLOSE = 'Закрыть'; var LANG_SAVE = 'Сохранить'; var LANG_CANCEL = 'Отмена'; var LANG_ATTENTION = 'Внимание'; var LANG_CONFIRM = 'Подтверждение действия'; var LANG_LOADING = 'Загрузка'; var LANG_ERROR = 'Ошибка'; var LANG_ADD = 'Добавить'; var LANG_SELECT_CITY = 'Выберите город'; var LANG_SELECT = 'Выбрать'; </script>
Как сделать что бы это вообще не выводилось если юзер не авторизован?
#2 17 августа 2014 в 19:22
  1. <?php if ($inUser->id){ ?>
  2. скрипт тут <?php } ?>
Это если скрипт подключается в template.php
#3 17 августа 2014 в 20:01

Это если скрипт подключается в template.php

Нил

Спасибо за подсказку. Попробую так сделать.

А если скрипт подключается через модуль/плагин?
#4 17 августа 2014 в 20:36
ну если через модуль то в настройках модуля "кому показывать".
Я имел в виду что иногда скрипты подключают в файлах шаблонов компонентов tpl не для всего сайта там смотря от какого компонента определение пользователь не пользователь может быть несколько разным.

Например если подключать в шаблоне вывода объявления

{if $user_id}код который только для пользователей {/if}
в статьях и других компонентах немного по другому.
#5 17 августа 2014 в 21:16
В моем случае есть код плагина, который проверяет новые сообщения у пользователей, вот его часть которая выводит скрипт в шаблон:

  1.  
  2. $h = "
  3. <script type='text/javascript'>
  4. $(document).ready(function(){
  5. $('div:first').everyTime('{$period}s', function(i) {
  6. $.get('/plugins/p_newmessages/update.php',{},
  7. function(data){
  8. $('.$cl').html(data);
  9.  
  10. });
  11. });
  12. });
  13. </script>
  14. ";
  15.  
И получается что скрипт проверяет новые сообщения у гостей.

Как его "завернуть" что бы это выводилось только авторизованным?


Пробовал сделать весь код плагина внутри
  1.  
  2. <?php if ($inUser->id){ ?>
  3. скрипт тут <?php } ?>
  4.  
Не сработало.
#6 18 августа 2014 в 17:01
Насколько я понимаю это плагин от SJen, помню пользовался тоже когда то, хорошая штука была, пока не было ничего другого, но сейчас такой выбор нормальных (в смысле полностью продуманных и доведенных до ума) месседжеров для инстанта…
у меня с ним помнится тоже при количестве около 500 онлайн сайт ложился так как действительно посылает запросы не только если страница открыта авторизованным пользователем но и гостем.
Ну, я не настолько хорошо разбираюсь в коде, что бы так, без тестов дать исчерпывающий и верный ответ, только методом проб, но как понимаете устраивать эксперименты не очень интересно. Однако наводку дать могу.

Если вы сравните код этого плагина с другими где предполагается определение авторизованного пользователя, то заметите, что в этом плагине отсутствует
  1. $inUser = cmsUser::getInstance();
Попробуйте поставить ее где то здесь

  1.  
  2. public function execute($event, $html){
  3. parent::execute();
  4. $inUser = cmsUser::getInstance();
  5.  
А после уже пробуйте использовать условие "если авторизованный пользователь"

Типа:

  1.  
  2. if(!$inUser->id){ это для авторизованного пользователя }
  3.  
Как то так, думаю…
#7 18 августа 2014 в 18:20
  1. <?php if ($inUser->id > 0) { ?>
  2. скрипт
  3. <?php } ?>
#8 18 августа 2014 в 21:24
Джехутимери, а как этим обернуть код который уже в тэгах php?

Если я сразу вверху кода плагина вставляю php if ($inUser->id > 0) {

То сайт вообще перестает работать пишет, что ошибка в такой-то строчке...

Вот весь код плагина:

  1.  
  2. <?php
  3.  
  4. class p_newmessages extends cmsPlugin {
  5.  
  6. // ==================================================================== //
  7.  
  8. public function __construct(){
  9.  
  10. parent::__construct();
  11.  
  12. // Информация о плагине
  13.  
  14. $this->info['plugin'] = 'p_newmessages';
  15. $this->info['title'] = 'Таймер (новые сообщения)';
  16. $this->info['description'] = 'Таймер для обновления сообщений посетителя в меню пользователя';
  17. $this->info['author'] = 'SJen';
  18. $this->info['version'] = '1.2';
  19.  
  20. // Настройки по-умолчанию
  21. $this->config['Период обновления в секундах'] = 15;
  22. $this->config['Класс объекта, внутри которого лежит поле Сообщения'] = 'my_messages';
  23. // События, которые будут отлавливаться плагином
  24.  
  25. $this->events[] = 'PRINT_PAGE_HEAD';
  26.  
  27.  
  28. }
  29.  
  30. // ==================================================================== //
  31.  
  32. /**
  33.   * Процедура установки плагина
  34.   * @return bool
  35.   */
  36. public function install(){
  37.  
  38. return parent::install();
  39.  
  40. }
  41.  
  42. // ==================================================================== //
  43.  
  44. /**
  45.   * Процедура обновления плагина
  46.   * @return bool
  47.   */
  48. public function upgrade(){
  49.  
  50. return parent::upgrade();
  51.  
  52. }
  53.  
  54. // ==================================================================== //
  55.  
  56. /**
  57.   * Обработка событий
  58.   * @param string $event
  59.   * @param array $user
  60.   * @return html
  61.   */
  62. public function execute($event, $html){
  63. parent::execute();
  64.  
  65. switch ($event){
  66. case 'PRINT_PAGE_HEAD':
  67. $period = $this->config['Период обновления в секундах'];
  68. $cl = $this->config['Класс объекта, внутри которого лежит поле Сообщения'];
  69. $h = "
  70. <script type='text/javascript'>
  71. $(document).ready(function(){
  72. $('div:first').everyTime('{$period}s', function(i) {
  73. $.get('/plugins/p_newmessages/update.php',{},
  74. function(data){
  75. $('.$cl').html(data);
  76.  
  77. });
  78. });
  79. });
  80. </script>
  81. ";
  82.  
  83. $inPage = cmsPage::getInstance();
  84. $inPage->addHeadJS('includes/jquery/jquery.timers.js');
  85. $inPage->addHead($h);
  86. return $inPage->page_head;
  87. break;
  88. }
  89.  
  90. return $html;
  91.  
  92.  
  93. }
  94.  
  95. // ==================================================================== //
  96.  
  97. }
  98.  
  99. ?>
  100.  
  101.  
P.S.: не силен сам в программировании…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.