Игорь

Игорь

С нами с 12 сентября 2018; Место в рейтинге пользователей: #495

Адрес в профиле пользователя Office

Здравствуйте.
Нужно на странице профиля добавить основной адрес для доставки с возможностью редактирования.
Вставил поля:
<div class="form-group row">
        <label class="col-md-2 col-form-label">улица</label>
        <div class="col-md-10">
            <input type="text" name="address" value="{$address}" placeholder="город" class="form-control">
         </div>
    </div>
    <div class="form-group row">
        <label class="col-md-2 col-form-label">дом</label>
        <div class="col-md-10">
            <input type="text" id="building" name="building" value="{$extended['building']}" placeholder="Дом" class="form-control">
        </div>
    </div>
    <div class="form-group row">
        <label class="col-md-2 col-form-label">квартира</label>
        <div class="col-md-10">
            <input type="text" id="room" name="room" value="{$extended['room']}" placeholder="Квартира"
                   class="form-control">
         </div>
    </div>
C полем «Улица» все хорошо, а вот поля «Дом» и «Квартира» никак не хотят сохранятся.
Нужно какой-то плагин написать на событие OnUserProfileBeforeSave, наверное? У меня пока ничего не получается. Помогите пожалуйста.
Игорь
11 июня 2020, 11:40
modx.pro
1
653
0

Не получается получить данные через json_decode

Здравствуйте.
Хотел вставить в mFilter2 фильтр по MIGX полю, вот по этой статье modx.pro/solutions/14715.
Как обычно, сразу ничего не получилось и стал смотреть код кастомного класса. Споткнулся вот на этом:
foreach ($values as $value => $ids) {
            if ($value !== '') {
//print_r($value); 
//print_r('
');    
//$value='[{"MIGX_id":"2","title":"test","price":"100","weight":"","key":"test","value":"test2"}]';                
                $migxs = json_decode(str_replace('"', '"', $value));
//var_dump(json_decode($value));            
                foreach ($migxs as $migx) {
                    $title = trim($migx->title);
                    if (!is_array($results[$title]['resources'])) {
                        $results[$title]['resources'] = array();
                    }
                    $results[$title] = array(
                        'title' => $title,
                        'value' => $migx->value,
                        'type' => 'tv',
                        'resources' => array_merge($results[$title]['resources'], $ids)
                    );
                }
            }
        }
Игорь
02 июня 2020, 19:40
modx.pro
737
0

Minishop2 не любит таблицы?

Здравствуйте.
Натягиваю верстку на MODX. Есть таблица Wishlist — таблица это конечно плохо, но мне какая разница, если сказали сделать так как в верстке.
Сделал все по аналогии с предыдущими проектами, но только с таблицей, примерно так:
Игорь
15 мая 2020, 12:53
modx.pro
464
0

Minishop2 минимальная сумма для способа доставки

Здравствуйте.
Нужно что бы один из способов доставки был доступен только при достижении в корзине определенной суммы.
Прочитал, что подобное можно сделать с помощью подключения собственного класса доставки docs.modx.pro/komponentyi/minishop2/razrabotka/sluzhbyi/podklyuchenie#Пример-подключения-собственного-класса-доставки.
Класс подключил, но не знаю как переделать саму функцию под мою потребность (что бы способ доставки отображался только когда сумма в корзине больше минимальной).
<?php
if(!class_exists('msDeliveryInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php';
}

class msDeliveryHandlerMsk extends msDeliveryHandler implements msDeliveryInterface{

    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {

        $freedeliverysumm = $this->modx->getOption('deliverys');
//print_r ($freedeliverysumm);
        $cart = $order->ms2->cart->status();
        $cart_cost = $cart['total_cost'];
        if($cart_cost > $freedeliverysumm){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}
Игорь
30 апреля 2020, 17:14
modx.pro
495
0

TVTable как получать значения из ячеек таблицы

Здравствуйте.
Первый раз столкнулся с компонентом TVTable и не могу ничего понять пока. (
В общем ситуация такая:
1. Есть дополительное поле с таблицей TVTable, называется «Prices» — в нем некая таблица (первая колонка — размеры, остальные — различные параметры).
2. Есть еще одно дополнительное поле Авто-метка «Sizes» — в нем просто список размеров.
3. На странице шаблона выводится список из поля «Sizes»:
{if $_modx->resource.Sizes?}
<div class="form_size">
<p class="h4">Выберите размер</p>
<div class="d-flex flex-wrap ">
{set $sizes = $_modx->resource.Sizes | split}
{foreach $sizes as $size first=$first}
<div class="form___size_item">
<span>{$size}</span>
<p>ВОТ СЮДА НУЖНО ВСТАВИТЬ ЗНАЧЕНИЕ ИЗ ЯЧЕЙКИ ТАБЛИЦЫ</p>
</div>
{/foreach}
</div>
</div>
{/if}
Мне нужно в этот цикл подставить соответствующие значения из таблицы, т.е. сравнивать размеры по названию и, при совпадении, подставлять параметр из определенной колонки таблицы.
Как это можно реализовать?
Игорь
20 марта 2020, 11:32
modx.pro
1
919
0

Не получается сделать запрос с условием OR для pdoResources

Здравствуйте/
Пытаюсь сделать фильтр из нескольких блоков, в одном из которых есть группа чекбоксов с возможностью множественного выбора. Код сниппета:
<?php
//Filter Fields Settings
$filter = array();

$tags = $_GET['tags'];
if($tags){
    $idx = 0;
    foreach ($tags as $tag){ 
        if($idx == 0){$idx= 1;$comma='';}else{$comma=' OR ';}
         $filter_tags .= $comma."sposob_filtr LIKE '%".$tag."%'";
    }
    $filter[] = $filter_tags;
}

if($_GET['mysum']) {
	$filter[] = 'min_sum_filtr<='.$_GET['mysum'];
	$filter[] = 'max_sum_filtr>='.$_GET['mysum'];
}

//End Settings
	print_r($filter);
//Sort
if($_GET['sortby']) {
	$sortby = $_GET['sortby'];
} else {
	$sortby = 'pagetitle';
}
if($_GET['sortdir']) {
	$sortdir = $_GET['sortdir'];
} else {
	$sortdir = 'asc';
}
//End Sort

//Offset
$offset = 0;
if($_GET['offset']){
	$offset = $_GET['offset'];
}

if($filter) {
	$where = $modx->toJSON(array($filter));
} else {
	$where = '';
}

$params_count = array(
	'parents' => $parents,
	'limit' => 0,
	'tpl' => '@INLINE ,',
	'select' => 'id',
	'includeTVs' => $fields,
	'showHidden' => '1',
	'where' => $where
	);

$count = $modx->runSnippet('pdoResources',$params_count);
$count = count(explode(',',$count))-1;
$modx->setPlaceholder('count',$count);

$params = array(
	'parents' => $parents,
	'limit' => $limit,
	'offset' => $offset,
	'tpl' => $tpl,
	'select' => 'id,pagetitle,introtext,content',
	'includeTVs' => $fields,
	'showHidden' => '1',
	'sortby' => $sortby,
	'sortdir' => $sortdir,
	'where' => $where
	);

$more = $count - $offset - $limit;
$lim = $more > $limit ? $limit : $more;

$button = '';
if($more > 0){
	$button = '<div class="ajax-filter-count" data-count="'.$count.'"><a href="#" class="ajax-more">Загрузить еще '.$lim.' из '.$more.'</a></div>';
}

return $modx->runSnippet('pdoResources',$params).$button;
Проблема в том, что если выбрать несколько чекбоксов и еще другое условие, то это второе условие не срабатывает (насколько я понял, это происходит из-за того, что OR в чекбоксах «перекрывает» новое условие). Переменная $filter, которая потом должна преобразовываться в json строку для where выглядит так:
Array ( [0] => sposob_filtr LIKE '%cash%' OR sposob_filtr LIKE '%visa%' [1] => min_sum_filtr<=100 [2] => max_sum_filtr>=100 )
Логично предположить, что группу условий с OR нужно взять в скобочки, но у меня не получается…
Что делать? (
Игорь
29 января 2020, 16:27
modx.pro
394
0

Непонятные письма

Здравствуйте!
Ситуация такая: Есть форма на Formit + AjaxForm «Обратный звонок», установлена в футере сайта как всплывающее окно. В этой форме всего 2 поля: Имя и Телефон (с использованием маски) + стоит поле антиспама (раньше и каптча стояла)…
Проблема в следующем: примерно раз в сутки приходят сразу несколько писем (5-10 с одним и тем же временем отправки): Имя — admin, Телефон — admin, Страница отправления — 404.html…
На спам не особо похоже (да и когда каптча стояла тоже такое было)… Но что тогда? И как это убрать?
Мне почему-то кажется что это какой-то плагин или снипет «чудит» (не уверен конечно) — накапливает, а потом отправляет письма при заходе на несуществующие страницы… но, опять же, откуда он мог взяться и почему использует чанк письма об обратном звонке Formit?.. блин, уже всю голову сломал ((
P.S. На событие OnPageNotFound подвешены 2 стандартных плагина: StercSeo и Tickets
Игорь
03 октября 2019, 20:06
modx.pro
481
0

Как подключить reCaptchaV3 к Tickets ?

Здравствуйте!
Сделал форму отзывов на компоненте Tickets (с костылем, чтобы без авторизации можно было тикеты создавать), теперь опасаюсь что будет спам приходить. На Modstore есть компонент reCaptchaV3 modstore.pro/packages/utilities/recaptchav3, но там объясняется только как его к Formit привязать.
Можно ли что-нибудь подобное сделать и для Tickets?
Игорь
27 августа 2019, 13:28
modx.pro
1 054
0

Formit добавить класс при ошибки при валидации для радиокнопок

Здравствуйте!
Есть некая форма с группами радиокнопок. Каждая группа кнопок обязательна для заполнения.
<form action="" method="post" id="anketa4" class="ajax_form">
	<div class="form-group">
		<fieldset>
			<legend>Вопрос-1 [[!+fi.error.question1]]</legend>
			<label for="q4-1-0"><input id="q4-1-0" type="hidden" name="question1[]" value=""  class="form-control" /></li>
			<label for="q4-1-1"><input type="radio" id="q4-1-1" name="question1[]" value="Ответ1" [[!+fi.question1:FormItIsChecked=`Ответ1`]] class="form-control"><span>Ответ1</span></label>
			<label for="q4-1-2"><input type="radio" id="q4-1-2" name="question1[]" value="Ответ2" [[!+fi.question1:FormItIsChecked=`Ответ2`]] class="form-control"><span>Ответ2</span></label>
			<label for="q4-1-3"><input type="radio" id="q4-1-3" name="question1[]" value="Ответ3" [[!+fi.question1:FormItIsChecked=`Ответ3`]] class="form-control"><span>Ответ3</span></label>
		</fieldset>
	</div>
	<div class="form-group">
		<fieldset>
			<legend>Вопрос-2 [[!+fi.error.question2]]</legend>
			<label for="q4-2-0"><input id="q4-2-0" type="hidden" name="question2[]" value=""  class="form-control" /></li>
			<label for="q4-2-1"><input type="radio" id="q4-2-1" name="question2[]" value="Ответ1" [[!+fi.question1:FormItIsChecked=`Ответ1`]] class="form-control"><span>Ответ1</span></label>
			<label for="q4-2-2"><input type="radio" id="q4-2-2" name="question2[]" value="Ответ2" [[!+fi.question1:FormItIsChecked=`Ответ2`]] class="form-control"><span>Ответ2</span></label>
		</fieldset>
	</div>
	<div class="form-group">
		<div class="controls">
			<button type="submit" class="submit-btn" value="Submit">Отправить</button>
		</div>
	</div>
</form>
Вызов формы:
[[!AjaxForm? 
  &form=`AjaxForm.anketa4` 
  &snippet=`FormIt` 
  &hooks=`FormItSaveForm,email`
  &emailTo=`[[++myemail]]`
  &emailFrom=`noreply@[[!getDomainName?&url=`[[++site_url]]`]]`
  &emailFromName=`[[++site_name]]`
  &emailSubject=`Анкета с сайта [[++site_name]]`
  &emailTpl=`tpl.email-anketa4`
 &validate=`tel:required,question1:required,question2:required`
  &validationErrorMessage=`Вы должны ответить на все вопросы в анкете!`
  &successMessage=`Анкета успешно отправлена`
 ]]
Formit позволяет делать валидацию радиокнопок, но почему-то не добавляет никаких классов к незаполненым группам, что бы можно было их как-то «подсветить» через css… Что делать?!
Игорь
01 июня 2019, 18:10
modx.pro
697
0

Minishop2 - как распечатать заказ из админки?

Здравствуйте!
Есть необходимость распечатывать что-то типа товарного чека для покупателя, т.е. бумажку, которая будет отдаваться вместе с заказом. В самом Minishop2 такого функционала не нашел, к сожалению.
Нашел только платное дополнение orderPrint за 1490 рублей. Но хочется что-то попроще и подешевле (а лучше бесплатно). Может я просто плохо ищу? ;)
Игорь
09 января 2019, 15:42
modx.pro
903
0