Николай

Николай

С нами с 21 августа 2019; Место в рейтинге пользователей: #664
Николай
03 января 2022, 12:10
+1
Люблю Modx Спасибо вам за вашу работу господа)
Николай
02 февраля 2021, 10:54
+2
По хорошему, как мне кажется, было бы круто на сайте сделать сервис по фрилансу. Тип что бы не в чатике MW делались заказы, а что бы клиент заходил на сайт, оставлял заявку, на сайте же оставлял телегу + полную оплату. Которая висела бы на сайте до нажатия на кнопку заказ выполнен в срок и тд. И ботом это все закидывать в сам чатик с контактами заказчика.
Что это нам бы дало.
К примеру Клиент решил заказать сайт на modxRevo, оценил его в 30 000. Дал срок 3 недели. И перевел сумму на сайт полностью. Она где то зависла в недрах сайта. В чатик упал заказ, я решил его взять. Написал клиенту в ТГ и скинул ему свой логин с modx.pro. Он зашел на сайт вбил меня в спец поле и я стал исполнителем.
Далее возможно несколько вариантов.
1) Я сделал заказ в срок все довольны и клиент нажал на кнопку «Заказ выполнен хорошо и в срок» я получил свои 29 000 а 1 000 ушла сайту.
2)Я все сделал но опоздал на неделю. Клиент в целом доволен, но у него после истечения срока заказа появляется возможность урезать сумму на 20-30-40% в зависимости от его недовольства и срока. В этом случае я получу условно 20к и 1к уйдет сайту.
3) Я не выполнил заказ, клиент вернул предоплату а исполитель улетел в бан и при попытке его выбрать будет писаться что исполнитель мудак
4) Я выполнил заказ но клиент морозится и придумывает правки и проч, т.к. деньги на сайте, я могу запросить свои законные 28к а 2к уходит сайту т.к. они переводятся без одобрения клиента и сайт берет на себя некие риски.

Как то так, система конечно не до конца продумана но мне кажется это всем упростит жизнь. Так же бота можно научить постить отзывы от заказчиков, мнения о клиентах и вести базу ЧС и недобросовестных заказчиков.
Николай
17 декабря 2020, 10:22
0
Меня как человека который доку читает постоянно, раздражает то что она не актуализирована. К примеру тот же HybridAuth дока написана лет 5 назад, гугл и фейсбук уже вообще по другому работают и дока не актуальна от слова совсем. И такого вполне много.
Николай
23 октября 2020, 12:11
+1
1) Не хватает возможности выбрать в msOrder тип вывода вариантов доставки оплаты, часто по дизайну надо вывести select с опциями и лично у меня всегда это оч геморно проходит.
2) Не хватает возможности определить count в виде целых\дробных чисел
3) Не хватает встроеного решения для распечатки конктретного заказа, без посторонних компонентов
Николай
25 апреля 2020, 02:42
+1
Оч крутой компонент, да у него не самые большие возможности, но как же он помогает в организации ресурсов и шаблонов. Но как по мне немного перемудрил с TV. Возможно стоило бы сделать что то типо, как с шаблоном (выбор иконки для шаблона). Тоесть мы создали TV привязали к шаблону, и в шаблон добавилось такое же поле как у тебя в выборе иконки шаблона. Все выбрали нужную иконку и вуаля. ТАк же было бы прикольно в Системные настройки запихнуть, возможность выбирать 4 или 5 версию, и если у тебя к примеру есть купленная подписка, то сделать возможность добавить логин и пароль. Или как оно работает не оч осведомлен. Но за обнову спасибо.
Николай
07 марта 2020, 13:10
0
Ему б еще подобреть к новичкам немного))))
Николай
11 февраля 2020, 17:19
0
Планирую купить ваш компонент, однако задача стоит нетривиальная. Может ли ваш компонент по клику менять цену в [[+price]]. Допустим менеджер внес цену в евро (т.к. именно в евро ему дает цену поставщик), потом он нажимает где то в админке кнопку и цена меняется именно в поле [[+price]] на рубли. В общем клиент хочет менять валюту в бекенде точнее в своей админке причем именно нажатием на кнопку, он не планирует импортировать товары.
Николай
08 февраля 2020, 18:55
0
Не совсем понятно откуда цена, по сути взят рандомный html шаблон, накинут дефолтный minishop2 и все. Я готов подобное решение купить но только если после его установки все что будет надо это внести реальные данные. а этот шаблон нужно еще часов 20 доводить до ума, что бы он выглядел хотя бы адекватно и современно
Николай
06 февраля 2020, 15:11
0
А можно пример скрытого поля, а то как я его только не добавлял, не получается записать в БД 0 для чекбокса.
Николай
06 февраля 2020, 14:36
0
UPD: добился того, что бы в базу записывало состояние checked, однако в бекенд состояние почему то не передается, то есть галочка не появляется в беке, потому, если Пользователя сохранить — состояние сбрасывается на 0 и в БД перезаписывается.
мой вызов:
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'modUser' => array(
                'fields' => array(
                    'spam_sms' => 1,
                    'spam_viber' => 1,
                    'spam_email' => 1,
                    'zak_email' => 1,
                    'zak_sms' => 1,
                    'zak_viber' => 1,
          
                ),
                'fieldMeta' => array(
                    'spam_email' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                    'spam_viber' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                    'spam_sms' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                    'zak_email' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                    'zak_sms' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                    'zak_email' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                ),
            ),
        );

        foreach ($map as $class => $data) {
            $modx->loadClass($class);

            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }
        break;
    
    case "OnUserFormPrerender":
        if (!isset($user) || $user->get('id') < 1) {
            return;
        }

        if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            $data['spam_email'] = $user->Profile->spam_email ? 'true' : 'false';
            $data['spam_sms'] = $user->Profile->spam_sms ? 'true' : 'false';
            $data['spam_viber'] = $user->Profile->spam_viber ? 'true' : 'false';
            $data['zak_email'] = $user->Profile->zak_email ? 'true' : 'false';
            $data['zak_sms'] = $user->Profile->zak_sms ? 'true' : 'false';
            $data['zak_viber'] = $user->Profile->zak_viber ? 'true' : 'false';


            $modx->controller->addHtml("
                <script type='text/javascript'>
                    Ext.ComponentMgr.onAvailable('modx-user-tabs', function() {
                        this.on('beforerender', function() {
                            var rightCol = this.items.items[0].items.items[0].items.items[1];

                            rightCol.items.insert(0, 'modx-user-spam_email', new Ext.form.Checkbox({
                                id: 'modx-user-spam_email',
                                name: 'spam_email',
                                hideLabel: true,
                                boxLabel: 'Рассылка на Email',
                                description: 'Пользователь отметил E-mail для рассылки рекламы',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    },
                                },
                                checked: {$data['spam_email']},
                            }));
                            
                            rightCol.items.insert(0, 'modx-user-spam_viber', new Ext.form.Checkbox({
                                id: 'modx-user-spam_viber',
                                name: 'spam_viber',
                                hideLabel: true,
                                boxLabel: 'Рассылка на Viber',
                                description: 'Пользователь отметил Viber для рассылки рекламы',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['spam_viber']},
                            }));
                            
                            rightCol.items.insert(0, 'modx-user-spam_sms', new Ext.form.Checkbox({
                                id: 'modx-user-spam_sms',
                                name: 'spam_sms',
                                hideLabel: true,
                                boxLabel: 'Рассылка на SMS',
                                description: 'Пользователь отметил SMS для рассылки рекламы',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['spam_sms']},
                            }));
                            
                            rightCol.items.insert(0, 'modx-user-zak_email', new Ext.form.Checkbox({
                                id: 'modx-user-zak_email',
                                name: 'zak_email',
                                hideLabel: true,
                                boxLabel: 'Оповещение о заказе на Email',
                                description: 'Пользователь отметил E-mail для оповещения О поступлении',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['zak_email']},
                            }));
                            
                            rightCol.items.insert(0, 'modx-user-zak_sms', new Ext.form.Checkbox({
                                id: 'modx-user-zak_sms',
                                name: 'zak_sms',
                                hideLabel: true,
                                boxLabel: 'Оповещение о заказе по SMS',
                                description: 'Пользователь отметил SMS для оповещения О поступлении',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['zak_sms']},
                            }));
                            
                            rightCol.items.insert(0, 'modx-user-zak_viber', new Ext.form.Checkbox({
                                id: 'modx-user-zak_viber',
                                name: 'zak_viber',
                                hideLabel: true,
                                boxLabel: 'Оповещение о заказе по Viber',
                                description: 'Пользователь отметил Viber для оповещения О поступлении',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                listeners: {
                                    beforerender: function(that) {
                                        that.hiddenField = new Ext.Element(document.createElement('input')).set({
                                            type: 'hidden',
                                            name: that.name,
                                            value: 0,
                                        });
                                    },
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', that.hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['zak_viber']},
                            }));
                        });
                    });
                </script>
            ");
        }
        break;
}
В ответе выше говорилось про скрытое поле перед checkbox, можно немного подробнее?
Николай
06 февраля 2020, 13:52
0
Все же не получается завести в форме Office checkbox
Добавил такое поле:
<input type="checkbox" id="spam_email" class="jqIgnore" name="spam_email" value="1" {(0 | user : 'spam_email') ? 'checked' : ''}>
Оно отображает текущее состояние чекбокса, но при изменении значения не меняет и в базу не сохраняет
где я что то упустил?
Если менять в бекенде то все меняется и в базу пишет нормально. И если менять в беке то и на фронте меняет значение.
Николай
05 февраля 2020, 17:45
0
А как созданные поля изменить из фронтенда без применения дополнения типа Office, В ЛК есть несколько вкладок на одной из них уже есть
[[!Office?
    &action=`Profile`
    &tplProfile=`Office.profile.form_tpl`
    &profileFields=`username,email,phone,dob,extended[insta]`
]]
нужен похожий способ что бы внести изменения в новые поля.