Скаут

Скаут

С нами с 22 мая 2017; Место в рейтинге пользователей: #361
Bender
04 февраля 2018, 21:42
3
+2
Благодаря Василию, вопрос был разрешен.
'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',
        ],
Володя
03 февраля 2018, 19:14
1
+1
{foreach $product.options as $key => $option}
    {if $key in ['modification','modifications','msal']}{continue}{/if}
                            
    {set $caption = isset($product[$key~'.caption'])?$product[$key~'.caption']:('ms2_product_'~$key)|lexicon}
    {set $value = is_array($option)?($option|join:'; '):$option}
    
    {$caption} - {$value}
{/foreach}
Андрей
03 февраля 2018, 17:19
1
+1
Возможно кто-то сможет подсказать как правильно решать такие задачи или же мой вариант вполне нормальный и так делать и нужно?
Как уже подсказали выше, используйте 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.
Наумов Алексей
01 февраля 2018, 16:46
4
+4
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;
Андрей
16 января 2018, 11:41
1
+2
У 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}
Дмитрий Кондаков
29 ноября 2017, 10:33
1
+1
Вот таким плагином при открытии страницы товара добавляю его в корзину предварительно очистив её:
<?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;
}
далее на странице самого товара вывожу форму заказа без корзины.
Василий Столейков
09 октября 2017, 21:31
2
0
Интересная идея!
И за какой период ты считаешь просмотры? 10, 20, 30 минут?
Евгений
07 июля 2017, 10:14
1
+1
У ресурсов поставить галки «Не показывать в меню», или в шаблоне вывода подпунктов меню innerRowTpl проверять на «parent»
типа:
[[+parent:ne=`2`:then=`код пункта меню`:else=``]]
Буквально недавно такое решал… но мне не пригодилось.
Семён Кудрявцев
06 июля 2017, 17:45
1
+1
Вот видео, там рассказано и показано как это сделать через настройку форм — www.youtube.com/watch?v=G7N-Ku5GpsI
Stan Ezersky
01 июля 2017, 12:12
1
+2
Рабочий код с работающего сайта.

При клике на кнопку «Нет 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();
	});
Дальше сами, думаю, ничего разжёвывать не надо