Всего 125 336 комментариев

Алексей
20 июля 2022, 13:35
0
как то решили проблему?
Алексей
20 июля 2022, 13:17
0
Удалось как-то решить проблему?
Николай Савин
19 июля 2022, 20:42
0
Насколько я понял вам нужно не return делать, а echo json; die;
echo json_encode(array('status' => true, 'msg' => "Succesfuly retrieved data from '{$objectName}' with search params as '{$searchParams}'", 'result' => $result), JSON_UNESCAPED_UNICODE);
die;
Роман
19 июля 2022, 15:18
0
Ну глупо и глупо. Вам виднее.
Vladimir
19 июля 2022, 14:52
0
Но ведь это странно и глупо, за счёт того что плагин по обработчику «OnHandleRequest» должен именно это и выполнять, мол человек сделал запрос, и допустим вывести вместо страницы то что в плагине, кокрас таки те обработчики что вы выше написали вообще не подходят.
Суть простая я хочу отправить аякс запрос с XMLHttpRequest допустим, и получить ответ от плагина, в плагине моём всё работает если выводить в лог, но вернуть как ответ не получается
Артур Шевченко
19 июля 2022, 14:52
+1
<?php
define('MODX_API_MODE', true);
require_once dirname(dirname(__FILE__)) . '/index.php';

$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);

// Откликаться будет ТОЛЬКО на ajax запросы
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
    return;
}

// Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
// Если в массиве POST нет действия - выход
if (empty($_POST['action'])) {
    return;
}

// А если есть - работаем
$res = '';

$action = $_POST['action'];

switch ($action) {
    case 'getCOntent':
    if((int)$_POST['rid']){
      // тут получаешь код шаблона
    }
       break;

      
}

// Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
if (!empty($res)) {
    die($res);
}
Роман
19 июля 2022, 14:44
0
Просто в документации написано:
Output
Все, что возвращается этим событием, будет записано в журналы как ошибка.
Поэтому ничего не выводится.
Скорее всего, что-то из этих, сложно сказать, не видя полной картины
OnMODXInit
OnLoadWebDocument
OnPageNotFound
Артур Шевченко
19 июля 2022, 14:36
0
Я думаю надо изучить схему компонента, получить методом getIterator() все блоки привязанные к текущему ресурсу, потом в цикле получить у каждого блока поле с контентом, потом вырезать тэги и посчитать количество символов, путём инкрементирования какой-нибудь переменной, например, $count. А потом записать это значение в TV symbols.
Роман
19 июля 2022, 14:22
0
Возможно не OnHandleRequest нужен.
Vladimir
19 июля 2022, 14:17
0
Джсом отправляю так
function makeAjaxCall(requestMethod, requestPath, requestBody) {
    var request = new XMLHttpRequest();
    request.open(requestMethod, requestPath);

	request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
	request.setRequestHeader("X-Request-Type", "rapidLayout");
    request.send(requestBody);

    request.onload = function() {
        if (request.readyState == 4) {
            //the operation is done
            if (request.status == 200) {
            	log(request)
            	result = JSON.parse(request.responseText);
            	log(result);
                return result;
            } else if (request.status >= 400) {
                //client or server errors
                errCode = `Error Code: ${request.status}; Error Msg: ${request.statusText}`;
                log(errCode)
                alert(errCode);
            }

        }

    }

}
Evgeny
19 июля 2022, 14:05
0
Может кто-то подсказать, как правильно написать плагин, который срабатывает на сохранение документа и записывает количество символов всех блоков в TV-переменную «symbols»? Это код возвращает «0».

<?php

$contentblocks = $modx->getService('PageBlocks', 'PageBlocks', MODX_CORE_PATH . 'components/pageblocks/model/');
$contentblocks = strlen(strip_tags($contentblocks));

switch ($modx->event->name) {
    case 'OnDocFormSave':
        $resource->setTVvalue('symbols', $contentblocks);
        break;
}
kudesia
19 июля 2022, 13:39
0
Огромное спасибо!
Алексей Смирнов
19 июля 2022, 13:00
0
Как тот портал сделан — не известно, но функционал для создания повторяющихся блоков и самих тем уже есть.
Посмотрите MagicThemes и его демо-шаблон mtDemo. Можно посмотреть видео что может и как.
Для разработчиков уже пишу инструкцию как работать с этим пакетом.
Остальные допы тоже не плохи. Можно выбрать по «вкусу и цвету»
modstore.pro/packages/sites-themes/magicthemes
Вскоре будет выход платного шаблона для маленького блога.
maxgmm
19 июля 2022, 11:38
0
все разобрался msOptionsPrice2 был установлен
Артур Шевченко
19 июля 2022, 11:12
0
Версия php, modx, компонента? Что-то из-за этой ошибки не работает?
Артур Шевченко
19 июля 2022, 11:10
0
Есть третий вариант, создать у каждого товара свойство number_sales и написать плагин который при оплате заказа будет смотреть список товаров и прибавлять их количество к количеству в поле number_sales. Тогда можно будет сортировку делать по этому полю.
Роман
19 июля 2022, 09:59
-1
Можно конечно написать так, но запрос будет тяжелый и даже на хорошем оборудовании будет тормозит. Возможно загнать в кэш все. А так лучше сделать, как написано выше.
{'msProducts' | snippet: [
	'parents' => '0',
	'tpl' => 'tpl.similarProductsOne',
	'leftJoin' => '{ "msOrderProduct": { "class": "msOrderProduct","on": "msProduct.id = msOrderProduct.product_id" }}',
	'select' => '{ "msProduct":"*", "Data": "*", "msOrderProduct": "SUM(msOrderProduct.product_id) as counts"}',
	'groupby' => 'msOrderProduct.product_id',
	'sortby' => '{"counts": "desc"}',
	'limit' => 10
]}
Артур Шевченко
18 июля 2022, 23:41
1
0
Инновационный, сверхтехнологичный, абсолютно бесплатный мой велосипед)))