Евгений Webinmd

Евгений Webinmd

Был в сети 31 июля 2026, 13:07
Заказы не принимаю
нужно сменить права. Из документации к Office
Обратите внимание, что мы должны дать группе (аноним) доступ Load only, чтобы они могли загрузить страницу, проверить права доступа и получить «403 Доступ запрещен». Если не дать им Load only, то страница для них не будет существовать, и анонимы получат «404 не найдено».
1) Создать поле для минишопа (либо создать TV поле) в котором будет храниться процент ваш

2) Написать плагин на событие OnDocFormSave
Привел пример и с полем minishop и с TV полем
<?php
if ( $modx->event->name != "OnDocFormSave" || $resource->get('class_key') != 'msProduct' ) return;

$id = $resource->get('id');
$res = $modx->getObject('msProduct', $id); // Получаем объект товара
$price = $res->get('price'); // Получаем цену
$old_price = $res->get('old_price'); // Получаем цену

$tvId = 12; // тут ID TV поля если используется оно

// тут уже ваши манипуляции и расчеты 
$price = str_replace(" ","",empty($price) ? 0 : $price);
$old_price = str_replace(" ","",empty($old_price) ? 0 : $old_price);

if($old_price > 0){

	$procent = number_format(round((($old_price - $price) / $old_price) * 100), 0, '.', ' ');

	// тут для минишопа сохранение 
	$res->set('field_procent', $procent); // Записываем процент в поле для минишопа (если создали его заранее)

	// тут вот для TV поля ()если используете его
	if ($tv = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvId , 'contentid' =>$id))) {
        $tv->set('value', $procent); 
        $tv->save(); 
    }

    // сохраняем 
	$res->save();

}
И дальше уже в сниппете вывода сортируете как по обычному полю.

Для того чтобы не пересохранять ВСЕ товары можно написать скрипт и щапустить его в компоненте Console
<?php

$output = $modx->runSnippet('msProducts', array(
    'parents' => '0',
    'depth' => '5',
    'returnIds' => '1',
    'limit' => '3000',   
    ));

$arr = explode(',',$output); 

foreach($arr as $value){ 

    // а тут уже сами пишите получение цен и запись в поле, в зависимости от того что использовать будете TV или minishop поле, можно из плагина скопировать часть кода 
 
}

Павел, сорри, написал не обновляя, уже жалко удалять, но код писался на коленке, так что может и не работать
Володя, добрый вечер
тут заказчик купил этот модуль, поставил, вывели у товара, кнопка появилась, но при нажатии в консоль такое вот сообщение вылезло:

jquery.min.js:4 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check xhr.spec.whatwg.org/.send
@ jquery.min.js:4ajax
@ jquery.min.js:4getResponse
@ default2.js:110(anonymous function)
@ default2.js:45dispatch
@ jquery.min.js:3q.handle
@ jquery.min.js:3
bootstrap.min.js:6 Uncaught TypeError: Cannot call a class as a function(…)
default2.js — это я уже скопировал скрипт на всякий случай, но еще не ковырял его, он идентичен оригиналу
Есть подозрения что это из-за того что в верстке используется bootstrap 4 (хотя его полностью убирал) но всё равно непонятно.

Собственно вопрос, не тестировался ли компонент с новой версией bootstrap или не сталкивался ли с такой вот проблемой?

Как заказчик скинет доступы в кабинет modstore, напишу туда уже, если не получится разобраться.
Добрый день, очень удобный компонент, есть небольшой вопрос, не планируется ли добавление поля типа Изображение?
я поставил
{
    xtype: 'modx-combo-browser'
    ,fieldLabel: _('ms2_product_mytextfield')
    ,description: _('ms2_product_mytextfield_help')
    ,name: 'image'
    ,allowBlank:true
    ,anchor: '100%'
}
Как бы картинку выбрать можно, всё отлично, только вот renderer бы еще
1.2.9-beta — закомментил пока в строке 2049 msie.class.php так как сайт на локалке, то пока этот момент не беспокоит

if (!isset($csv[$k])) {
    $out['errors']++;
    $continue = true;
    $this->modx->log(modX::LOG_LEVEL_ERROR, $this->parseString($this->modx->lexicon('msimportexport.err_field'), array('field' => $v, 'index' => $out['rows'])));
    continue;
}
Столкнулся с такой проблемой, если какое-то поле пустое, то импорт пропускает товар, причем не важно что за поле.
Поля создаю через компонент msFieldsManager (по сути упрощенное создание полей для товара) — эти поля нормально видны и в экспорте и в импорте и если их заполнить, то импорт отрабатывает отлично.
Не у всех товаров одинаковый набор полей, а разбивать на 3-5 файлов не очень удобно

+ в lexicon небольшая опечатка промущен -> пропущен

$_lang['msimportexport.err_field'] = 'Поле "[[+field]]" не существует в файле. Импорт данного товара промущен. Пожалуйста, исправьте файл импорта или параметры поля. Строка № [[+index]]';