Вячеслав Варов
С нами с 06 сентября 2016; Место в рейтинге пользователей: #188Создание большого количества ресурсов >100000 через MODX API
            Здравствуйте!
Необходимо создать большое количество ресурсов через API, написал следующий скрипт:
Проблема в том что приходится запускать несколько раз скрипт с условием отбора родительских ресурсов:
PS скрипт запускаю через modx console, видимо происходит остановка скрипта из-за длительности его выполнения
        
        
        
    Необходимо создать большое количество ресурсов через API, написал следующий скрипт:
<?php
$q = $modx->newQuery('modResource');
// условие по необходимости
$q->where(array('pagetitle:LIKE' => '%Ремонт двигателя%', 'template' => '5', 'id:>' => 0, 'id:<' => 1000));
$resources = $modx->getIterator('modResource', $q);
$array = [
 ['Замена клапана',1200,'zamena-klapana'],
['Замена клапанной крышки',3800,'zamena-klapannoj-kryishki'],
['Замена натяжителя цепи',6800,'zamena-natyazhitelya-czepi'],
['Замена опоры двигателя',2490,'zamena-oporyi-dvigatelya'],
['Замена коленчатого вала двигателя',4200,'zamena-kolenchatogo-vala-dvigatelya' ],
['Замена поддона картера двигателя',3800,'zamena-poddona-kartera-dvigatelya' ],
['Замена прокладок свечных колодцев',2400,'zamena-prokladok-svechnyix-kolodczev' ],
['Ремонт коленчатого вала двигателя',4200,'remont-kolenchatogo-vala-dvigatelya' ],
['Замена прокладки ГБЦ',3000,'zamena-prokladki-gbcz' ],
['Замена прокладки клапанной крышки',3800,'zamena-prokladki-klapannoj-kryishki' ],
['Замена радиатора охлаждения',4900,'zamena-radiatora-oxlazhdeniya' ],
['Регулировка клапанов',4100,'regulirovka-klapanov' ],
['Замена верхнего рычага подвески',800,'zamena-verxnego-ryichaga-podveski' ],
['Замена передней стойки стабилизатора',490,'zamena-perednej-stojki-stabilizatora' ],
['Замена сайлентблока заднего рычага',590,'zamena-sajlentbloka-zadnego-ryichaga' ],
['Замена сайлентблоков нижнего рычага',690,'zamena-sajlentblokov-nizhnego-ryichaga' ],
['Замена сайлентблоков переднего рычага',880,'zamena-sajlentblokov-perednego-ryichaga' ],
['Замена сайлентблоков продольного рычага',1200,'zamena-sajlentblokov-prodolnogo-ryichaga' ],
['Замена сайлентблоков развального рычага',1100,'zamena-sajlentblokov-razvalnogo-ryichaga' ],
['С/у двигателя',13900,'s/u-dvigatelya'],
['Замена ГБЦ',3900,'zamena-gbcz'],
['Замена маслосъемных колпачков',2400,'zamena-maslosemnyix-kolpachkov'],
['Ремонт клапанов',900,'remont-klapanov'],
['Ремонт форсунок',900,'remont-forsunok'],
['Замена вкладышей коленвала',4000,'zamena-vkladyishej-kolenvala'],
['Замена гидрокомпенсаторов',4900,'zamena-gidrokompensatorov' ],
['Замена головки блока цилиндров',3900,'zamena-golovki-bloka-czilindrov' ],
['Замена двигателя',14900,'zamena-dvigatelya'],
['Замена заднего сальника коленвала (при снятой КПП)',700,'zamena-zadnego-salnika-kolenvala-(pri-snyatoj-kpp)'],
['Замена направляющих втулок клапанов',3200,'zamena-napravlyayushhix-vtulok-klapanov' ],
['Замена переднего сальника коленвала',5500,'zamena-perednego-salnika-kolenvala' ],
['Замена поддона картера',900,'zamena-poddona-kartera' ],
['Замена подушек двигателя',1100,'zamena-podushek-dvigatelya'],
['Замена поршневой группы',2490,'zamena-porshnevoj-gruppyi'],
['Замена поршневых колец',1985,'zamena-porshnevyix-kolecz' ],
['Замена приводного ремня',980,'zamena-privodnogo-remnya' ],
['Замена распредвала',4990,'zamena-raspredvala' ],
['Замена сальника коленвала',4290,'zamena-salnika-kolenvala' ],
['Замена сальника распредвала',3290,'zamena-salnika-raspredvala'],
['Замена турбины',2990,'zamena-turbinyi' ],
['Замена цепи ГРМ',7800,'zamena-czepi-grm' ],
['Капитальный ремонт двигателя',39900,'kapitalnyij-remont-dvigatelya'],
['Переборка двигателя',12000,'pereborka-dvigatelya' ],
['Ремонт блока цилиндров',9890,'remont-bloka-czilindrov'],
['Ремонт ГБЦ',24900,'remont-gbcz'],
['Ремонт и замена коленчатого вала (коленвала)',4990,'remont-i-zamena-kolenchatogo-vala-(kolenvala)' ],
['Ремонт и замена масляного насоса',4990,'remont-i-zamena-maslyanogo-nasosa' ],
['Ремонт радиатора охлаждения',4990,'remont-radiatora-oxlazhdeniya'],
['Ремонт системы охлаждения',2000,'remont-sistemyi-oxlazhdeniya' ],
['Ремонт турбины',1000,'remont-turbinyi' ],
['Снятие/установка/замена форсунок высокого давления',1900,'snyatie/ustanovka/zamena-forsunok-vyisokogo-davleniya']
];
foreach($resources as $resource) {
    $id = $resource->get('id');
   foreach($array as $v){
       $resource2 = $modx->getObject ('modResource', array('pagetitle'=>$v['0'], 'parent' => $id));
    
if(!$resource2){
  $response = $modx->runProcessor('resource/create', array(
    'template' => 17,
    'isfolder' => 0,
    'tvs' => 1,
    'tv41' => $v[1]+round(rand(10, 90), -1),
    'published' => 0,
    'createdby' => 1,
    'parent' => $id,
    'pagetitle' => $v['0'],
    'createdon' => date("Y-m-d H:i:s" , 1646952099),
    'class_key' => 'modDocument',
  ));
  if ($response->isError()) {
      return $modx->error->failure($response->getMessage());
    }
    $modx->cacheManager->clearCache();
}
       
   }
}суть скрипта в следующем, находим родительские ресурсы по условию и создаем в них дочерние из списка.Проблема в том что приходится запускать несколько раз скрипт с условием отбора родительских ресурсов:
'id:>' => 0, 'id:<' => 1000затем 'id:>' => 1000, 'id:<' => 1500и тд так как если без этого условия скрипт просто зависает. Возможно ли как-то обойти это и оптимизировать скрипт, чтобы создать ресурсы за один проход?PS скрипт запускаю через modx console, видимо происходит остановка скрипта из-за длительности его выполнения
Расширение всплывающего меню ресурса в админке
            Добрый день! 
Подскажите как добавить пункт в выпадающее меню при клике правой кнопкой мыши на ресурс, там есть пункт «снять с публикации» хочу добавить пункт «исключить из поиска» и менять поле searchable
        
        
        
    Подскажите как добавить пункт в выпадающее меню при клике правой кнопкой мыши на ресурс, там есть пункт «снять с публикации» хочу добавить пункт «исключить из поиска» и менять поле searchable
Modx_session весит 4гб
            Добрый день!
Подскажите пожалуйста как не хранить сессии в бд? В системных настройках параметры установлены:
cache_db_session: false
cache_db_session_lifetime: 600
как можно автоматически чистить сессии, так как хостер ругается на большой обьем базы данных
        
        
        
    Подскажите пожалуйста как не хранить сессии в бд? В системных настройках параметры установлены:
cache_db_session: false
cache_db_session_lifetime: 600
как можно автоматически чистить сессии, так как хостер ругается на большой обьем базы данных
Несколько доменов - один сайт
            Приветствую!
Подскажите пожалуйста, можно ли сделать без контекстов мультидоменность сайта?
Необходимо чтобы с 60 разных доменных имен открывался один сайт на modx, шаблон/страница все одинаковое, через контексты придется копировать множество страниц для каждого домена, что усложняет реализацию.
        
        
        
    Подскажите пожалуйста, можно ли сделать без контекстов мультидоменность сайта?
Необходимо чтобы с 60 разных доменных имен открывался один сайт на modx, шаблон/страница все одинаковое, через контексты придется копировать множество страниц для каждого домена, что усложняет реализацию.
Ошибка "Произошла ошибка при регистрации действий менеджера."
            После установки debugParser на сайте начали долго сохраняться ресурсы/шаблоны/чанки/сниппеты и в логах постоянно ошибка:
        
        
        
    [2020-05-24 20:28:48] (ERROR @ /var/www/u0429794/data/www/mytopsto.ru/core/xpdo/om/xpdoobject.class.php : 1452) Error 23000 executing statement:
INSERT INTO `modx_manager_log` (`user`, `occurred`, `action`, `classKey`, `item`) VALUES (1, '2020-05-24 20:28:48', 'propertyset_update_from_element', 'modPropertySet', 'modTemplate 4 Default')
Array
(
    [0] => 23000
    [1] => 1062
    [2] => Duplicate entry '0' for key 'PRIMARY'
)
[2020-05-24 20:28:48] (ERROR @ /var/www/u0429794/data/www/mytopsto.ru/core/model/modx/modx.class.php : 1969) Произошла ошибка при регистрации действий менеджера.Не срабатывает автоинкремент на id с чем это может быть связанно?        Группировка выдачи pdoResources по родителю
            Всем привет! 
Столкнулся с проблемой, вывожу сниппетом pdoResources категории и дочерние элементы указывая &depth = `1`,
выводит сперва все дочерние элементы, а после список категорий, как можно сделать так, чтобы выводился родитель, а следом его дочерние элементы, основным критерием решения является избежать вызов сниппета pdoResources внутри чанка (так задача решается очень просто в ущерб производительности)
        
        
        
    Столкнулся с проблемой, вывожу сниппетом pdoResources категории и дочерние элементы указывая &depth = `1`,
выводит сперва все дочерние элементы, а после список категорий, как можно сделать так, чтобы выводился родитель, а следом его дочерние элементы, основным критерием решения является избежать вызов сниппета pdoResources внутри чанка (так задача решается очень просто в ущерб производительности)
Медленная работа сайта при большом объеме страниц
            Всем привет! 
На сайте больше 180тыс страниц, и в связи с этим первая загрузка страницы до появления кэша длится очень долго, а именно ответ от сервера более 3с, подскажите с чем это может быть связанно, и как это можно отследить/исправить? Хостинг REG.RU сайт mytopsto.ru
Все сниппеты запускаю через fenom кэшируемыми, очень часто использую параметр where для выборки страниц.
Еще вопрос быстрее ли будет указывать чанк для формирования выдачи сниппета или указывать 'tpl' => '@INLINE...'?
И еще вопрос, так как много ссылок и их я генерирую с помощью {$_modx->makeURL($id,"",«full»)}, может есть быстрее решение?
Скрин из Google PSI

Одна из причин что цены на услуги хранятся в TV и при выводе таблицы цен на странице все зависает на 40сек, подскажите как лучше реализовать такой функционал, где хранить цену чтобы выводить ее было быстрее, я пока думаю что было бы логично расширить таблицу modx_site_content, и добавить в нее столбец с ценой, или это плохая идея?
        
        
        
    На сайте больше 180тыс страниц, и в связи с этим первая загрузка страницы до появления кэша длится очень долго, а именно ответ от сервера более 3с, подскажите с чем это может быть связанно, и как это можно отследить/исправить? Хостинг REG.RU сайт mytopsto.ru
Все сниппеты запускаю через fenom кэшируемыми, очень часто использую параметр where для выборки страниц.
Еще вопрос быстрее ли будет указывать чанк для формирования выдачи сниппета или указывать 'tpl' => '@INLINE...'?
И еще вопрос, так как много ссылок и их я генерирую с помощью {$_modx->makeURL($id,"",«full»)}, может есть быстрее решение?
Скрин из Google PSI

Одна из причин что цены на услуги хранятся в TV и при выводе таблицы цен на странице все зависает на 40сек, подскажите как лучше реализовать такой функционал, где хранить цену чтобы выводить ее было быстрее, я пока думаю что было бы логично расширить таблицу modx_site_content, и добавить в нее столбец с ценой, или это плохая идея?
Как использовать $modx в подключаемом php файле?
            Приветствую! 
Столкнулся с следующей проблемой:
Не получается вывести системную настройку в костюмном классе обработки доставки, код пример брал из документации — все работает пока не пытаюсь получить системную настройку:
        
        
        
    Столкнулся с следующей проблемой:
Не получается вывести системную настройку в костюмном классе обработки доставки, код пример брал из документации — все работает пока не пытаюсь получить системную настройку:
<?php
if(!class_exists('msDeliveryInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php';
}
class Delivery extends msDeliveryHandler implements msDeliveryInterface{
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $mdcf = 200;
        $cart = $order->ms2->cart->status();
        $cart_cost = $cart['total_cost'];
        if($cart_cost > $mdcf){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}Суть сводится к тому чтобы сделать бесплатной доставку при стоимости корзины больше 200, и я хочу эти 200 вывести в системных настройках чтобы менять их там для удобства. Но вот столкнулся с тем, что не работает $modx->getOption и сайт просто ложится и выводит пустую белую страницу код использую такой:<?php
if(!class_exists('msDeliveryInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php';
}
require_once $_SERVER['DOCUMENT_ROOT'].'/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
class Delivery extends msDeliveryHandler implements msDeliveryInterface{
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $mdcf = $modx->getOption('md_delivery_cf');
        $cart = $order->ms2->cart->status();
        $cart_cost = $cart['total_cost'];
        if($cart_cost > $mdcf){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}        Вопрос по службе оплаты minishop2
            Пишу небольшой компонент для оплаты и воткнулся на:
Как правило, вы сами настраиваете, куда обращаться и как передавать. Поэтому, в настройках PayPal я указываю адрес sitename.com/assets/components/minishop2/payment/paypal.php, который запускает MODX в режиме API. По сути — это контроллер приёма оплаты.
при заходе на этот файл у меня выводится Access Dained, права доступа на папки 755 на файлы 644, но пробовал и 755 сути не меняет, что делаю не так?
        
        
        
    Как правило, вы сами настраиваете, куда обращаться и как передавать. Поэтому, в настройках PayPal я указываю адрес sitename.com/assets/components/minishop2/payment/paypal.php, который запускает MODX в режиме API. По сути — это контроллер приёма оплаты.
при заходе на этот файл у меня выводится Access Dained, права доступа на папки 755 на файлы 644, но пробовал и 755 сути не меняет, что делаю не так?