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

Баха Волков
18 декабря 2021, 19:57
+2
@Александр Мельник Это всё хорошо, но нужно отставить панику!

Сегодня обнаружил, что свойство form у response перестало указывать на конкретную форму..
Это временный глюк? Или так всегда и было и это меня глючит?
Получается если я нажму обновить ajaxform на всех своих сайтах, у меня придет в нерабочее состояние отправка целей в метрику, закрытие модальных форм.
А точно перестало? Александр, если бы вы пользовались github-ом, то могли бы удостовериться, что ничего не изменилось.

AjaxFrom, насколько я знаю, использует для отправки формы jquery.form, а он всегда возвращал 4-ым параметром jQuery объект.

Пытаюсь понять почему в более старых версиях AjaxForm я мог внутри события af_complete получить форму как const form = response.form и мог например сразу получить у нее data атрибуты. А теперь нет.
Вы путаете jQuery объект с Element, это проблема разработчиков которые изучали js через jQuery

response.form // jQuery object

response.form[0] // Element/HTMLElement
response.form.0 // Element/HTMLElement
response.form.eq(0) // Element/HTMLElement
response.form.get(0) // Element/HTMLElement

Как получить дата атрибуты формы с помощью jQuery?

const data = response.form.data()
console.log(data) // { attr: "value", foo: "bar" }

const foo = response.form.data('foo')
console.log(foo) // bar

Как получить дата атрибуты формы без него?

const form = response.form[0]
const data = form.dataset
console.log(data) // { attr: "value", foo: "bar" }

const foo = form.dataset.foo
console.log(foo) // bar

const foo = form.getAttribute('data-foo')
console.log(foo) // bar

const foo = form.attributes.getNamedItem('data-foo').value
console.log(foo) // bar
Сергей Шлоков
18 декабря 2021, 12:43
+1
Спасибо, что тестируете!
vrm13
18 декабря 2021, 12:28
0
тот же вопрос, крутил и так и этак, что-то не заводится. Например msOneClick с yandexdiskuploader получилось, там нужно было подключить css и js от yandexdiskuploader непосредственно в модальном окне и всё заработало, здесь тоже подключаю скрипты и стили, но всё равно дропзона не активна, может есть у кого решение?
Futuris
18 декабря 2021, 09:40
+2
Спасибо за вашу работу! Сайты на трешке, которые без e-commerce, фактически заработали. Отправил на чашечку кофе))
Виталий
17 декабря 2021, 17:14
0
Подскажите, как сделать чтобы только у определенных групп пользователей было такое ограничение по сумме корзины?
<?php
class myOrderHandler extends msOrderHandler
{
	public function submit($data = array())
	{
		$min_price_order = $this->modx->getOption('ms2_minimum_price_order');
		$cart_status = $this->ms2->cart->status();
		$currency = $this->modx->lexicon('ms2_frontend_currency');

		$userid = $modx->user->get('id');
		$user = $modx->getObject('modUser',array('active' => true, 'id' => $userid ));

	
		if($user->isMember(array('Administrator','Manager')) && $cart_status['total_cost'] < $min_price_order)
		{

			return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
		
		}
		
		return parent::submit($data);
	}
	
}
Giant Dad
17 декабря 2021, 14:30
0
Спасибо тебе, добрый человек!
Тодор
17 декабря 2021, 14:25
0
foreach ($gallery as $rank => $v) {
    $sql = "UPDATE {$modx->getTableName('msProductFile')} SET rank=".$rank." WHERE product_id=".$resource_id." AND file = '{$v}'";
    $modx->exec($sql);
}
Тодор
17 декабря 2021, 14:16
+3
ALTER TABLE `modx_ms2_orders` AUTO_INCREMENT = 100000
Роман
16 декабря 2021, 22:37
0
Исчезли вкладки категорий дополнительных TV
полей
Роман
16 декабря 2021, 21:54
0
Да, не помогло...(((
Александр Мельник
16 декабря 2021, 21:40
0
А я не вижу по скрину, что именно поломалось то? Ну разве что паддинги кое-где пропали.
Александр Мельник
16 декабря 2021, 21:34
+3
ведь как ни крути, софт который мы устанавливаем с modx.pro разрабатывается и поддерживается людьми энтузиастами, после основной работы. Понятно что ему не могут уделять столько времени чтобы всесторонне тестировать и доводить до идеала. Я это понимаю.
Александр Мельник
16 декабря 2021, 21:32
0
нет. Очень много раз наступал на грабли, когда обновления компонентов просто убивали сайт. Одно время перед каждым обновлением делал резервную копию. Но опять же, когда у тебя 1-2 сайта, это ничего. А когда их около полусотни, и у каждого делать резервную копию чтобы обновить minishop или ajaxform — нужно неделю только делать копии. В итоге пришел пусть и к «неправильному» но решению — сделал сайта на актуальных на тот момент пакетах, довел его до работы без ошибок и нефиг нажимать на кнопкочки — обновить) Возможно только поэтому у меня некоторые сайты работают 8 лет.
Сергей Шлоков
16 декабря 2021, 21:29
+2
Спасибо за помощь в тестировании!
Дело в том, что tplOuter также является и шаблоном для tplInner, если последний не указан. А по умолчанию он пустой. Поэтому так и получается.

Вот тут можно подробнее почитать про параметры сниппета pdoMenu.

Артур Шевченко
16 декабря 2021, 21:28
0
А ты обновляешь компоненты автоматически?
Александр Мельник
16 декабря 2021, 21:26
0
на одном сайте да. Когда их 40-50 штук чуть сложнее) Но во первых это нужно сначала как-то заметить. Ведь сама форма отправляться будет, а заметят это скорее всего, когда яндекс метрика перестанет регистрировать какие либо срабатывания целей.
Артур Шевченко
16 декабря 2021, 21:22
0
Согласен, нехорошо получилось. Но если и сломается, починить недолго)))
Александр Мельник
16 декабря 2021, 21:14
0
Получается что была сломана обратная совместимость и каждый кто обновит ajaxform может сломать свой сайт. У меня куча сайтов, где форма получается как
const form = response.form
затем у формы считываются дата атрибуты и используются как идентификаторы целей в яндекс метрике.
да и на странице документации так написано
docs.modx.pro/komponentyi/ajaxform
$(document).on('af_complete', function(event, response) {
    var form = response.form;
    if (form.attr('id') == 'значение id формы') {
       window.location.href = "[[~id страницы]]"
    }
});
В очередной раз убеждаюсь, что я делаю правильно, что никогда не обновляю пакеты. Сделал сайт, он работает хорошо и нечего судьбу испытывать.
Артур Шевченко
16 декабря 2021, 21:06
0
По поводу price, возможно компонент форматирует число согласно настройкам minishop2, тогда в числе 1234 появится пробел 1 234. А categoryId может быть пустым и это вызывает ошибку. В общем посмотрите что в файлах yml, а потом посмотрите какие системные настройки можно подкрутить.
Артур Шевченко
16 декабря 2021, 21:02
0
Если ты хотел опровержения, то его не будет. Получить форму можно только как
const form = response.form[0];