Скаут

Скаут

Был в сети 25 сентября 2025, 12:54
Заказы не принимаю
Bender
Bender
Благодаря Василию, вопрос был разрешен.
'class' => 'modResource',
        'loadModels' => 'ms2gallery',
        'leftJoin' => [
            'Image' => [
                'class' => 'msResourceFile',
                'on' => 'modResource.id = Image.resource_id AND Image.parent = 0',
            ],
            'Thumb' => [
                'class' => 'msResourceFile',
                'on' => 'Image.id = Thumb.parent AND Thumb.path LIKE "%medium%"',
            ]
        ],
        'select' => [
            'modResource' => '*',
            'Image' => 'Image.url as image',
            'Thumb' => 'Thumb.url as thumb',
        ],
Андрей
Андрей
Возможно кто-то сможет подсказать как правильно решать такие задачи или же мой вариант вполне нормальный и так делать и нужно?
Как уже подсказали выше, используйте MIGX. Приведённый код это жесть конечно :))

Конкретно по вашему примеру, можно сделать так:

1. Ставим MIGX
2. Создаём тв с типом MIGX, далее настройки:

Вкладки формы:
[
  {
    "caption": "Заголовок",
    "fields": [
      {
        "field": "title",
        "caption": "Описание",
        "inputTVtype": "text"
      },
      {
        "field": "img",
        "caption": "Картинка",
        "inputTVtype": "image",
        "sourceFrom": "migx"
      }
    ]
  }
]

Разметка колонок:
[{
  "header": "Описание",
  "dataIndex": "title"
},{
  "renderer": "this.renderImage",
  "sourceFrom": "migx",
  "header": "Картинка",
  "dataIndex": "img"
}]

Вывод на странице (1 — id страницы, paramName — имя ТВшки):

{set $rows = 1 | resource : 'paramName' | fromJSON}

{if $rows?}
	<div class="dignity">
		<div class="dignity__inner">
			{foreach $rows as $idx => $row}
				<div class="dignity__item">
                			<img src="{$row.img}" alt="" class="dignity__img">
                			<div class="dignity__title">{$row.title}</div>
           			 </div>
			{/foreach}
		</div>
	</div>
{/if}

Вывод сделан на Fenom (должен быть установлен pdoTools, и включена системная настройка — Использовать Fenom на страницах). Если есть желание использовать стандартный парсер, то можно выводить стандартным сниппетом getImageList из комплекта MIGX.
Наумов Алексей
Наумов Алексей
hook для Formit, отсылает сообщения через sms.ru, вызываем перед хуком email:

Предварительно создаем настройки
sms_ru_api_id — api ключ, который дадут при регистрации на сайте
manager_phone — номер телефона получателя

<?php
// API id
$api_id = $modx->getOption('sms_ru_api_id', null, null);
if(empty($api_id)) {
    $modx->log(xPDO::LOG_LEVEL_ERROR,'SMS.RU hook: empty API ID!.');
    // так как это hook, то даже в случае неудачи возвращаем true
    return true;
}

// Support phone number
$phone = $modx->getOption('manager_phone', null, null);
if(empty($phone)) {
    // так как это hook, то даже в случае неудачи возвращаем true
    return true;
}

$ch = curl_init("https://sms.ru/sms/send");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(

    "api_id"        =>  $api_id,
    "to"            =>  $phone,
    "text"      =>  "ТЕКСТ СООБЩЕНИЯ",

));
$body = curl_exec($ch);
curl_close($ch);

return true;
Андрей
Андрей
У simpleSearch есть параметр ids, можете вызвать 3 сниппета и указать в нем разные категории.

Можно с помощью pdoPage сделать.

Форма с поиском
<form action="/search/" mathod="get">
	<input name="search" value="{$.get.search | escape}">
	<button>Найти</button>
</form>

Результаты
{set $category1 = '!pdoPage' | snippet : [
	'parents' => 0 //тут нужная категория
	'includeContent' => 1,
	'tpl' => '@INLINE {$pagetitle}',
	'where' => [
		'pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
	] | toJSON
]}

{if $category1?}
	<div>В каткгории 1 найдено:</div>
	{$category1}
{/if}
Дмитрий Кондаков
Дмитрий Кондаков
Вот таким плагином при открытии страницы товара добавляю его в корзину предварительно очистив её:
<?php
switch ($modx->event->name) {
		
	case 'OnLoadWebDocument':
	  $class = $modx->resource->get('class_key');
	  $resourceId = $modx->resource->get('id');
	  
	  if ($class == 'msProduct') {
	    $miniShop2 = $modx->getService('minishop2','miniShop2',
	      MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
      
      if (!($miniShop2 instanceof miniShop2)) return '';
      
      $miniShop2->initialize($modx->context->key, $scriptProperties);
      $miniShop2->cart->clean();
      $miniShop2->cart->add($resourceId);
      
	    }
	  break;
}
далее на странице самого товара вывожу форму заказа без корзины.
Евгений
Евгений
У ресурсов поставить галки «Не показывать в меню», или в шаблоне вывода подпунктов меню innerRowTpl проверять на «parent»
типа:
[[+parent:ne=`2`:then=`код пункта меню`:else=``]]
Буквально недавно такое решал… но мне не пригодилось.
Stan Ezersky
Stan Ezersky
Рабочий код с работающего сайта.

При клике на кнопку «Нет email» поле для ввода почты прячется, в инпут подставляется фейковый емейл в формате датасегодня@fakemail.com

<div class="form-group">
				<label for="email">
					<span class="required">*</span> Email
				</label>
				<input type="email" id="email" placeholder="Email" name="email" value="" class="form-control{('email' in list $errors) ? ' error' : ''}">
				<span  id="noemail" type="button">Нет email</span>
			</div>
И js

//Fake Email generate
	
	$('#noemail').click(function(){
		var time = Date.now();
		var fakeemail = time + "@fakemail.com";
		$('#email').val(fakeemail).hide();
		$('#noemail').hide();
	});
Дальше сами, думаю, ничего разжёвывать не надо