Иван Бондаренко

Иван Бондаренко

С нами с 30 января 2013; Место в рейтинге пользователей: #91
Андрей
04 декабря 2017, 19:33
1
+1
Можно поставить дополнение Console и выполнить там код.

Есть несколько вариантов:

1. Получить все ресурсы по артикулу и отметить как удаленные или сразу удалить
$articles = array('артикул1', 'артикул2');

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));

$products = $modx->getCollection('msProduct', $c);

foreach ($products as $product) {
  // 1. Отметить как удаленные
  $product->set('deleted', '1');
  $product->save();

  // 2. Удалить сразу
  // $product->remove(); 
}

2. Так же получить по артикулу и удалить через процессор (то же самое что удалить из админки)
$articles = array('артикул1', 'артикул2');
$products = array();

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));
$c->select(array(
  'msProduct.id as id'
));

if ($c->prepare() && $c->stmt->execute()) {
  $products = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}

if (!empty($products)) {
  foreach($products as $product) {
    $response = $modx->runProcessor('resource/delete', array(
      'id' => $product['id']
    ));
    
    if ($response->isError()) {
      $modx->log(1, 'Не удалось удалить ресурс');
    }
  }
}
Дмитрий Середюк
25 ноября 2017, 17:26
1
+1
По сути если вы выводите опции через снипет msOptions, то там уже встроена проверка на пустоту, но данный снипет предназначен для полей с Автодополнением.

Для обычных полей используйте простую проверку
{if $field}
Поле field  = {$field}
{else}
Поле пусто.
{/if}
Гриборий
13 мая 2017, 18:40
2
+5
А теперь, когда логика понятна, можно писать и
{$result ?: 'Ничего не найдено'}
Евгений Webinmd
12 мая 2017, 19:02
1
+1
я делал примерно так:
для select добавлял name=«options[option_name]»

и в корзине или письме в чанке через fenom выводиться так:

{if $product.options.option_name?} 
       <p><span>Опция:</span> {$product.options.option_name}</p>
 {/if}
Володя
30 марта 2017, 19:00
6
+3
пример вывода всех тегов
<!-- tags -->
{set $tags = $_modx->runSnippet('pdoResources',[
'class' => 'msProductOption',
'sortby' => 'value',
'sortdir' => 'ASC',
'where' => json_encode([
'key' => 'tags',
'value:!='=> 'undefined'
]),
'select' => 'DISTINCT(msProductOption.value) as id, "tag" as class_key',
'limit' => 0,
'return' => 'json'
])}
{set $tags = $tags | fromJSON}
{if count($tags)}
	<ul class="uk-float-right uk-navbar-nav tm-header-tags">
		<li data-uk-dropdown="" aria-haspopup="true" aria-expanded="false">
			<a>{'msfbshop_tags' | lexicon}</a>
			<div aria-hidden="true" class="uk-dropdown uk-dropdown-navbar uk-dropdown-bottom">
				<ul class="uk-nav uk-nav-navbar">
				{foreach $tags as $row}
					<a href="{$row.link}">{$row.id}</a>
				{/foreach}
				</ul>
			</div>
		</li>
	</ul>
{/if}
Wassi Wassinen
07 января 2017, 22:46
1
+1
Это уже работает. Создавайте поле в чанке ms2form и в него добавляйте дату вида yyyy-mm-dd. Самое простое — прикрутить скрипт datepicker. И сохраняйте значение в поле publishedon и т.д.
Сергей Шлоков
30 августа 2016, 07:48
2
+1
Создать плагин на событие OnHandleRequest
<?php
switch ($modx->event->name) {
        case 'OnHandleRequest':
		if ($modx->user->id == 10 && $modx->user->isAuthenticated($modx->context->key) && $modx->context->key != 'mgr') {
		$modx->runProcessor('security/logout');
		break;
}
Владимир
10 июня 2016, 08:58
1
+1
дальше твишек
Tagger -протестирован на миллионе тегов.
Илья Уткин
08 июня 2016, 16:54
1
+1
Видимо, в runSnippet не заложено использование наборов. Попробуйте вот так — самостоятельно распарсить набор и превратить его в параметры
$propertySetObj = $modx->getObject('modPropertySet', array('name' => 'cart_catalog'));
$propertySet = $modx->parser->parseProperties($propertySetObj->get('properties'));
$modx->runSnippet('Shopkeeper3', $propertySet);
Богдан
03 июня 2016, 16:20
1
+1
Пользуюсь этим расширением для скрытия ресурсов, вполне устраивает.