Инструменты пользователя

Инструменты сайта


rowset-definition

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
rowset-definition [2026/02/25 20:13] – [Раздел autoexec] madminrowset-definition [2026/04/27 17:35] (текущий) – [Описание полей источника данных] madmin
Строка 58: Строка 58:
     url="<url соединения, для mode=polling или socket>"     url="<url соединения, для mode=polling или socket>"
     ignoreerror="0|1"     ignoreerror="0|1"
 +    pingtimeout="<периодичность отправки ping запросов для проверки соединения socket, в секундах>"
   >   >
     <param name="<имя параметра>" value="<значение параметра>"/>     <param name="<имя параметра>" value="<значение параметра>"/>
Строка 123: Строка 124:
         (name|field)="<имя поля>"         (name|field)="<имя поля>"
         enabled="0|1"         enabled="0|1"
-        type="string|password|memo|date|num|check|ref|list|radio|icons|multilist|multicheck|multitree|html"+        type="string|password|memo|date|datetime|num|check|ref|list|radio|icons|multilist|multicheck|multitree|html"
         list="code=value;item1;item2;item3;...;itemN"         list="code=value;item1;item2;item3;...;itemN"
         listfield="<имя поля со списком допустимых значений id=value;id=value>"         listfield="<имя поля со списком допустимых значений id=value;id=value>"
Строка 146: Строка 147:
         dec="<кол-во знаков после запятой>"         dec="<кол-во знаков после запятой>"
         hidezero="0|1"         hidezero="0|1"
 +        numsep="0|1"
         stretch="0|1"         stretch="0|1"
         refid="<имя поля справочника>"         refid="<имя поля справочника>"
Строка 246: Строка 248:
   * **num** – число в LSS формате   * **num** – число в LSS формате
   * **date** – дата в LSS формате   * **date** – дата в LSS формате
 +  * **datetime** – дата и время в LSS формате. Если параметр dec=0 или не задан, то с точностью до минут. Если dec=1, то с точностью до секунд. Если dec=2, то с точностью до милисекунд.
   * **check** – логическое значение в LSS формате   * **check** – логическое значение в LSS формате
  
Строка 264: Строка 267:
  
 Атрибут **save**="1" - принудительное сохранение строки при изменении поля Атрибут **save**="1" - принудительное сохранение строки при изменении поля
 +=== Особенности поля memo === 
 +  * **rows** - высота экранного элемента в строках, по умолчанию 3 
 +  * **maxrows** - ??? 
 +  * **enter** = 0|1 - обработка клавиши Enter как перенос строки, иначе переход на следующее поле. Shift+Enter - всегда отрабатывает как перенос строки 
 +=== Особенности поля num === 
 +  * **len** - общее кол-во знаков 
 +  * **dec** - кол-во знаков после запятой 
 +  * **hidezero** = 0|1 - нулевые значения отображать как пробел (пусто) 
 +  * **numsep** = 0|1 - отображать с разделителем между тысячами (тройками цифр) для наглядности 
 +=== Особенности поля datetime === 
 +  * **dec** - точность хранения времени 
 +    * 0: часы:минуты 
 +    * 1: часы:минуты:секунды 
 +    * 2: часы:минуты:секунды.мс
 ==== Раздел autoexec ==== ==== Раздел autoexec ====
 Этот раздел позволяет периодически вызывать указанный в разделе запрос  Этот раздел позволяет периодически вызывать указанный в разделе запрос 
Строка 372: Строка 388:
   * При возникновении события надо послать клиенту 1 и остановить выполнение PHP скрипта   * При возникновении события надо послать клиенту 1 и остановить выполнение PHP скрипта
   * При превышении времени необходимо остановить работу PHP скрипта, ничего не отправляя клиенту   * При превышении времени необходимо остановить работу PHP скрипта, ничего не отправляя клиенту
 +
 +=== mode=socket ===
 +В этом режиме запрос вызывается по указанию сервера, через WebSocket.
 +Для реализации такого способа необходим сервер, поддерживающий socket соединение, технологии PHP+Apache недостаточно. Например, на PHP такой сервер можно написать на Ratchet, но это будет отдельный сервис, работающий независимо от Apache.
 +
 +<code>
 +  <autoexec
 +    enabled="1|0"
 +    request="<имя запроса>"
 +    mode="socket"
 +    url="<url socket соединения>"
 +    pingtimeout="<периодичность отправки ping запросов для проверки соединения, в секундах>"
 +    ignoreerror="0|1"
 +  >
 +    <param name="<имя параметра>" value="<значение параметра>"/>
 +    ...
 +    <param name="<имя параметра>" value="<значение параметра>"/>
 +  </autoexec>
 +</code>
 +  * url - адрес socket соединения
 +  * pingtimeout - если параметр задан, то клиент будет периодически посылать сообщение ping серверу, для проверки соединения
 +  * параметры param - добавляются в url polling запроса
 +
 +Пример реализации WebSocket сервера на Ratchet
 +<code>
 +<?php
 +require_once('.lss-init.php');
 +$path=pathRootConcat(
 + getCfg('path.root.extlib'),
 + 'Ratchet',
 + 'autoload.php'
 +);
 +require_once($path);
 +
 +use Ratchet\MessageComponentInterface;
 +use Ratchet\ConnectionInterface;
 +use Ratchet\Http\HttpServer;
 +use Ratchet\WebSocket\WsServer;
 +use Ratchet\Server\IoServer;
 +use React\EventLoop\Factory;
 +
 +class MyServer implements MessageComponentInterface {
 +    protected $clients;
 +
 +    public function __construct() {
 + $this->clients = new \SplObjectStorage;
 +    }
 +
 +    public function onOpen(ConnectionInterface $conn) {
 + $queryString = $conn->httpRequest->getUri()->getQuery();
 + parse_str($queryString, $info);
 + $conn->info=$info;
 + $this->clients->attach($conn);
 + echo '- open'."\n";
 +    }
 +
 +    public function onClose(ConnectionInterface $conn) {
 + $this->clients->detach($conn);
 + echo '- close'."\n";
 +    }
 +
 +    public function onMessage(ConnectionInterface $from, $msg) {
 + if ($msg=='ping') {
 + $from->send('pong');
 + echo '- ping - pong'."\n";
 + }
 + }
 +
 +    public function onError(ConnectionInterface $conn, \Exception $e) {
 + $conn->close();
 + echo '- error'."\n";
 +    }
 +
 +    public function broadcast($msg) {
 + echo '- отправка сообщений всем пользователям'."\n";
 + foreach ($this->clients as $client) {
 + $client->send($msg);
 + }
 +    }
 +}
 +
 +$loop = Factory::create();
 +$serverComponent = new MyServer();
 +
 +$loop->addPeriodicTimer(5, function() use ($serverComponent) {
 +    $serverComponent->broadcast('1');
 +});
 +
 +$webSock = new React\Socket\Server('0.0.0.0:8080', $loop);
 +
 +$server = new Ratchet\Server\IoServer(
 +    new HttpServer(
 +        new WsServer($serverComponent)
 +    ),
 +    $webSock,
 +    $loop
 +);
 +
 +echo "\n".'WebSocket запущен'."\n";
 +$loop->run();
 +</code>
rowset-definition.1772039597.txt.gz · Последнее изменение: 2026/02/25 20:13 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki