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

Lori
16 ноября 2022, 18:29
0
ниче так ты решил ответить на вопрос почти 2 летней давности)
R2m0x94 (Vasily)
16 ноября 2022, 18:18
0
Для дробного числа (float, double, decimal(18,2))
{$percent|floatval}
Riwka
16 ноября 2022, 15:01
0
Добавлю комментарий к старой теме, вдруг кому-то еще поможет. Столкнулась с похожей проблемой, обновление адреса репозитория через sdStore не помогло, выдало очередную ошибку, но, убрала в площадке запись об имени пользователя и API и все прекрасно заработало. Не знаю, баг это или фича, но на текущий момент так работает.
Вячеслав Варов
16 ноября 2022, 14:23
0
<?php
switch($modx->event->name) { 
    case 'OnDocFormSave':
    if ($resource->get('class_key') == 'msProduct') {
        $template = $resource->get('template'); {
            if ($template == 15) {
                $old_price = $resource->get('old_price');
	            $sale_size = $resource->get('sale_size');
	            $resource->set('price', $old_price * (100 - $sale_size) / 100);
	            $resource->save();
            }
        }
    }
    break;
}
поле sale_size добавил в товар через плагин minishop2
Вячеслав Варов
16 ноября 2022, 14:22
0
Да таким событием получилось сделать, спасибо!
Vladimir
16 ноября 2022, 14:21
0
Довольно странно такое, код везде использую, на других сайтах нет таких проблем. режим генерации стоит
full
Роман
16 ноября 2022, 13:39
+1
Да, не прав, OnDocFormSave
if ($modx->event->name != 'OnDocFormSave') {return false;}
vectorserver
16 ноября 2022, 12:11
0
Вот так:
<?php
//define('MODX_API_MODE', true);
//require 'index.php';

/* @var modX $modx */

//Дадим права админа навыполнение процессора
$modx->user = $modx->getObject('modUser', 1);

//Данные для обновления ресурса
$data = [
    'id'=>1,
    'introtext'=>'ццццццццццццц',
    'alias'=>'index',
    'context_key' => 'web',
    'tvs' => true,// save tv
    'tv3' => 'abc', //tv +id
];

//Запускаем процессор
$response = $modx->runProcessor('resource/update', $data);

if ($response->isError()) {
    $out = $response->getMessage();
} else{
    $out = $response->response;
}


var_dump($out);
Константин Ильин
16 ноября 2022, 12:03
0
Что-то я впервые вижу событие beforeSaveProduct, вроде такого нет.

Должен подойти OnDocFormSave
<?
if ($mode != 'new' ) { // тут уже сами смотрите, можно убрать это условие
    
    $id = $resource->get('id');
    if($resource->get('class_key') == 'msProduct'){
        /* код */
    }

}
Константин Ильин
16 ноября 2022, 11:58
0
В «целом» так же как и чанк
в вашей же теме
modx.pro/help/23347#comment-136039

<?
$modx->runSnippet('Название сниппета', [ 
'tpl' => ''
/* параметры */
]);
У меня по простому
disk.yandex.ru/i/xXiQ_lfA6weMZQ
Евгений
16 ноября 2022, 11:41
0
зато быстро и надежно, ничего не сломается после обновления
deleted
16 ноября 2022, 11:33
0
а зачем через процессор? медленно же
Руслан
16 ноября 2022, 10:03
0
Спасибо, сделал так
switch ($modx->event->name) {
	case 'OnDocFormRender':
		
	$parent = (int) $_REQUEST['id'];
	
	if ($parent = $modx->getObject('modResource', $parent)) {
	    $i = $parent->get('template');
	    if ($i == 6) {
	        $modx->controller->addHtml('<script>
	            Ext.onReady(function() {
	                window.setTimeout(function() {
	                let tabs = Ext.getCmp("modx-resource-tabs");
	                 tabs.setActiveTab(6);
	                }, 10);
	            });
	            
	        </script>');
	    }
	}
		
	break;
}
Роман
16 ноября 2022, 09:13
+1
Открываем значит амбарную книгу(по другому это старье и назвать нельзя) и читаем:
activeItem
Вообще скорее всего, как-то так:
tabPanel.setActiveTab(5);
Или возможно, так
getState: function () {
	return {activeTab: this.items.indexOf(this.getActiveTab())};
}
Нужно пробовать.
Роман
16 ноября 2022, 08:56
0
Не корректный вопрос. Требует уточнения. Вариантов много, от создания отдельной страницы, до AjaxSnippet.
Роман
16 ноября 2022, 08:51
+1
Нужно создать плагин, повесить на событие beforeSaveProduct
И что-то в этом роде написать:
if ($modx->event->name != 'beforeSaveProduct') {return false;}
if ($resource->get('class_key') == 'msProduct') {
	$old_price = $resource->get('old_price');
	$sale = $resource->get('sale');
	$resource->set('price', $old_price * (100 - $sale) / 100);
}
Руслан
16 ноября 2022, 08:32
0
Добавил
infokirov
16 ноября 2022, 08:18
0
для целых решил задачу так:
'{ "weight:IN": [5,6,7,8,9] }';
массив сгенерировать не сложно, но опять проблема возникает, если weight принимает не целое значение, тогда в выборку не попадёт.
Виталий
16 ноября 2022, 01:30
0
Все проверял, и article:0 и article:1, балы в нуле, со снипетом, что на сайте у Ильи Уткина, не работает точный поиск, mSearch2 наверное по другому алгоритму работает. Печаль конечно, для магазина запчастей, артикул одно из приоритетов в поиске.
Но это не совсем критично, так как дубли идут если только, в одном из поиске есть точное соответствие и оно дальше не изменяется. Т.е. 20025002 и 20025001 не дают дубли, а 20025002 и 20025002334 дают, таких соответствий немного, так что в принципе нормально.
Алексей Смирнов
15 ноября 2022, 22:46
+1
Проверяли такие настройки: (сохраните старые где нибудь, я про — mse2_index_fields )
mse2_index_fields  = article:0 // попробуйте еще 1
mse2_search_all_words_bonus = 0
mse2_search_exact_match_bonus = 10
mse2_search_like_match_bonus = 0
После выставления — запустите переиндексацию сайта.