Всего 125 944 комментария

brioni
31 декабря 2022, 10:31
0
Огромная благодарность автору за качественное дополнение и оперативное обновление. Жаль, что из-за сложности с оплатой не получается протестировать Deepl, но с Яндекс.Клауд у меня полет отличный ?

Единственная просьба, при следующем обновлении добавить перевод атрибута alt=«название картинки» и title=«заголовок картинки» внутри тега (сейчас приходится переводить вручную). Спасибо. Всех с наступающим 2023!
Сергей Шлоков
31 декабря 2022, 08:05
0
AjaxForm на стреройдах
Наверно, имелось ввиду «на стероидах»?
Павел Романов
30 декабря 2022, 17:14
0
Сделайте сниппет и запускайте через CronManager
<?php
$content = $modx->runSnippet('pdoSitemap', array(
    'context' => 'web',
    'parents'=> 0,
    'forceXML' => 0
));
file_put_contents(MODX_BASE_PATH.'filename.xml', $content);
Vladimir
30 декабря 2022, 13:16
0
Решил с помощью данной статьи. modx.pro/solutions/22595

Теперь плагин такой.

<?php
switch($modx->event->name){
    case 'OnMODXInit':
    $map = array(
            'msOrder' => array(
                'fields' => array(
                    'regular_customer' => 0
                ),
                'fieldMeta' => array(
                    'regular_customer' => array(
                    'dbtype' => 'tinyint',
                    'precision' => 1,
                    'attributes' => 'unsigned',
                    'phptype' => 'boolean',
                    'null' => false,
                    'default' => 0,
                    ),
                ),
            ),
        );
        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 'msOnManagerCustomCssJs':
        if ($page != 'orders') return;
        $modx->controller->addHtml("
            <script>
                Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function(){
                    let orderTab = this.fields.items[0].items;
                    let obj = {
                        layout: 'column',
                        defaults: {
                            msgTarget: 'under',
                            border: false
                        },
                        anchor: '100%',
                        items: [
                            { 
                                columnWidth: 1,
                                layout: 'form',
                                items:[
                                    {
                                        title: 'Регулярный пользователь',
                                        xtype: 'xcheckbox',
                                        id: 'minishop2-regular-customer',
                                        labelAlign: 'top',
                                        name: 'regular_customer',
                                        fieldLabel: 'Регулярный пользователь',                                        
                                        autoHeight: true,
                                        inputValue: 1,
                                        border: false,
                                        anchor: '100%',
                                        value: this.record.regular_customer
                                    }
                                ]
                            }
                        ]
                    }
                    orderTab.push(obj);
                });                
            </script>");
    break;
}
Vladimir
30 декабря 2022, 12:49
0
Потому что задача стоит такая, чтобы если больше 5тя сделанных заказов, то должна галочка стоят в каждом заказе от этого пользователя. Нет какого-то функционала если больше 5ти заказов, это галочка чисто для менеджеров будет
Артур Шевченко
30 декабря 2022, 12:14
0
А почему нельзя просто проверять есть ли у этого пользователя 5 или более заказов и делать, то что нужно?
Наумов Алексей
30 декабря 2022, 08:01
0
У отзыва нет отдельной страницы. реализовать, естественно, это можно, вариантов реализации много.
Простой способ — передавать id отзыва через GET параметр при запросе к специальной странице «Читать отзыв». Ну и там далее получать этот отзыв из базы и выводить.
Михаил
30 декабря 2022, 03:05
0
Как сделать ссылку на страницу отзыва? Что то типа Читать отзыв подробнее (как на Отзовик.ру)
Артур Шевченко
30 декабря 2022, 00:12
0
Вообще, когда своих знаний маловато, используют готовые решения, для фильтрации это mSearch2. Но если хочется сделать самому, вот хорошая статья по составлению запросов в modx.
Лена
29 декабря 2022, 10:00
+1
Нашла проблемы ещё с другими пакетами, уже в проектах которые сама делаю, приняла решение откатиться до второй версии пока что, а как можно будет переходить на третью тогда обновляться. Но MODX 3 классный, понравился.
Vladimir
29 декабря 2022, 08:45
0
Добавил поле, однако оно дублируется, стоит самым первым, а так же 4м, 1 что стоит оно отключено и не возможно набрать, а последнее работает отлично, как убрать дубликат? В админке так же есть уже другие доп поля, сделанные не мной, такого плагина как тут не стояло там.

Мой плагин получился таким.
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'modUser' => array(
                'fields' => array(
                    'regular_customer' => 1,
                ),
                'fieldMeta' => array(
                    'regular_customer' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 0,
                    ),
                ),
            )
        );

        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['regular_customer'] = $user->regular_customer ? '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-regular-customer', new Ext.form.Checkbox({
                                id: 'modx-user-regular-customer',
                                name: 'regular_customer',
                                hideLabel: true,
                                boxLabel: 'Постоянный покупатель',
                                description: 'Указывает что пользователь сделал более 5ти заказов.',
                                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['regular_customer']},
                            }));
                        });
                    });
                </script>
            ");
        }
        break;
}
guitar_plus
29 декабря 2022, 04:55
0
Разобрался выдает ошибку «Array and string offset access syntax with curly braces is no longer supported in » поменял php c 8.1 версии на 7.4 все заработало

Спасибо.
Fr3ddy
28 декабря 2022, 22:43
0
спасибо, ошибки были но данные в вкладке вернулись

ждать фикс в новой версии?
Prihod
28 декабря 2022, 22:31
0
выполни в консоли modx код

<?php
$pkgName = 'Polylang';
$pkgNameLower = mb_strtolower($pkgName);

$modelPath = $modx->getOption("{$pkgNameLower}.core_path", null, $modx->getOption('core_path') . "components/{$pkgNameLower}/") . 'model/';
$manager = $modx->getManager();
$manager->addField('PolylangContent', 'createdby', array('after' => 'content'));
$manager->addField('PolylangContent', 'createdon', array('after' => 'content'));
$manager->addField('PolylangLanguage', 'locale', array('after' => 'culture_key'));
$manager->addField('PolylangLanguage', 'icon', array('after' => 'culture_key'));
$manager->addField('PolylangLanguageGroup', 'icon', array('after' => 'id'));
после выполнения кода информация в консоли про ошибки дублирование это нормально
Fr3ddy
28 декабря 2022, 22:22
0
после обновления 2 сайтов на версию 1.3.6 с версии 1.3.1 в логах

[2022-12-28 21:18:16] (ERROR @ /home/www/core/xpdo/om/xpdoobject.class.php: 240) Error 42S22 executing statement:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'PolylangContent.createdby' in 'field list'
)

и пропали переводы на вкладке «локализация»
alexandr.skyrda
28 декабря 2022, 20:54
0
или похоже, что здесь core вынесен отдельно за public_html?
мне по сути поменять на define('MODX_CORE_PATH', MODX_BASE_PATH. 'public_html/core/');?
alexandr.skyrda
28 декабря 2022, 20:52
0
насколько я понимаю, при данном конфиге папку можно просто в корень закинуть?
define('MODX_CORE_PATH', MODX_BASE_PATH . 'core/');
define('MODX_MANAGER_PATH', MODX_BASE_PATH . 'public_html/manager/');
define('MODX_CONNECTORS_PATH', MODX_BASE_PATH . 'public_html/connectors/');
define('MODX_ASSETS_PATH', MODX_BASE_PATH . 'public_html/assets/');