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

Артур Шевченко
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
Инновационный, сверхтехнологичный, абсолютно бесплатный мой велосипед)))
Артур Шевченко
18 июля 2022, 23:39
0
Можно у товара поставить галочку Особый и вывести этот товар через msProducts с параметром 'where'=>['Data.favorite' => 1]
Илья
18 июля 2022, 09:51
0
Здравствуйте!
У меня сейчас точно такая же проблема.
«Вечное сохранение» на товарах Minishop2. На обычных ресурсах всё нормально.
Не вспомните, как решили проблему?
7лет прошло уже правда )))
Василий Одинцов
18 июля 2022, 07:57
+1
Это список ID всех пользователей с данными правами. Можно разделить запятой например, если таких пользователей много, чтобы не сливались:
$users = $modx->getIterator('modUser', array('sudo' => 1));
foreach($users as $user){
    echo $user->get('id').',';
}
Ну и смотреть потом в пользователях:
https://sitename.ru/manager/?a=security/user
Можно отфильтровать по нужным.
Артур Шевченко
17 июля 2022, 23:28
0
Не в опции дело, а в сниппите, он не выводит опции без значений.