Константин

Константин

С нами с 30 мая 2017; Место в рейтинге пользователей: #272
Павел Гвоздь
11 октября 2020, 10:04
1
0
$id = 5268;

$modx->runProcessor('resource/delete', [
    'id' => $id,
]);
$modx->runProcessor('resource/trash/purge', [
    'ids' => $id,
]);
Володя
07 ноября 2017, 15:32
2
+3
<input type="checkbox" data-toggle="checkbox" onchange="this.checked ? $(this.form).submit() : false;">
Михаил
12 октября 2017, 10:17
2
+1
Как сделал я.

В чанк tpl.Office.auth.login добавил (ссылку на ресурс поменять):
<div class="col-md-8">
 <label for="office-auth-register-rules" class="col-md-3 control-label">
<input type="checkbox" name="rules" class="form-control" id="office-register-form-rules" value="yes" style="width: auto;"/> Я <a href="ссылка на ресурс" target="blank">согласен на обработку</a> персональных данных.</label>
</div>
Создал плагин с именем chekPersDannie (имя не важно), с таким кодом:
<?php
if ($modx->context->key != 'mgr') {
    switch ($modx->event->name) {
        case 'OnBeforeUserFormSave':
            if (empty($_POST['rules'])) {
                $modx->event->output('Для продолжения регистрации Вы должны дать разрешение на обработку Ваших персональных данных');
            }            
            break;
    }
}
и у этого плагина, во вкладке Системные события поставить галку на событие OnBeforeUserFormSave.

Проверяем, должно работать.
Василий Наумкин
13 июля 2017, 11:46
6
+5
Гораздо проще и лучше просто вызвать свой скрипт после default.js от ms2 и перезаписать там объект miniShop2.Message:
miniShop2.Message = {
	success: function() {},
	error: function() {},
	info: function() {},
};

В modstore.pro, например, сделано вообще вот так:
miniShop2.Message = App.utils.Message;
Поэтому все уведомления от ms2 работают через общую систему уведомлений сайта.
Илья Уткин
14 марта 2016, 17:06
2
0
Немного дополнил плагин, так как не всегда $introtext = $content
if ($modx->event->name == "OnDocFormSave") {
    $introtext = $resource->get('introtext');
    $generateIntrotext = $resource->getIntroText($resource->get('content'), false);
    if (empty($resource->getProperty('disable_jevix'))) {
        $generateIntrotext = $resource->Jevix($generateIntrotext);
    }
    if ($introtext == $generateIntrotext) {
        $resource->set('introtext', '');
    $resource->save();
    }
}
Алексей Шумаев
01 марта 2016, 02:03
2
+1
Итак, временное решение — может кому пригодиться.

1. Запуск (Fenom)
{$_modx->runSnippet('mSearchForm', [
	'pageId' => 5,
	'element' => 'pdoResources',
	'limit' => 15,
	'tpl' => 'tpl.mSearch2.ac',
	'class' => 'modResource'
])}

2. Результат работы mSearchForm в tpl.mSearch2.ac отдаётся сниппету prepareSearchResult:
<?php
$out = '';

$tpls = array (
	'msCategory'  => 'tpl.mSearch2Category.ac',
	'modDocument' => 'tpl.mSearch2Document.ac',
	'msProduct'  => 'tpl.mSearch2Product.ac'
	);

if(isset($class_key) && isset($id)) {
	
	$pdo = $modx->getService('pdoTools');
	$tpl = $tpls[$class_key];
	
	$placeholders['pagetitle'] = $pagetitle;
	$placeholders['description'] = $description;
	
	if($class_key == 'msProduct') {
		$product = $modx->getObject('msProduct', $id);
		$placeholders['price'] = $product->get('price');
		$thumb = $product->get('thumb');
		if(empty($thumb)) {
			$placeholders['thumb'] = '/assets/templates/img/no-photo.png';
		}
		else {
			$placeholders['thumb'] = $product->get('thumb');
		}
	}
	
	$out = $pdo->getChunk($tpl, $placeholders);
}
return $out;

3. Пример куска чанка для продукта (с использованием Fenom):
<div class="img-wrapp">
		<img src="{$thumb}" alt="{$pagetitle}">
	</div>
	<div class="search-body">
		<span class="item-name">{$pagetitle}</span>
		{if $decription?}
			<span class="item-descript">{$description}</span>
		{/if}
	</div>
	<div class="item-price">{$price}<small> руб.</small></div>
Павел Гвоздь
16 февраля 2016, 18:59
3
0
Скрипт мигрирует с ТВ типа «Тег» на ТВ типа «tvSuperSelect»:
<?php
$tv_tag = 18; // id тв поля с типом "Тег"
$tv_tss = 17; // id тв поля с типом "tvSuperSelect"
$modx->addPackage('tvsuperselect', MODX_CORE_PATH .'components/tvsuperselect/model/');
$objs = $modx->getIterator('modTemplateVarResource', array('tmplvarid' => $tv_tag));
foreach ($objs as $obj)
{
	$values = explode(',', $obj->value);
	foreach ($values as $value)
	{
		$where = array(
			'resource_id' => $obj->contentid,
			'tv_id' => $tv_tss,
			'value' => $value,
		);
		if (!$modx->getCount('tvssOption', $where))
		{
			$new = $modx->newObject('tvssOption');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
		$where = array(
			'contentid' => $obj->contentid,
			'tmplvarid' => $tv_tss,
		);
		if ($old = $modx->getObject('modTemplateVarResource', $where))
		{
			$old_values = $modx->fromJSON($old->value);
			$old_values[] = $value;
			$old->set('value', $modx->toJSON(array_unique($old_values)));
			$old->save();
		}
		else {
			$new = $modx->newObject('modTemplateVarResource');
			$new->fromArray($where);
			$new->save();
			unset($new);
		}
	}
}
Запускать в пакете "Console"
Сергей Шлоков
12 января 2016, 08:46
2
+2
В чем проблема? Сделайте плагин на событие OnDocFormSave
switch ($modx->event->name) {
    case 'OnDocFormSave':
        if ($resource instanceof Ticket) {
            $contexts = array();
            $query = $modx->newQuery('modContext');
            $query->select($modx->escape('key'));
            if ($query->prepare() && $query->stmt->execute()) {
                $contexts = $query->stmt->fetchAll(PDO::FETCH_COLUMN);
            }
            $modx->cacheManager->autoPublish(array_diff($contexts, array('mgr')));
        }
        break;
}