Всего 123 794 комментария

Vladimir
11 февраля 2023, 18:33
+1
Спасибо огромное, и за статью, получилось, и потом получилось ещё и в крон поставить, вообще спасибо большое, прям открыл для себя 2а новых инструмента, сразу столько идей)
Руслан
11 февраля 2023, 01:34
0
Как будто не срабатывает этот код.
<?php
return str_replace(array("\r\n", "\r", "\n"), "", $input);
Вставил сниппетом поверх
<div id="pdopage">
Станислав
10 февраля 2023, 22:09
0
Переустановил — к сожалению, ничего не изменилось. В ошибках ничего нет. Может быть htaccess файлы? Изначально с ними были проблемы
Руслан
10 февраля 2023, 21:17
0
Ваш вариант рабочий. Только вместо всех найденных 44 товаров приходит только 9. Интересно почему?
Предварительно фильтрую по pagetitle
[[!SimpleSearch?
    &containerTpl=`search_simple`
    &tpl=`search_id`
    &docFields=`pagetitle`
]]
Артур Шевченко
10 февраля 2023, 20:18
1
+2
Как-то у тебя всё сложно.
Вот так добавить в очередь
$registry = $modx->getService('registry', 'registry.modRegistry');
$QM = $registry->getRegister('sendToPlatforms', 'registry.modDbRegister');
$branch = '/default/';
$QM->subscribe($branch);
$QM->send($branch, $data); // $data может быть стройкой или массивом.
А вот так прочитать
$registry = $modx->getService('registry', 'registry.modRegistry');
$QM = $registry->getRegister('sendToPlatforms', 'registry.modDbRegister');
$branch = '/default/';
$QM->subscribe($this->branch);
$items = $QM->read([
            'poll_limit' => 1,
            'msg_limit' => 1000,
            'include_keys' => true,
            'remove_read' => true
        ]);
А ещё про очереди в modx хорош написано тут.
Vladimir
10 февраля 2023, 20:05
0
Убрал фигурные скобки возле переменной
$instance
и всё равно. Так же убрал проверку на server__addr в хуке регистрации, всё так же не работает.
<?php

/* читать экземпляры и записывать сообщения для очистки кэша в каждый каталог команд */
if ($modx->getService('registry', 'registry.modRegistry')) {
    $modx->registry->addRegister('wpnotifier', 'registry.modDbRegister', array('directory' => 'wpnotifier'));
    $modx->registry->wpnotifier->connect();
    $modx->registry->wpnotifier->subscribe('/distrib/instances/');
    $instances = $modx->registry->wpnotifier->read(array('poll_limit' => 1, 'msg_limit' => 25, 'remove_read' => false));
    if (!empty($instances)) {
        foreach ($instances as $instance) {
            $modx->log(1, 'после нет');
            $modx->registry->wpnotifier->subscribe("/distrib/commands/$instance/");
            $modx->registry->wpnotifier->send("/distrib/commands/$instance/", 'notify_simple_2_field_form', array('expires' => time() + 1440));
        }
    }
}
Vladimir
10 февраля 2023, 19:54
0
Пытался так
Плагин на событие «OnWebPageComplete »
<?php

/* найти любые удаленные команды для выполнения из главного экземпляра */
$instance = $_SERVER['SERVER_ADDR'];
if (!empty($instance) && $modx->getService('registry', 'registry.modRegistry')) {
    $modx->registry->addRegister('wpnotifier', 'registry.modDbRegister', array('directory' => 'wpnotifier'));
    $modx->registry->wpnotifier->connect();

    /* зарегистрировать этот экземпляр */
    $modx->registry->wpnotifier->subscribe("/distrib/instances/");
    $modx->registry->wpnotifier->send("/distrib/instances/", array($instance => true), array('expires' => time() + 1440));

    /* найдите любые действительные командные сообщения для этого экземпляра и действуйте на них */
    $modx->registry->wpnotifier->subscribe("/distrib/commands/{$instance}/");
    $commands = $modx->registry->wpnotifier->read(array('poll_limit' => 1, 'msg_limit' => 1));
    if (!empty($commands)) {
        $command = reset($commands);
        if (!empty($command)) {
             switch ($command) {
                 case 'notify_simple_2_field_form':
                    
                    $modx->log(1, 'Сообщение');
                    $results = $modx->runSnippet('whatsappNotifier', array(
                            'fullName' => 'TEST', 
                            'phoneNumber' => '+987987987987987',
                            'pageName' => 'Главная',
                            'pageUrl' => 'example.com/'
                            
                        )
                    );
                    break;
                 default:
                    break;
             }
        }
    }
}
А так же регистрирую через хук в формите этот сниппет
<?php

/* читать экземпляры и записывать сообщения для очистки кэша в каждый каталог команд */
if ($modx->getService('registry', 'registry.modRegistry')) {
    $modx->registry->addRegister('wpnotifier', 'registry.modDbRegister', array('directory' => 'wpnotifier'));
    $modx->registry->wpnotifier->connect();
    $modx->registry->wpnotifier->subscribe('/distrib/instances/');
    $instances = $modx->registry->wpnotifier->read(array('poll_limit' => 1, 'msg_limit' => 25, 'remove_read' => false));
    if (!empty($instances)) {
        foreach ($instances as $instance) {
            if ($instance == $_SERVER['SERVER_ADDR']) continue;
            $modx->registry->wpnotifier->subscribe("/distrib/commands/{$instance}/");
            $modx->registry->wpnotifier->send("/distrib/commands/{$instance}/", 'notify_simple_2_field_form', array('expires' => time() + 1440));
        }
    }
}
В баззе данных в 2х таблицах появляются записи
modx_register_queues и modx_register_topics

1)modx_register_queues
поле «name» такое «wpnotifier»
поле «options» такое «a:1:{s:9:»directory";s:10:«wpnotifier»;}"

2)modx_register_topics
поле «name» такое "/distrib/instances/"

Как я понялчто где-то должно создаться запись где "/distrib/instances/" будет равнятся айпи сервера "/distrib/instances/127.0.0.1" допустим, но не появляется
Павел Романов
10 февраля 2023, 18:25
1
0
Можно через SimpleSearch получать только id ресурсов и их уже скармливать msProducts, где использовать стандартные методы сортировки, фильтрации и т. д.:

[[!SimpleSearch?
    &containerTpl=`search_container`
    &tpl=`search_id`
]]

Чанк search_id такой:
[[+id]],

А в чанке search_container уже pdoPage и все, что угодно:

<div id="pdopage">
    <div class="rows">
        [[!pdoPage?
            &element=`msProducts`
            &resources=`[[+results:non]]`
            &parents=`7`
            &templates=`5` // шаблон товара
            &sortby=`Data.price`
            //и т .д.
            ]]
    </div>
    [[!+page.nav]]
</div>

Модификатор non нужен, чтобы убрать переносы строк в списке ID:
<?php
return str_replace(array("\r\n", "\r", "\n"), "", $input);
Артур Шевченко
10 февраля 2023, 17:22
1
0
Если предположить, что параметр where не предусмотрен, а я его в доке не нашёл, то вероятно надо сделать так
[[!pdoPage? 
    &element=`SimpleSearch`
    &includeTVs=`1`
    &ids=`[[msProducts?:default=`999999`?returnIds=`1`&limit=`0`&parents=`7`&sortby=`price`]]`
    &docFields=`pagetitle`
    &useAllWords=`1`    
    &limit=`10`
]]
Константин
10 февраля 2023, 14:38
0
Спасибо! Получилось!!!
Алексей
10 февраля 2023, 14:29
0
Добрый день. Только делал недавно.
Это ссылка
<a href="#modal-order" onclick="getEmpId(this)" data-name="{$pagetitle}" class="pt uk-button uk-button-primary uk-width-1-1" uk-toggle>Запросить наличие</a>
Это js
function getEmpId(element) {
    var empId = element.dataset.name
    document.querySelector("input[name=title]").value = empId
}
Это input
<input type="text" id="af_title" name="title" value="" placeholder="" class="uk-input" readonly/>
Артур Шевченко
10 февраля 2023, 14:25
0
Надо все пронумеровать
Сергей Карпович
10 февраля 2023, 14:20
+1
Значил у тех что выше — сортировка стоит = 0, укажите у них 2,3,4 и т.п.
Константин
10 февраля 2023, 12:12
0
Пробовал так. Не работает: скриншот 1 disk.yandex.ru/i/5ZKtbaX5XPiSAQ скриншот 2 disk.yandex.ru/i/x2C8ZMmwiAoTkQ
Алексей Шумаев
10 февраля 2023, 11:38
0
Ну будет таким намёк, что надо что-то менять )
Артур Шевченко
10 февраля 2023, 11:37
0
Можно. На вкладке Элементы есть раздел Категории там есть все эти названия, правой кнопкой мыши кликните по нужному, выберите пункт Переименовать категорию и в поле Сортировка укажите нужную цифру. Нумерация сквозная. Чем меньше число тем выше вкладка.
Артур Шевченко
10 февраля 2023, 11:32
0
На версии php ниже 7.0 работать не будет. Вдруг кто-то их ещё использует.
Алексей Шумаев
10 февраля 2023, 09:21
+1
Хм, глаза режет. Лучше таки так:
require_once dirname((__FILE__), 5). '/public_html/index.php';