Николай

Николай

С нами с 06 марта 2013; Место в рейтинге пользователей: #93
Николай
25 июня 2019, 15:12
0
Пока печатал сообщение, смог наконец подружить JS и сокет сервер:

const socket = io('http://site.ru/ws/', {
  path: '/api'
});
Прошу помочь с пунктом 2:

2. На стороне сокет-сервера, где вы подключаете MODX-API, вам надо поймать куку PHPSESSID и скормить в инициализацию $modx. Так же убедитесь, что у вас эта кука там в наличии, а главное, инициализация $modx идет с контекстом, в котором пользователь авторизован.
Как это скормить MODX? Апи я подключил

$io->on('connection', function($socket)use($io){

		require_once '../../config.core.php';
		define('MODX_API_MODE', true);
		require_once MODX_CORE_PATH.'model/modx/modx.class.php';

		$modx = new modX();
		$modx->initialize('web');
		$modx->getService('error','error.modError', '', '');

		echo $modx->user->get('id');
		
		unset($modx);
В консоле 0, хотя на сайте я авторизован…
Николай
25 июня 2019, 15:05
0
Добрый день. В прошлый раз я забросил эту идею, не получилось. Сейчас для себя я решил все же добиться нормальной работы.

К чему я смог прийти:
Если я делаю соединение напрямую, var socket = io(«site.ru:2027»); — соединение устанавливается, без кукисов.
Если я пробую var socket = io("/api"'); — соединение не устанавливается, но кукисы отправляются.
Само проксирование вроде настроено нормально. Если перейти в браузере по site.ru/api/ — Мне сокет сервер говорит {«code»:0,«message»:«Transport unknown»}.

Но из JS он никак не хочет устанавливать соединение… Подозреваю из JS нужно не просто var socket = io('/api/'), а как то по другому. У меня происходит бесконечный коннект на Request URL: site.ru/socket.io/?EIO=3&transport=polling&t=MkEWHBy
Николай
28 апреля 2019, 09:44
0
Илья, к вам тот же вопрос, что я ниже задал Николаю. Возможно ли?
Николай
28 апреля 2019, 09:43
0
А можно ли расширить дополнительной таблицей в бд?
Управление из manager данными не нужно, актуально управление только из сниппетов.
Почему отдельная таблица? В MODx и так несколько десятков полей, и у меня еще столько же будет. Табличка будет огромная…

Утопический пример. Мы когда создаем\редактируем ресурс, можем на лету добавлять данные из TV полей:

$page = $modx->getObject('modResource', 1);
$page->set('tv1', "tv_value1");
$page->save();
В этом случае обновятся данные из таблицы modx_site_content и добавится связная запись TV в базу в другую табличку.
Николай
27 апреля 2019, 18:37
0
Подскажи пожалуйста как. Я пробовал — не получается. Даже заметку на днях написал: modx.pro/help/18126
Николай
24 апреля 2019, 10:48
0
Спасибо! Даже и не представлял что такое возможно. Пойду учиться работать с этим.
Николай
24 апреля 2019, 06:43
0
Я пытался, но так и не смог. Оставил эту затею, сделал по другому…
Николай
19 апреля 2019, 10:50
0
Используй парсер pdoTools.

[[#6.some_tv:is=`1`:then=`что-то, например display: none`]]
И вставляй это все в шаблон сайта.
Николай
18 апреля 2019, 14:52
0
Спасибо, то что доктор прописал.
Николай
18 апреля 2019, 14:27
0
Это если известен текущий пароль. А я его не знаю.
Николай
24 марта 2019, 14:20
0
Поделитесь пожалуйста полным конфигом ngnix. У меня видимо там что-то не то совсем. Проксирование вроде бы работает, site.ru/api/ работает, но жс бесконечно подключается, подключается, подключается…
Николай
24 марта 2019, 13:39
0
На том же 80 порту сокет сервер не поднимается (что логично, порт занят веб сервером)
Николай
24 марта 2019, 13:33
0
На JS с этим конфигом подключаться так?

<script>
      var socket = io(`/api/`);
Если в ngnix добавляю дерективу что вы выше скинули (порт только там меняю на 2025, на котором крутится вебсокет) то получаю бесконечные аякс запросы:

Николай
24 марта 2019, 12:45
0
Кажется я промахнулся, и вместо ответить вам, просто отписал в комментарий
Николай
24 марта 2019, 12:44
0
Вот я как раз в сторону кукисов смотрел, но нагуглить что-то не получилось. Да, кукисы не передаются:



Как их передать, и как скормить ее modx? В самом server.php я просто подключаю modx:
require_once '../../config.core.php';
      require_once MODX_CORE_PATH.'model/modx/modx.class.php';
      $modx = new modX();
      $modx->initialize('web');
      $modx->getService('error','error.modError', '', '');
Николай
26 февраля 2019, 08:09
0
Либо

$output = $pdo->getChunk('tpl.1cUnloading.email', ["elem" => $logArray]);
$maxIterations= (integer) $modx->getOption('parser_max_iterations', null, 10);
$modx->getParser()->processElementTags('', $output, false, false, '[[', ']]', array(), $maxIterations);
$modx->getParser()->processElementTags('', $output, true, true, '[[', ']]', array(), $maxIterations);
Хотя если pdoTools исполняет сниппеты, то ваш метод будет «красивее».
Николай
26 февраля 2019, 07:33
0
Не совсем понял, но полагаю вам нужны фильтры isnot или ne

<a href ="[[+url]]">[[+tag:isnot=`{`:then=`[[+tag]]`]] </a> ([[+count]])
<a href ="[[+url]]">[[+tag:ne=`{`:then=`[[+tag]]`]] </a> ([[+count]])
Подробно можно почитать например Тут
Николай
19 февраля 2019, 12:42
0
Единственный вроде бы удовлетворяющий ответ не подойдет. Я искал. Плагин проверяет проверяет ид пользователя и его авторизацию. Т.е если ид 10 и пользователь авторизован — выходим. Вроде бы то, но, При повторном входе пользователя опять выкинет. Тут речь идет о ситуации когда связкой логин\пароль воспользовался пользователь на одном пк, а потом на другом. На первом авторизацию нужно сбросить, а на втором пользователь дальше может беспрепятственно пользоваться.

Грубо говоря, я могу сделать так, что вас (и только вас) сейчас выкинет с modx.pro? Разумеется вы запросто можете еще раз авторизоваться по своей связке логин \ пароль.
Николай
06 февраля 2019, 07:36
0
Для внутренних обьектов modx, компонентов. А если у меня не компоненты, а свои таблицы в базе, мне к ним не достучаться же?
Николай
13 декабря 2018, 10:30
0
Спасибо! То что доктор прописал :)