29 июня 2026, 21:27 Большое спасибо за подсказку, но проблема решилась переустановкой. Вопросы / Зависает корзина минишоп2 2 0
05 мая 2026, 22:34 Спасибо за совет, но увы, все возможные варианты обновления — не помогают, в том числе пробовал через режим разработчика (ф12), в таком режиме, можно правой кнопкой нажать на иконку обновления (круг со стрелкой), и прям там можно выбрать режим обновления страницы, но я так понимаю ктрл+ф5, ктрл+с, ктрл+шифт+с — горячие клавиши этих режимов. Вопросы / Help need! Наглухо закэшировался файл! 4 0
24 февраля 2026, 18:29 это сделал ИИ. Я взял код из файла /core/components/minishop2/model/minishop2/minishop2.class.php я скопировал этот метод function getReceiverId(), скинул ИИ и описал свои хотелки. ИИ сгенерировал новый код, я его вставил обратно в файл /core/components/minishop2/model/minishop2/minishop2.class.php и все прекрасно заработало, но когда я расширяю хендлер, у меня перестает работать. Поправил код по вашему мануалу — все работает, спасибо большое! Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
22 февраля 2026, 16:46 ух, спасибо за разъяснения. Т.е. фактически понятие «регистрация службы» это просто изменение системных настроек? с разным расположением файла в зависимости от версии, я уже споткнулся на этом моменте когда подключал свою службу доставки, кстати, в мануале, как раз таки не правильно указано расположения файла (по всей видимости для старой версии) Я разобрался почему у меня не подключался мой класс, в системных настройках в значении переменной ms2_order_handler_class, у меня было указано «my_OrderHandler » с пробелом на конце, очень было обидно осознать это, когда я два дня пытался разобраться, чой-то мой класс не подключается. Теперь что касается, кастомного класса. Или, наверное даже больше кастомного метода. Я начал с того что поменял исходники, и собственно, все у меня работало так как надо. Телефон приводился к нужному формату, вместо емейла записывался номер телефона, и вообще жизнь прекрасна и удивительна, но! Когда, все же заработал мой класс, и я сделал, как Вы советовали: я скопировал метод submit, в нем изменил $user_id = $this->ms2->getCustomerId() на $user_id = $this->getReceiverId(); и новый метод, поменял у него название на getReceiverId()… тут все работать перестало. По сути в исходниках я изменял только метод getCustomerId И был совершенно уверен, что тут у меня не возникнет ни каких проблем. Собственно в связи с этим вопрос. То был файл в ядре и возможно там различные объекты и прочее достаются иначе, чем это нужно делать через класс, как это есть сейчас у меня? Помогите, я снова в тупике. Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
20 февраля 2026, 19:28 В общем убил целый день, но… так у меня ничего и не вышло. не могу зарегистрировать класс. содержание самого файла my_msorderhandler.class.php: <?php if (!class_exists('msOrderHandler')) { // проверяем интерфейс заказа require_once MODX_CORE_PATH . 'components/minishop2/handlers/msorderhandler.class.php'; } class my_OrderHandler extends msOrderHandler { // implements msOrderInterface не нужен public function submit($data = []) { $response = $this->ms2->invokeEvent('msOnSubmitOrder', [ 'data' => $data, 'order' => $this, ]); if (!$response['success']) { return $this->error($response['message']); } if (!empty($response['data']['data'])) { $this->set($response['data']['data']); } $response = $this->getDeliveryRequiresFields(); if ($this->ms2->config['json_response']) { $response = json_decode($response, true); } if (!$response['success']) { return $this->error($response['message']); } $requires = $response['data']['requires']; $errors = []; foreach ($requires as $v) { if (!empty($v) && empty($this->order[$v])) { $errors[] = $v; } } if (!empty($errors)) { return $this->error('ms2_order_err_requires', $errors); } $user_id = $this->getReceiverId(); if (empty($user_id) || !is_int($user_id)) { return $this->error(is_string($user_id) ? $user_id : 'ms2_err_user_nf'); } $cart_status = $this->ms2->cart->status(); if (empty($cart_status['total_count'])) { return $this->error('ms2_order_err_empty'); } $delivery_cost = $this->getCost(false, true); $cart_cost = $this->getCost(true, true) - $delivery_cost; $num = $this->getNewOrderNum(); /** @var msOrder $msOrder */ $msOrder = $this->storageHandler->getForSubmit( compact('user_id', 'num', 'cart_cost', 'cart_status', 'delivery_cost') ); $response = $this->ms2->invokeEvent('msOnBeforeCreateOrder', [ 'msOrder' => $msOrder, 'order' => $this, ]); if (!$response['success']) { return $this->error($response['message']); } if ($msOrder->save()) { $response = $this->ms2->invokeEvent('msOnCreateOrder', [ 'msOrder' => $msOrder, 'order' => $this, ]); if (!$response['success']) { return $this->error($response['message']); } if ($this->storage === 'session') { $this->ms2->cart->clean(); $this->clean(); } if (empty($_SESSION['minishop2']['orders'])) { $_SESSION['minishop2']['orders'] = []; } $_SESSION['minishop2']['orders'][] = $msOrder->get('id'); // Trying to set status "new" $status_new = $this->modx->getOption('ms2_status_new', null, 1); $response = $this->ms2->changeOrderStatus($msOrder->get('id'), $status_new); if ($response !== true) { return $this->error($response, ['msorder' => $msOrder->get('id')]); } // Reload order object after changes in changeOrderStatus method /** @var msOrder $msOrder */ $msOrder = $this->modx->getObject('msOrder', ['id' => $msOrder->get('id')]); /** @var msPayment $payment */ $payment = $this->modx->getObject( 'msPayment', ['id' => $msOrder->get('payment'), 'active' => 1] ); if ($payment) { $response = $payment->send($msOrder); if ($this->config['json_response']) { @session_write_close(); echo is_array($response) ? json_encode($response) : $response; die(); } if (!empty($response['data']['redirect'])) { $this->modx->sendRedirect($response['data']['redirect']); } if (!empty($response['data']['msorder'])) { $redirect = $this->modx->context->makeUrl( $this->modx->resource->id, ['msorder' => $response['data']['msorder']] ); $this->modx->sendRedirect($redirect); } $this->modx->sendRedirect($this->modx->context->makeUrl($this->modx->resource->id)); } else { if ($this->config['json_response']) { return $this->success('', ['msorder' => $msOrder->get('id')]); } $redirect = $this->modx->context->makeUrl( $this->modx->resource->id, ['msorder' => $msOrder->get('id')] ); $this->modx->sendRedirect($redirect); } return $this->success(); } return $this->error(); } public function getCustomerId() { error_log("🔥🔥🔥 getCustomerId() НАЧАЛО 🔥🔥🔥"); $customer = null; $response = $this->invokeEvent('msOnBeforeGetOrderCustomer', [ 'order' => $this->order, 'customer' => $customer, ]); if (!$response['success']) { return $response['message']; } if (!$customer) { $data = $this->order->get(); $email = $data['email'] ?? ''; $receiver = $data['receiver'] ?? ''; $phone = $data['phone'] ?? ''; // Функция для приведения телефона к международному формату +КодСтраныНомер $formatPhone = function($phone) { if (empty($phone)) return ''; // Удаляем все нецифровые символы $phone = preg_replace('/[^0-9]/', '', $phone); // Определяем код страны по умолчанию (Россия) $defaultCountryCode = '7'; // Если номер начинается с 8 (Россия) if (substr($phone, 0, 1) == '8') { $phone = $defaultCountryCode . substr($phone, 1); } // Если номер без кода (10 цифр) - добавляем код по умолчанию elseif (strlen($phone) == 10) { $phone = $defaultCountryCode . $phone; } // Если номер начинается с 7 (уже есть код России) elseif (substr($phone, 0, 1) == '7' && strlen($phone) == 11) { // Оставляем как есть } // Если номер с другим кодом страны elseif (strlen($phone) > 11 || (strlen($phone) == 11 && substr($phone, 0, 1) != '7')) { // Оставляем как есть (уже содержит код страны) } // Добавляем знак + в начало return '+' . $phone; }; // Приводим телефон к единому формату $formattedPhone = $formatPhone($phone); // Обновляем телефон в данных заказа if ($formattedPhone !== $phone) { $data['phone'] = $formattedPhone; $this->order->set($data); $phone = $formattedPhone; } // Формируем receiver, если он пустой if (empty($receiver)) { if (!empty($phone)) { $receiver = preg_replace('/[^0-9]/', '', $phone); } elseif (!empty($email)) { $receiver = substr($email, 0, strpos($email, '@')); } else { $receiver = uniqid('user_', false); } } // Формируем email, если он пустой if (empty($email)) { if (!empty($phone)) { $cleanPhone = preg_replace('/[^0-9]/', '', $phone); $email = 'user_' . $cleanPhone . '@' . $this->modx->getOption('http_host'); } else { $email = $receiver . '@' . $this->modx->getOption('http_host'); } } // Если пользователь авторизован if ($this->modx->user->isAuthenticated()) { $profile = $this->modx->user->Profile; if (!$profile->get('email')) { $profile->set('email', $email); } if (!empty($phone) && $profile->get('mobilephone') != $phone) { $profile->set('mobilephone', $phone); } if (!empty($receiver) && $profile->get('fullname') != $receiver) { $profile->set('fullname', $receiver); } $profile->save(); $customer = $this->modx->user; } else { // Поиск существующего пользователя $c = $this->modx->newQuery('modUser'); $c->leftJoin('modUserProfile', 'Profile'); $filter = []; if (!empty($phone)) { $filter['modUser.username'] = $phone; $filter['OR:Profile.mobilephone:='] = $phone; } if (!empty($email)) { $filter['OR:Profile.email:='] = $email; } $c->where($filter); $c->select('modUser.id'); // Пытаемся найти пользователя if (!$customer = $this->modx->getObject('modUser', $c)) { // Создаем нового пользователя $userData = [ 'username' => !empty($phone) ? $phone : $email, 'password' => md5(rand()), 'active' => 1 ]; $customer = $this->modx->newObject('modUser', $userData); $profileData = [ 'fullname' => $receiver, ]; if (!empty($email)) { $profileData['email'] = $email; } if (!empty($phone)) { $profileData['mobilephone'] = $phone; } $profile = $this->modx->newObject('modUserProfile', $profileData); $customer->addOne($profile); // Добавляем настройку языка $setting = $this->modx->newObject('modUserSetting'); $setting->fromArray([ 'key' => 'cultureKey', 'value' => $this->modx->getOption('cultureKey', null, 'en', true), ], '', true); $customer->addMany($setting); if (!$customer->save()) { $customer = null; } elseif ($groups = $this->modx->getOption('ms2_order_user_groups', null, false)) { $groupRoles = array_map('trim', explode(',', $groups)); foreach ($groupRoles as $groupRole) { $groupRole = explode(':', $groupRole); $roleId = null; if (count($groupRole) > 1 && !empty($groupRole[1])) { $roleId = is_numeric($groupRole[1]) ? (int)$groupRole[1] : $groupRole[1]; } $customer->joinGroup($groupRole[0], $roleId); } } } else { // Пользователь найден - обновляем данные $profile = $customer->getOne('Profile'); if ($profile) { $changed = false; if (!empty($phone) && $profile->get('mobilephone') != $phone) { $profile->set('mobilephone', $phone); $changed = true; } if (!empty($email) && $profile->get('email') != $email) { $profile->set('email', $email); $changed = true; } if (!empty($receiver) && $profile->get('fullname') != $receiver) { $profile->set('fullname', $receiver); $changed = true; } if ($changed) { $profile->save(); } } } } } $response = $this->invokeEvent('msOnGetOrderCustomer', [ 'order' => $this->order, 'customer' => $customer, ]); if (!$response['success']) { return $response['message']; } return $customer instanceof modUser ? $customer->get('id') : 0; } } согласно священописанию в консоле делаю так: <?php if ($miniShop2 = $modx->getService('miniShop2')) { $miniShop2->addService('order', 'my_OrderHandler', '{core_path}components/minishop2/custom/order/my_msorderhandler.class.php'); }Пробую, и ничего не меняется. На пару с ИИ добрел до системной настройки, с ключем ms2_order_handler_class и там указал свой класс. Перестало работать вообще. Т.е. тыкаю на кнопку «сделать заказ» на самом сайте и ничего не происходит. Из чего делаю вывод, что класс мой не зарегистрировался. Дальше меняю настройку ms2_services. она у меня выглядела так: {«cart»:[],«order»:[«my_OrderHandler»],«payment»:[],«delivery»:{«mydelivery»:"{core_path}components\/minishop2\/custom\/delivery\/my_msdeliveryhandler.class.php"}} т.к. я уже ранее подрубал собственную службу доставки, и она вроде как исправно работает, делаю по образу и подобию с order, хотя ИИ визжит, что так делать нельзя, и у этой настройки должно быть только название класса. В логах живет вот такая ошибка: (ERROR @ /home/c/cz42644/test-iflower/public_html/core/components/minishop2/model/minishop2/minishop2.class.php: 484) [miniShop2] Could not load custom class at "/home/c/cz42644/test-iflower/public_html/my_OrderHandler"Т.е. я так понимаю, он ищет файл с моей службой почему-то не так где надо, по сути в корне. И как ему указать, где искать — не ведаю. Вообщем, итог такой, что либо ничего не меняется, либо не работает вовсе. Что и где я делаю не так? Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
20 февраля 2026, 10:59 и вот еще какой вопрос… в документации прописано вот так: if (!class_exists('msDeliveryInterface')) { require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php'; } class msDeliveryHandlerMsk extends msDeliveryHandler implements msDeliveryInterface {пример подключения собственного класса доставки. ИИ говорит мне, что интерфейс не нужно подключать для msOrderHandler т.е. этот кусок получается лишний в моем случае? if (!class_exists('msDeliveryInterface')) { require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php'; } Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
20 февраля 2026, 09:44 Спасибо! Но есть ряд вопросов, в рамках того, что я сильно не сведущ… я уже как-то подключал свой обработчик доставки. имеет ли значение в какой папке будет лежать новый файл my_msOrderHandler метод это когда начинается с «public function»? Т.е. посути в новом файле должно остаться метод submit с теми изменениями что вы написали и мой метод, который я постил в предыдущем комментарии? Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
18 февраля 2026, 21:55 minishop2-4.4.2-pl Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
18 февраля 2026, 18:50 Во, вот так хочу, что бы было public function getCustomerId() { $customer = null; $response = $this->invokeEvent('msOnBeforeGetOrderCustomer', [ 'order' => $this->order, 'customer' => $customer, ]); if (!$response['success']) { return $response['message']; } if (!$customer) { $data = $this->order->get(); $email = $data['email'] ?? ''; $receiver = $data['receiver'] ?? ''; $phone = $data['phone'] ?? ''; // Функция для приведения телефона к международному формату +КодСтраныНомер $formatPhone = function($phone) { if (empty($phone)) return ''; // Удаляем все нецифровые символы $phone = preg_replace('/[^0-9]/', '', $phone); // Определяем код страны по умолчанию (Россия) $defaultCountryCode = '7'; // Если номер начинается с 8 (Россия) if (substr($phone, 0, 1) == '8') { $phone = $defaultCountryCode . substr($phone, 1); } // Если номер без кода (10 цифр) - добавляем код по умолчанию elseif (strlen($phone) == 10) { $phone = $defaultCountryCode . $phone; } // Если номер начинается с 7 (уже есть код России) elseif (substr($phone, 0, 1) == '7' && strlen($phone) == 11) { // Оставляем как есть } // Если номер с другим кодом страны elseif (strlen($phone) > 11 || (strlen($phone) == 11 && substr($phone, 0, 1) != '7')) { // Оставляем как есть (уже содержит код страны) } // Добавляем знак + в начало return '+' . $phone; }; // Приводим телефон к единому формату $formattedPhone = $formatPhone($phone); // Обновляем телефон в данных заказа if ($formattedPhone !== $phone) { $data['phone'] = $formattedPhone; $this->order->set($data); $phone = $formattedPhone; } // Формируем receiver, если он пустой if (empty($receiver)) { if (!empty($phone)) { $receiver = preg_replace('/[^0-9]/', '', $phone); } elseif (!empty($email)) { $receiver = substr($email, 0, strpos($email, '@')); } else { $receiver = uniqid('user_', false); } } // Формируем email, если он пустой if (empty($email)) { if (!empty($phone)) { $cleanPhone = preg_replace('/[^0-9]/', '', $phone); $email = 'user_' . $cleanPhone . '@' . $this->modx->getOption('http_host'); } else { $email = $receiver . '@' . $this->modx->getOption('http_host'); } } // Если пользователь авторизован if ($this->modx->user->isAuthenticated()) { $profile = $this->modx->user->Profile; if (!$profile->get('email')) { $profile->set('email', $email); } if (!empty($phone) && $profile->get('mobilephone') != $phone) { $profile->set('mobilephone', $phone); } if (!empty($receiver) && $profile->get('fullname') != $receiver) { $profile->set('fullname', $receiver); } $profile->save(); $customer = $this->modx->user; } else { // Поиск существующего пользователя $c = $this->modx->newQuery('modUser'); $c->leftJoin('modUserProfile', 'Profile'); $filter = []; if (!empty($phone)) { $filter['modUser.username'] = $phone; $filter['OR:Profile.mobilephone:='] = $phone; } if (!empty($email)) { $filter['OR:Profile.email:='] = $email; } $c->where($filter); $c->select('modUser.id'); // Пытаемся найти пользователя if (!$customer = $this->modx->getObject('modUser', $c)) { // Создаем нового пользователя $userData = [ 'username' => !empty($phone) ? $phone : $email, 'password' => md5(rand()), 'active' => 1 ]; $customer = $this->modx->newObject('modUser', $userData); $profileData = [ 'fullname' => $receiver, ]; if (!empty($email)) { $profileData['email'] = $email; } if (!empty($phone)) { $profileData['mobilephone'] = $phone; } $profile = $this->modx->newObject('modUserProfile', $profileData); $customer->addOne($profile); // Добавляем настройку языка $setting = $this->modx->newObject('modUserSetting'); $setting->fromArray([ 'key' => 'cultureKey', 'value' => $this->modx->getOption('cultureKey', null, 'en', true), ], '', true); $customer->addMany($setting); if (!$customer->save()) { $customer = null; } elseif ($groups = $this->modx->getOption('ms2_order_user_groups', null, false)) { $groupRoles = array_map('trim', explode(',', $groups)); foreach ($groupRoles as $groupRole) { $groupRole = explode(':', $groupRole); $roleId = null; if (count($groupRole) > 1 && !empty($groupRole[1])) { $roleId = is_numeric($groupRole[1]) ? (int)$groupRole[1] : $groupRole[1]; } $customer->joinGroup($groupRole[0], $roleId); } } } else { // Пользователь найден - обновляем данные $profile = $customer->getOne('Profile'); if ($profile) { $changed = false; if (!empty($phone) && $profile->get('mobilephone') != $phone) { $profile->set('mobilephone', $phone); $changed = true; } if (!empty($email) && $profile->get('email') != $email) { $profile->set('email', $email); $changed = true; } if (!empty($receiver) && $profile->get('fullname') != $receiver) { $profile->set('fullname', $receiver); $changed = true; } if ($changed) { $profile->save(); } } } } } $response = $this->invokeEvent('msOnGetOrderCustomer', [ 'order' => $this->order, 'customer' => $customer, ]); if (!$response['success']) { return $response['message']; } return $customer instanceof modUser ? $customer->get('id') : 0; } Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
18 февраля 2026, 18:18 хм… хочу что бы при формировании заказа минишоп генерировал username не email пользователя, а номер телефона Вопросы / Кастомизация minishop'a (номер телефона вместо емейла у пользователя при совершении заказа) 13 0
07 января 2026, 15:36 вот этот сниппет require_once MODX_CORE_PATH . 'model/modx/modx.class.php'; $modx = new modX(); $modx->initialize('web'); $modx->getService('mail', 'mail.modPHPMailer'); $modx->mail->set(modMail::MAIL_BODY, 'Test message'); $modx->mail->set(modMail::MAIL_FROM, 'info@iflower-shop.ru'); $modx->mail->set(modMail::MAIL_FROM_NAME, 'Test'); $modx->mail->set(modMail::MAIL_SUBJECT, 'Test subject'); $modx->mail->address('to', 'the_guard@mail.ru'); $modx->mail->setHTML(true); $sent = $modx->mail->send(); $modx->mail->reset(); echo $sent ? 'Sent' : 'Not sent';замечательно отправляет письмо на мейл, письмо приходит и все в порядке. Вопросы / Проблемы с отправкой писем статус заказа из minishop2 5 0
07 января 2026, 09:51 у меня вот такие ТХТ записи присутсвуют мой_домен: v=spf1 include:_spf.timeweb.ru ~all _dmarc.мой_домен: v=DMARC1; p=quarantine; dkim._domainkey.мой_домен: k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4HhKuDyzHBH6pVnfIxDDKhney5XIWQXFY2HlCrdfDKtj0wzbzhfCBdkgiRFng8SCXE2jB93e+ZsmbMoJ2WeADqa5LdRo9IPonjeAPUjh7KxV04psRZO/lVmLeQRjxw+exXRml+9797Yqo09BUNedNv0QHGAaYFj+pwgF4Hfg6FQIDAQAB Не знаю, что означает эта абракадабра =) Этого достаточно? или нужны еще какие-то доп настройки? Вопросы / Проблемы с отправкой писем статус заказа из minishop2 5 0
07 января 2026, 09:47 спасибо за ссылку, а что делать если письмо туда вообще не доходит? Вопросы / Проблемы с отправкой писем статус заказа из minishop2 5 0
14 ноября 2025, 18:21 не, до этого я так же проверял, гугл-валидатором, все было в норме, ругался на наличие последней запятой. А тут ругается на запятую, которая идет сразу после первого же товара. А то как пишете вы, у меня так и сделано… <!-- Разметка популярных товаров --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "ItemList", "name": "Популярные букеты", "itemListOrder": "https://schema.org/ItemListOrderAscending", "itemListElement": [ [[getResources? &parents=`6` &tpl=`tovaru-schema` &includeContent=`1` &includeTVs=`1` &sortby=`{"menuindex":"ASC"}` &limit=`0` &depth=`0` ]] ] } Вопросы / GetResorce, lastTpl и offset/idx 15 0
14 ноября 2025, 18:01 План был хорош, но почему-то валидатор от гугла ругается именно на эту запятую =) т.е. по всей видимости, pdoResources подставляет эту запятую в каком-то своем формате. =( Вот чего говорит: Ошибка анализа: в декларации массива отсутствует символ "," или "]", хотя сам код выглядит, так как нужно Вопросы / GetResorce, lastTpl и offset/idx 15 0
14 ноября 2025, 17:39 аааа! я наверное догадался=) &outputSeparator=`,` добавит запятую после каждого прохода цикла? Вопросы / GetResorce, lastTpl и offset/idx 15 0
14 ноября 2025, 17:31 Не совсем понимаю, что это даст? не могли бы вы обьяснить? И вот еще что, в описании pdoResources не нашел &templates… что это дает? Вопросы / GetResorce, lastTpl и offset/idx 15 0
14 ноября 2025, 17:20 Кстати, как я писал выше, если я буду использовать &offset, то перестает работать функция tplLast, а для меня она важна Вопросы / GetResorce, lastTpl и offset/idx 15 0
14 ноября 2025, 17:16 каталог (6) ----категория 1 (7) --------товары около 100 шт ----категория 2 (8) --------товары около 100 шт и так далее мне нужно вывести из каждой категории по 16 товаров у меня это реализовано, скажем так, циклом в цикле Вопросы / GetResorce, lastTpl и offset/idx 15 0
UiCMPGenerator дополнение для создания пакетов Ближе к сентябрю, основная загвоздка это создание нормальной документации и видео обзора, а так пакет как бы уже готов
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
MiniShop3 - Не выводятся товары дополнительных категорий @SYAN ваша указанная проблема исправлена еще до версии 1.2.3 @Павлик Мышкин завел: github.com/modx-pro/MiniShop3/issues/480 github.com/modx-pro/MiniShop3/issues/481Исправим в б...
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
msImportExport не сохраняет родителя по умолчанию Компонент не понимает кирилические домены при загрузку фото. пример: Error download. Url : https://антаресдвери.рф/upload/iblock/a50/a50b2ef45305a3c18f6e298f1e134880.jpg. Message...
Я взял код из файла /core/components/minishop2/model/minishop2/minishop2.class.php
я скопировал этот метод function getReceiverId(), скинул ИИ и описал свои хотелки.
ИИ сгенерировал новый код, я его вставил обратно в файл /core/components/minishop2/model/minishop2/minishop2.class.php и все прекрасно заработало, но когда я расширяю хендлер, у меня перестает работать.
Поправил код по вашему мануалу — все работает, спасибо большое!
с разным расположением файла в зависимости от версии, я уже споткнулся на этом моменте когда подключал свою службу доставки, кстати, в мануале, как раз таки не правильно указано расположения файла (по всей видимости для старой версии)
Я разобрался почему у меня не подключался мой класс, в системных настройках в значении переменной ms2_order_handler_class, у меня было указано «my_OrderHandler » с пробелом на конце, очень было обидно осознать это, когда я два дня пытался разобраться, чой-то мой класс не подключается.
Теперь что касается, кастомного класса. Или, наверное даже больше кастомного метода.
Я начал с того что поменял исходники, и собственно, все у меня работало так как надо.
Телефон приводился к нужному формату, вместо емейла записывался номер телефона, и вообще жизнь прекрасна и удивительна, но!
Когда, все же заработал мой класс, и я сделал, как Вы советовали:
я скопировал метод submit, в нем изменил $user_id = $this->ms2->getCustomerId() на $user_id = $this->getReceiverId();
и новый метод, поменял у него название на getReceiverId()…
тут все работать перестало.
По сути в исходниках я изменял только метод getCustomerId
И был совершенно уверен, что тут у меня не возникнет ни каких проблем.
Собственно в связи с этим вопрос. То был файл в ядре и возможно там различные объекты и прочее достаются иначе, чем это нужно делать через класс, как это есть сейчас у меня?
Помогите, я снова в тупике.
не могу зарегистрировать класс.
содержание самого файла my_msorderhandler.class.php:
согласно священописанию в консоле делаю так:
Пробую, и ничего не меняется. На пару с ИИ добрел до системной настройки, с ключем ms2_order_handler_class и там указал свой класс. Перестало работать вообще. Т.е. тыкаю на кнопку «сделать заказ» на самом сайте и ничего не происходит.
Из чего делаю вывод, что класс мой не зарегистрировался.
Дальше меняю настройку ms2_services.
она у меня выглядела так:
{«cart»:[],«order»:[«my_OrderHandler»],«payment»:[],«delivery»:{«mydelivery»:"{core_path}components\/minishop2\/custom\/delivery\/my_msdeliveryhandler.class.php"}}
т.к. я уже ранее подрубал собственную службу доставки, и она вроде как исправно работает, делаю по образу и подобию с order, хотя ИИ визжит, что так делать нельзя, и у этой настройки должно быть только название класса.
В логах живет вот такая ошибка:
Т.е. я так понимаю, он ищет файл с моей службой почему-то не так где надо, по сути в корне. И как ему указать, где искать — не ведаю.
Вообщем, итог такой, что либо ничего не меняется, либо не работает вовсе.
Что и где я делаю не так?
в документации прописано вот так:
пример подключения собственного класса доставки.
ИИ говорит мне, что интерфейс не нужно подключать для msOrderHandler
т.е. этот кусок получается лишний в моем случае?
я уже как-то подключал свой обработчик доставки.
имеет ли значение в какой папке будет лежать новый файл my_msOrderHandler
метод это когда начинается с «public function»?
Т.е. посути в новом файле должно остаться метод submit с теми изменениями что вы написали и мой метод, который я постил в предыдущем комментарии?
замечательно отправляет письмо на мейл, письмо приходит и все в порядке.
мой_домен: v=spf1 include:_spf.timeweb.ru ~all
_dmarc.мой_домен: v=DMARC1; p=quarantine;
dkim._domainkey.мой_домен: k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4HhKuDyzHBH6pVnfIxDDKhney5XIWQXFY2HlCrdfDKtj0wzbzhfCBdkgiRFng8SCXE2jB93e+ZsmbMoJ2WeADqa5LdRo9IPonjeAPUjh7KxV04psRZO/lVmLeQRjxw+exXRml+9797Yqo09BUNedNv0QHGAaYFj+pwgF4Hfg6FQIDAQAB
Не знаю, что означает эта абракадабра =)
Этого достаточно? или нужны еще какие-то доп настройки?
А то как пишете вы, у меня так и сделано…
т.е. по всей видимости, pdoResources подставляет эту запятую в каком-то своем формате. =(
Вот чего говорит: Ошибка анализа: в декларации массива отсутствует символ "," или "]", хотя сам код выглядит, так как нужно
&outputSeparator=`,` добавит запятую после каждого прохода цикла?
И вот еще что, в описании pdoResources не нашел &templates… что это дает?
----категория 1 (7)
--------товары около 100 шт
----категория 2 (8)
--------товары около 100 шт
и так далее
мне нужно вывести из каждой категории по 16 товаров
у меня это реализовано, скажем так, циклом в цикле