Всего 123 791 комментарий

sergey
09 июля 2023, 11:41
0
В моем случае проблема не в этом. По прежнему не могу попасть в админку. При вводе правильного логина и пароля страница просто перезагружается, при этом если ввести неверный пароль то по прежнему сообщает об ошибке (неверный пароль).
Miša Bulic
09 июля 2023, 10:14
0
GoogleSheets дополнение для этого использую
Alexey
09 июля 2023, 09:45
0
Сталкивался с такой проблемой, когда заканчивалось место на диске.
steve.kon
08 июля 2023, 22:50
+1
Решил. Если кто столкнется с подобным:
нельзя использовать нижнее подчёркивание в TV для данной конфигурации. Заменил на тире — заработало
Артур Шевченко
08 июля 2023, 20:52
0
Есть это
// тут нужно получить данные из гугл таблицы и преобразовать в массив $items
foreach($items as $item){
$product = $mdox->getObject('modResource', $item['id']);
$product->set('price', $item['price']);
$product->save();
}
И если товаров много, то можно повесить задание в планировщике
ruslan
08 июля 2023, 13:14
0
добрый день
я так понимаю он больше не доступен? хотелось бы протестировать
ruslan
08 июля 2023, 12:41
0
добрый день
компонент нельзя загрузить с репозитория
Андрей Шевяков
08 июля 2023, 10:53
0
Добрый день! Хотел потестить компонент, он еще работает?
Максим
07 июля 2023, 08:19
+3
Кончился похоже modx.
Wordpress вон живёт и вроде не скоро еще собирается умирать)) Хотя, на мой взгляд, там проблем поболее… Так что…
Кровельный
06 июля 2023, 15:07
0
Хорошая вещь, и после переиндексации слов вывести сниппет keywords_mse2.
<?php
/* Ключевые слова из индекса слов с ключевыми фразами или TV keywords. */
$q = $modx->query('SELECT resource, word FROM modx_mse2_words WHERE resource = '.$modx->resource->id);
if (is_object($q)) {
    while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
        $result .= $row['word'].', ';
    }
}

$seoKeywords = $modx->getObject('seoKeywords', array('resource' => $modx->resource->id));
if (is_object($seoKeywords)) {
    // try seoPro
    if (!$seoKeywords->get('keywords')) {
        return mb_strtolower(substr($result,0,-2));
    } else {
        return mb_strtolower($result) . $seoKeywords->get('keywords');
    }
} else {
    //try {$_modx->resource['keywords']}
    $resource = $modx->getObject('modResource', $modx->resource->id);
    if (!$resource->getTVValue('keywords')) {
        return mb_strtolower(substr($result,0,-2));
    } else {
        return mb_strtolower($result) . $resource->getTVValue('keywords');
    }
}
Николай Савин
06 июля 2023, 08:31
+2
Антон — тебе спасибо.
Антон Тарасов
05 июля 2023, 23:16
+3
Большое спасибо всем вам за неиссякаемый энтузиазм и новые релизы, задонатил.
Владимир
05 июля 2023, 19:24
+2
спасибо, ребята! отличная работа! народ, поддерживайте ребят обязательно! их работа дорогого стоит. здесь все реквизиты: modx.pro/about
Dan
Dan
05 июля 2023, 07:46
0
А у вас напрямую этот запрос указан или он генерируется? Покажите часть кода
Vladimir
04 июля 2023, 23:15
0
Плагин работает, если в нем добавить 1 строку. Сейчас методом изучения логов и курению апи вк нашел проблему.
в файле core/components/msocial/custom/network/vk/vk.class.php
В разделе конструктора запроса видимо (не пинайте я не программист) не хватает версии api для вк. надо добавить везде где только можно эту строку $this->vkKeys['v'] = '5.131';

public $vkKeys;

public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.131';
}
и с 78 строке сделать так
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => '5.131'
));

$vkPhoto = $this->request($server->response->upload_url, $file);

$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => '5.131'
));
Дима Касаткин
04 июля 2023, 21:50
+1
Привет, спасибо за релиз, большое УРА, и маленькая поправочка к:

Более подробная информация уже доступна в документации
docs.modx.pro/components/minishop2/interface/utilities/ (прям открытой ссылкой, не зря же мы за ЧПУ бились:) )
Евгений Лазарев
04 июля 2023, 18:32
0
Подскажите пожалуйста почему поле может не получать данные после повторной перезагрузки страницы?
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'modUserProfile' => array(
                'fields' => array(
                    'building' => null,
                    'layer' => null,
                ),
                'fieldMeta' => array(
                    'building' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'json',
                        'null' => true,
                    ),
                    'layer' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'json',
                        'null' => true,
                    ),
                ),
            ),
        );

        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))) {
            $buildings = [];
            $layers = [];
            if ($user->Profile->building){
                foreach (json_decode($user->Profile->building) as $id){
                    if (!$scBuilding = $modx->getObject('scBuilding', ['id' => $id, 'active' => true])) continue;
                    $buildings[] = (object)$scBuilding->toArray();
                }   
            }
            var_dump($user->Profile->email); var_dump($user->Profile->layer); die();
В данном случае при первой перезагрузке страницы выведется и email и layer, при повторной же emal выведется а свое поле будет null
B так каждый раз пока кэш не очистишь
Николай Савин
04 июля 2023, 16:56
+1
Огромное спасибо
vit
vit
04 июля 2023, 16:21
0
В том и дело что в БД оно null если это запрос вставить в бд он выводит результат правильно, а внутри MODX не работает.
В чем может быть проблема или у меня ошибка в коде выше?
Евгений Лазарев
04 июля 2023, 13:52
0
Код на событие
case "OnUserFormPrerender":
        if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            $data['building'] = $user->Profile->building ?: '';

            $modx->controller->addHtml("
                <script type='text/javascript'>
                    MODx.combo.Building = function(config) {
                        config = config || {};
                        Ext.applyIf(config,{
                            xtype: 'superboxselect',
                            allowBlank: false,
                            msgTarget: 'under',
                            allowAddNewData: true,
                            addNewDataOnBlur: false,
                            resizable: true,
                            name: config.name || 'building',
                            anchor: '100%',
                            displayField: 'name',
                            valueField: 'id',
                            typeAhead: true,
                            store: new Ext.data.JsonStore({
                                id: (config.name || 'building') + '-store',
                                root: 'results',
                                autoLoad: true,
                                autoSave: false,
                                totalProperty: 'name',
                                fields: ['id','name'],
                                url: '/assets/components/svgcreator/connector.php',
                                baseParams: {
                                    action: 'mgr/floor/getlist',
                                    key: config.name,
                                },
                            }),
                            extraItemCls: 'x-tag',
                            expandBtnCls: 'x-form-trigger',
                            clearBtnCls: 'x-form-trigger',
                            renderTo: Ext.getBody(),
                            editable: true,
                            triggerAction: 'all',
                            mode: 'remote',
                            hideMode: 'offsets',
                            pageSize: 20,
                            listeners: {
                                newitem: function(bs,v, f) {bs.addItem({tag: v});},
                            },
                        });
                        config.name += '[]';
                        MODx.combo.Building.superclass.constructor.call(this,config);
                    };
                    Ext.extend(MODx.combo.Building,Ext.ux.form.SuperBoxSelect);
                    Ext.reg('modx-combo-building',MODx.combo.Building);
                
                    Ext.ComponentMgr.onAvailable('modx-user-tabs', function() {
                        this.on('beforerender', function() {
                            var leftCol = this.items.items[0].items.items[0].items.items[0];
                            
                            leftCol.items.insert(12, 'modx-user-building', new MODx.combo.Building({
                                id: 'modx-user-building',
                                name: 'building',
                                fieldLabel: 'Объекты',
                                xtype: 'modx-combo-building',
                                anchor: '100%',
                                maxLength: 100,
                                value: {$data['building']},
                            }));
                        });
                    });
                </script>
            ");
        }
        break;