Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 126 комментариев

Андрей Шевяков
Андрей Шевяков
Разобрался, благодаря вам!
Эти данные надо вынимать из msOrderAddress, а не из msOrder.

Получается надо сделать так:

1) Добавляем выборку поля Address.properties



2) Добавляем рендер



<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Address.properties'])) {
    $properties = json_decode($row['Address.properties'], true);
    $utm = $properties['utm_campaign'] ?: '';
}

return $utm;

3) Добавляем поле



Теперь выводится поле utm_campaign в заказах. Изначально я пытался вывести utm_source, оно делается аналогично.

Еще раз убедился на практике в большом потенциале дополнения msStatOrders. Благодарю автора!
Андрей Шевяков
Андрей Шевяков
Не заработало, выводит "{" и ошибки в логах вида:
PHP warning: Illegal string offset 'utm_source'
Скрин

Рендер
<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $utm = $row['Order.properties']['utm_source']; // тут берете нужное поле из массива properties
}

return $utm;

В ТП к сожалению не могу написать, прошло больше года после покупки дополнения.
Володя
Володя
Доброе утро.

Добавьте выборку поля Order.properties



добавьте рендер



<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $utm = $row['Order.properties']['utm']; // тут берете нужное поле из массива properties
}

return $utm;

добавьте поле



Должно работать, если не получится — пишите в ТП.
Андрей Шевяков
Андрей Шевяков
Добрый день!
На сайте используем дополнение
utmMark, оно пишет данные utm меток в формате json в поле properties заказа.

Помогите пожалуйста, как вывести поле properties в читаемом виде?

По умолчанию выводит [object Object]
Leo
Leo
Обновился до MODX 2.8.6 и наступили проблемы с сохранением родителя с вложенными ресурсами, без вложений сохраняет ок. Когда включаешь php 7.4 все сохраняет. В итоге проблемы с сохранением вызывал плагин autoredirector — после удаления плагина сохранение заработало. Есть проблемы с работой msGallery если попытаться обновить превьюхи под php 7.4 — идет бесконечная загрузка, с php 8 и выше все ок.
Ivan K.
Ivan K.
Сегодня тоже настраивал поиск по артикулу.
Нужно было указать: Добавлять все слова в индекс mse2_index_all — да (в настройках)
Нажать обновить индекс.

При отладке помогает, посмотреть, что в базе в таблице mse2_words.
У меня в начале не попадал артикул в индекс и по этому не искалось при &onlyIndex=`true`
Константин Ильин
Константин Ильин
База верстки. На одно странице не должно быть 2 или более элемента с одинаковым id.
У вас получается #form-fields и #form-thanks 2е штуки т.к. две формы. Надо перейти на классы и работать с конкретной формой, а не глобально.

<form action="[[~[[*id]]]]" method="post" id="callbackform" class="ajax_form">
			<div class="form-fields">
				<input type="text" id="fr_name" name="name" value="[[+fi.name]]">
				<input type="text" id="fr_phone" name="phone" class="m-phones" value="[[+fi.phone]]" required="">
				<input type="submit" class="btn" data-default="Заказать звонок" value="Заказать звонок">
			</div>
			<div class="form-thanks" style="display: none;">
				<span class="title">Спасибо за ваше обращение!</span>
				<p>Мы свяжемся с Вами в ближайшее время.</p>
			</div>
		</form>

js вроде так, с jquery давно не работал
if (form.attr('id') == 'callbackform') {
    $(form).find(".form-fields").fadeOut();
    $(form).find(".form-thanks").fadeIn();
}
Роман
Роман
Всем привет. Подскажите, как обойти?

На странице есть две формы, в каждой форме есть два блока, по логике, после отправки формы один блок срывается, а другой блок открывается.

Но т.к. на странице две формы срабатывает код у первой по коду на самой странице

[[!AjaxForm? 
	&snippet=`FormIt` 
	&emailTpl=`tplMail`
	&hooks=`email`
	&validate=`phone:required, fastname:blank`
	&frontend_css=``
	&emailSubject=`Обратная связь с сайта [[++site_name]]`
	&emailFromName=`[[++site_name]]`
	&emailTo=`{1 | resource: 'tplMail'}`
	&emailFrom=`[[++emailsender]]`
	&validationErrorMessage=`Пожалуйста, исправьте ошибки!`
	&successMessage=`Ваше сообщение успешно отправлено`
	&form=`@CODE:
		<form action="[[~[[*id]]]]" method="post" id="callbackform" class="ajax_form">
			<div id="form-fields">
				<input type="text" id="fr_name" name="name" value="[[+fi.name]]">
				<input type="text" id="fr_phone" name="phone" class="m-phones" value="[[+fi.phone]]" required="">
				<input type="submit" class="btn" data-default="Заказать звонок" value="Заказать звонок">
			</div>
			<div id="form-thanks" style="display: none;">
				<span class="title">Спасибо за ваше обращение!</span>
				<p>Мы свяжемся с Вами в ближайшее время.</p>
			</div>
		</form>
	` 
]]

// в второй формы 
<form action="[[~[[*id]]]]" method="post" id="consultationform" class="ajax_form">

// сам JS, пытался разбить на ID формы, но не срабатывает
<script>
$(document).ready(function() {
    AjaxForm.Message.success = function() {};
});
$(document).on('af_complete', function(event, response) {
  var form = response.form;
  if (form.attr('id') == 'callbackform') {
		$("#form-fields").fadeOut();
		$("#form-thanks").fadeIn();
		e.preventDefault();
  }
  if (form.attr('id') == 'consultationform') {
		$("#form-fields").fadeOut();
		$("#form-thanks").fadeIn();
		e.preventDefault();
  }
});
</script>
Алексей Смирнов
Алексей Смирнов
нужно верно передавать параметры и возможно заработает корректно.
НО. что мешает вам в одном плагине через необходимые условия разрулить применение кода в событиях?
Тем более раз вы выбрали это событие, то вы хотите просто цену отображения же менять? так? или цену добавления в корзину? потому что если последнее, то нужно другое событие.
epic
epic
твой вариант пробовал и так и так не помогло.
вдруг кому поможет сработал такой:
{foreach $options as $option}
    {if '' in $option.value}
    
    {else}
        <li>
            <label ><span>{$option.caption}:</span></label>
            <p>
                {if $option.value is array}
                    {$option.value | join : ', '}
                {else}
                    {$option.value}
                {/if}
                {$option.measure_unit}
            </p>
        </li>
    {/if}
{/foreach}