Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #68
Иван Бочкарев
25 ноября 2019, 09:05
2
0
Можно так:
{set $material = $_modx->resource.project_material | split:'||'}
{foreach $material as $item}
    {set $filter[] = 'project_material=='~$item}
{/foreach}

{'!pdoResources' | snippet : [
  'parents' => 7,
  'limit' => 2,
  'tvPrefix' => '',
  'tvFilters' => $filter,
  'showLog' => 0,
  'sortby' => 'RAND()',
  'includeTVs' => 'project_image,project_price,project_area,project_material,project_size,project_bedrooms,project_bathrooms,location',
  'tpl' => '@FILE chunks/projects/project.tpl',
]}
Евгений Борисов
11 августа 2019, 14:18
2
+5
Универсального средства нет. Все сугубо индивидуально
— Различные капчи обходятся при помощи rucaptcha.com/ или подобных сервисов
— От явных спамеров которые используют proxy листы/tor помогает www.stopforumspam.com
— Для защиты от матов и прочего бреда можно составить черный список слов
— Чтобы дополнительно отсеять спамеров с временными почтовыми ящиками можно составить список доменов github.com/TicketeStartup/temp-mail-check/blob/master/disposable-email-domains.json естественно, он будет не полный. И этот способ подойдет скорее для защиты от левых регистраций.

В любом случае, если вас решили целенаправленно заспамить, то это сделают. Но в 90% случаев данных мер достаточно.
Василий Столейков
05 июля 2019, 17:50
1
+1
Оставлю тут комментарий, может кому пригодится.
Можно сделать свой модификатор, которым будет удобно пользоваться:

  1. Создаём сниппет под названием tv
  2. Вставляем в него следующий код:
    <?php
    $output = '';
    
    if(!empty($options)) {
        $lang = $modx->getOption('localizator_key');
        if(empty($input)) $input = 1;
        
        if($res = $modx->getObject('locTemplateVarResource', array(
            'contentid' => $input, 
            'tmplvarid' => $options, 
            'key' => $lang
        ))) {
            $output = $res->get('value');
        }
    }
    
    return $output;
  3. Используем на сайте везде где нужно в виде модификатора:
    // устанавливаем в переменную {$tv_name} локализованное значение тв-параметра.
    {set $tv_name = 1|tv:3} // где 1 это ресурс, а 3 это id тв параметра.

Возможно и мне пригодится на будущее скопипастить, чтобы не писать заново, хотя времени на написание ушло 2 минуты.
Володя
06 июня 2019, 14:34
2
0
{var $name}


{set $count = 0}
{foreach $array as $value}
    {include ++$count}
    <div class="col-md-6">{$value.pagetitle}</div>
{/foreach}


{/var}
Андрей
04 июня 2019, 17:21
1
+3
Была такая задача, правда товар выбирался не по чекбоксам, а указывался в TV с множественным выбором

Создаем TV product_of_the_day с типом ввода Список (множественный выбор), в возможных значениях там указываем

@SELECT `pagetitle` AS `name`,`id` FROM `[[+PREFIX]]site_content` WHERE `published` = 1 AND `deleted` = 0 AND (`template` = 16) // Тут вместо 16 ваш id шаблона с товаром

Дальше плагин на событие OnLoadWebDocument
Суть такова — товар выбирается по номеру дня недели, т.е. в списке первый товар будет на понедельник, второй на вторник и т.д.
<?

// Плагин на событие OnLoadWebDocument

$products_of_the_day = $modx->getObject('modTemplateVarResource', [
	'contentid' => 4, // id ресурса к которому привязан TV
	'tmplvarid' => 80 // id TV
]);

unset($_SESSION['product_of_the_day']);

if ($products_of_the_day) {
	
	$day = date('N');
	
	$products_of_the_day = explode('||', $products_of_the_day->get('value'));
	
	if (!empty($products_of_the_day) && isset($products_of_the_day[$day - 1])) {
		$_SESSION['product_of_the_day'] = $products_of_the_day[$day - 1];
	}
	
}

В шаблоне получаем ID товара дня, можем делать с ним что угодно, в вашем случае подставить в вызов сниппета
{set $product_of_the_day_id = $.session.product_of_the_day}
Евгений Webinmd
30 мая 2019, 18:53
1
+1
1) подключить сервис
$pdoTools = $modx->getService('pdoTools');
2) заменить вызов чанка
$modx->getChunk
на
$pdoTools->getChunk
Это в самом сниппете, продублируй и заменяй
Илья Уткин
23 апреля 2019, 20:14
1
+1
В плагине доступна переменная $mode — new или upd
Игорь Гришанов
23 марта 2019, 16:33
3
+2
Павел абсолютно прав) Только что делал таким образом

Порядок действий такой
1) Находишь файл core/components/minishop2/model/minishop2/msorderhandler.class.php
2) находишь там функцию getCost и заменяешь ее тем что в приведенной Павлом ссылке
3) добавляешь скрипт из той же ссылки на страницу Оформления заказа в самом низу
4) выводишь ссылку в нужном месте
<span id="deliveryprice">Стоимость доставки: <span id="ms2_delivery_cost"></span> руб.</span>

это будет цена доставки
5) если еще надо цену заказа БЕЗ доставки то добавляешь в скрипт в функцию miniShop2.Callbacks.Order.getcost.response.success
такие строки например
var cartcost = response.data['cost'] - rdc;
    $('#ms2_cost').text(cartcost);
тогда ссылка на цену без доставки будет так
<span  id="ms2_cost"></span>
Юрий
23 января 2019, 19:28
1
+1
Либо переопределить сам класс, написав кастомный, либо переопределить только метод getCost в кастомном классе, что логичнее.
Метод подключения кстомного класса из инструкции не работает. Поэтому в графу «класс обработчик заказа» нужно вписать название вашего кастомного класса.