Кирилл

Кирилл

С нами с 02 мая 2019; Место в рейтинге пользователей: #84

Добавить combobox в форму редактирования пользователя в админке

С добавлением поля практически справился. Создал плагин на события OnUserFormPrerender и OnUserFormSave с кодом:
<?php
switch($modx->event->name) {
	case 'OnUserFormPrerender':
		$modx->regClientStartupScript('/assets/components/orders/js/mgr/user_form/combo.js');
		$modx->regClientStartupScript('/assets/components/orders/js/mgr/user_form/tab.js');
	break;
	case 'OnUserFormSave':
		$profile = $user->getOne('Profile');
        $fields = $profile->get('extended');
        $fields['manager'] = $_POST['manager'];
        $profile->set('extended', $fields);
        $profile->save();
	break;
}

Два JS файла:
1. Для вывода новой вкладки
Ext.onReady(function() {
    var usertabs = Ext.getCmp('modx-user-tabs');
    usertabs.add({
        title: 'Модуль Заказы',
        layout: 'form',
        autoScroll: true,
        autoHeight: true,
        labelAlign: 'top',
        cls: 'main-wrapper',
        items: [
            {
                xtype: 'modx-orders-manager',
                name: 'manager',
                fieldLabel: 'Менеджер',
                width: 176,
            }
        ]
    });
});

2. Для combobox
MODx.combo.Manager = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        name: 'manager',
        hiddenName: config.name || 'manager',
        displayField: 'name',
        valueField: 'id',
        fields: ['id', 'name'],
        pageSize: 9999,
        hideMode: 'offsets',
        emptyText: ' - ',
        url: MODx.config.assets_url+'components/orders/connector.php',
        baseParams: {
            action: 'mgr/manager/getlist',
            sort: 'name',
            dir: 'asc',
            combo: true,
            limit: 9999,
        }
    });
    MODx.combo.Manager.superclass.constructor.call(this, config);
};
Ext.extend(MODx.combo.Manager, MODx.combo.ComboBox);
Ext.reg('modx-orders-manager', MODx.combo.Manager);

В результате получилось вот так


Combobox выводится и данные сохраняются, но сделать чтобы после повторного открытия формы в combobox подставлялось уже сохраненное значение не получается.

И еще один вопрос, где подключить лексокон чтобы можно было вывести тексты из кода JS?
Владимир
25 сентября 2018, 00:38
modx.pro
2
1 562
+1

Office - авторизация и регистрация через sms c одной формы

Кейс:

Клиент очень хотел, чтобы у него на странице входа, как у служб доставки, было одно поле — номер телефона. И всё. То есть, если ты новый — ты регистрируешься, если уже юзер — входишь.

Если с авторизацией через email такое можно заставить работать из коробки, то с телефоном пришлось помудрить. Далее — пошаговое описание решения.
mngatoff
26 июля 2018, 16:18
modx.pro
35
4 748
+18

Изменяем форму заказа minishop2

За год работы с минишопом я понял одну вещь — никто не знает как просто и быстро кастомизировать стандартную форму заказов. Для меня это довольно частая задача, по этому соберу тут несколько приемов которыми сам пользуюсь:


Pavel Zarubin
22 апреля 2018, 02:16
modx.pro
97
13 033
+41

Minishop2 количество товаров в корзине

Доброго времени дня!
Необходимо вывести в мини корзине количество товаров (кол-во строк в корзине).
Как вывести на странице разобрался:
count(($miniShop2->cart->get()));
А как сделать что бы при добавлении нового товара автоматически обновлялось не знаю.

Плейсхолдер {$total_count} видел, не подходит. Он выводит общее количество товара. В моем случае товар продается метрами.
Например: кладем в корзину 5 метров одного товара и 3 метра другого. Плейсхолдер
{$total_count} выведет 8, а надо 2 (т.к. в корзине 2 товара)

Решение:
1) Расширил класс корзины:
<?php
if(!class_exists('msCartHandler')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/mscarthandler.class.php';
}
class myCartHandler extends msCartHandler implements msCartInterface{

    public function status($data = array())
    {
        $status = array(
            'total_count' => 0,
            'total_cost' => 0,
            'total_weight' => 0,
            'total_num' => 0,
        );
        foreach ($this->cart as $item) {
            if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
                $status['total_count'] += $item['count'];
                $status['total_cost'] += $item['price'] * $item['count'];
                $status['total_weight'] += $item['weight'] * $item['count'];
                $status['total_num']++;
            }
        }

        return array_merge($data, $status);
    }
}
— теперь у нас появился новый плейсхолдер — total_num

2) Что бы при добавлении в корзину у нас мини корзина сразу обновлялась дописал колбеки:
/* Добавление твоаров в корзине */
miniShop2.Callbacks.Cart.add.response.success = function(response) {
    //console.log(response.data['total_num']);
    miniShop2.Cart.totalNum = '.ms2_total_num';
    $(miniShop2.Cart.totalNum).text(response.data['total_num']);
};
/* Изменение твоаров в корзине */
miniShop2.Callbacks.Cart.change.response.success = function(response) {
    miniShop2.Cart.totalNum = '.ms2_total_num';
    $(miniShop2.Cart.totalNum).text(response.data['total_num']);
};
3) Добавляем в чанк с мини корзиной плейсхолдер и класс.
<span class="ms2_total_num">{$total_num}</span>
П.с. за наводку спасибо пользователю — Алексей
Руслан Сафин
04 сентября 2017, 14:06
modx.pro
6
8 364
0

mFilter2 и оптимизация скорости на 7k товарах


Всем, кто хоть раз пытался завести mFilter2 на большом кол-ве товаров и хотя-бы 10 опциях в фильтре, известно, что тормозов не избежать. Вот и мне попался на днях сайт, в котором, казалось бы, всего-то 7000 товаров и 10 опций на странице каталога. Однако сниппет фильтра отрабатывал за 3-4 секунды. Переписал на Fenom — стал отрабатывать за 2-3 секунды.
Не годится! Тем более, что у заказчика было требование: «Чтобы сайтом было комфортно пользоваться». Что-ж, взял задачу — надо решать!

Дебаг показал, что проблема в методе mse2FiltersHandler::getMsOptionValues, а именно в запросе (7k товаров!), который выглядит как-то так:
SELECT `product_id`, `key`, `value` FROM `modx_ms2_product_options` AS `msProductOption` 
WHERE (`msProductOption`.`product_id` IN (3394,3408,еще 7 тысяч ID)
AND `msProductOption`.`key` IN ('atr_n1','atr_n6','atr_n5','atr_n12','atr_n43','atr_n46','atr_n29','atr_n11','atr_n44','atr_n2'))
Павел Гвоздь
14 августа 2017, 14:14
modx.pro
41
5 489
+21

[msOptionsPrice2] работа с остатками

Опишу решение ряда проблем с которыми столкнулся сам. msOptionsPrice2 очень крутое решение для minishop2 но для нормальной работы с остатками там очень мало функционала.
Проблемы:
  1. На странице каталога и товара нет плейсхолдера, с помощью которого можно было бы скрыть кнопку добавления в корзину и вывести свою информацию
  2. На странице каталога при добавлении товара проверяется на наличии первая модификация, и, если она отсутствует, то выскакивает оповещение о недоступности товара
  3. На миникарточке указана неправильная цена, т.к. выводится цена продукта, а не цена модификации
Инструкция под катом
Pavel Zarubin
08 августа 2017, 13:15
modx.pro
14
5 341
+4

Amp для modx

Наткнулся на плагин для revo AMP модх.
ссылка на github репозиторий

Кто реализовывал AMP на modx? Поделитесь любой информацией.
Oleh
23 июля 2017, 16:22
modx.pro
11
7 623
0

mFilter2 type slider for touch

Здравствуйте! В mFilter2 нет возможности пальцем на touch устройствах(мобилки, планшеты...) передвигать слайдер, например «Цены». Яркий пример этому можно посмотреть на minishop2.com, а вот пример где все норм. 3d-m.ru/3d-printery-professionalnye/
Есть возможность как это поправить, кто сталкивался?
Артур
04 мая 2017, 19:36
modx.pro
3
4 502
0

Вывод minishop2-combo-options в карточке товара

Здравствуйте!
Столкнулся со следующей проблемой.
Добавляю новые доп. поля с помощью системы плагинов. Нормално выводятся в карточку товара все, кроме тех, которые имеют тип minishop2-combo-options
В месте вставки плесхолдера просто пустота, хотя запись вбазе имеется.

msproductdata.js
naznachenie:{
	xtype: 'minishop2-combo-options', 
	description:'<b>[[+naznachenie]]</b>'+_('ms2_product_naznachenie_help')
},

naznachenie:{
	width: 60,
	sortable: false,
	editor: {
		xtype: 'minishop2-combo-options',
		name: 'naznachenie'
	}
},


msproductdata.map.inc.php
'naznachenie' => array(
'dbtype' => 'text'
,'phptype' => 'json'
,'null' => true
,'default' => NULL
),

'naznachenie' => array (
'alias' => 'naznachenie'
,'primary' => false
,'unique' => false
,'type' => 'BTREE'
,'columns' => array (
	'action' => array (
		'length' => ''
		,'collation' => 'A'
		,'null' => false
		)
	)
),
MrKarandash
19 февраля 2017, 18:46
modx.pro
1
1 577
0

Свой фильтр в mFilter2

Добрый день. Расскажите, пожалуйста, с какой целью используются методы getMyNewValues(array $fields, array $ids), buildMyNewFilter(array $values) и filterMyNew(array $requested, array $values, array $ids) при кастомизации mFilter2. Расковырял компонент, но так и не понял, что должен возвращать каждый из них. Хотя с последним ситуация более менее понятна. Странно, что в модели и сниппете не удается сделать var_dump. Очевидно, данные кешируются. Разъясните, как реализовать фильтр по произвольной таблице.
Алексей
24 января 2017, 20:08
modx.pro
4
4 595
0