API MODX REVOLUTION

API MODX REVOLUTION Работа с объектами modx

Содержание

modUser

Вернет дополнительные поля пользователя

<?php
    $user_id = 0;
    if(!empty($user_id)){
        if($modx->user->isAuthenticated()){
            $user_id = $modx->user->id;
        }
    }

    $extended = array();
    $user_id = (int)$user_id;
    if(!empty($user_id)){
        if($user_id){
            if($user        = $modx->getObject("modUser", $user_id)){
                $profile    = $user->getOne('Profile');
                $extended   = $profile->get('extended');
            }
        }
    }

Получить информацию о пользователе

<?php
    // Вернет объект modUser
    $object = $modx->getUser();

    // id пользователя авторизованного
    $modx->getLoginUserID();

    // Добавить пользователя в группу
    $groupName = 'Users';
    $modx->user->joinGroup($groupName);

    # проверка принадлежности к группе пользователей
    if($modx->user->isAuthenticated()){
        $group = array(1); // id группы
        $userGroup = $modx->user->getUserGroups(); // список груп авторизированного пользователя
        $group_in = array_intersect($group, $userGroup); // сравнение
    }

    # проверка доступа к группе (можно массив)
    if ($modx->user->isMember('Менеджеры')) {
        return true;
    }

    // Генерация нового пароля
    $modx->user->generatePassword();

getObjectGraph

Получить связующие объекты

<?php
    $id = array('id' => 1);

    // Из одного объекта
    $object = $modx->getObjectGraph('modResource', '{"Parent":{}}', $criteria);
    echo '<pre>';
    print_r($object->Parent->toArray()); die;

    // Из многих объектов
    $object = $modx->getObjectGraph('modResource', '{"TemplateVars":{}}', $criteria;
    foreach ($object->TemplateVars as $tv) {
       echo '<pre>';
       print_r($tv->toArray()); die;
    }

getCollectionGraph

Получить связующие объекты в коллекции

<?php
    $products = $this->modx->getCollectionGraph('msopModification', '{"Product":{"Data":{"Vendor":{}}}}');
        foreach ($products as $product) {
            echo '<pre>';
            print_r($product->toArray()); die;
        }

getCollection

Сделать элементы сайта не статичными

<?php
    $elements = array('modPlugin','modChunk','modSnippet');
    foreach ($elements as $name) {
        $c = $modx->newQuery($name);
        $c->where(array('static' => 1));
        if($objectList = $modx->getCollection($name, $c)){
            foreach ($objectList as $object) {

                $object->set('static', 0);
                $object->save();
            }
        }
    }

Выборка записей в массив

Быстрая выборка записей не обрабатывая класс объекта

<?php
    // getList object
    $nameObject = 'modResource';
    $q = $modx->newQuery($nameObject);
    $q->select($modx->getSelectColumns($nameObject,$nameObject,'', array('id','url'), true));
    $q->sortby($nameObject.'.id','ASC');
    if ($q->prepare() && $q->stmt->execute()){
        $objectsData = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
        if(is_array($objectsData) && count($objectsData)>0){
            foreach($objectsData as $row){

            }
        }
    }

еще быстрее так как в памяти ничего не хранится

<?php
    // getList object
   // getList object
    $q = $this->modx->newQuery('modResource');
    $q->select('id,code');
    $q->sortby('id','ASC');
    if ($q->prepare() && $q->stmt->execute()){
        while($row = $q->stmt->fetch(PDO::FETCH_ASSOC)){
            $row = '';
        }
    }

msProduct

<?php
    $parent = 15625;
    /* @var msProduct $object*/
    $c = $modx->newQuery('msProduct');
    $c->where(array('parent' => $parent));
    $c->limit(120);
    if($objectList = $modx->getCollection('msProduct', $c)){
        foreach ($objectList as $object) {

        }
    }

Log

Логирование сообщений

поиск ресурсов по uri в контексте

<?php
      // Load main services
   //$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
   //$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
   //$modx->setLogLevel($is_debug ? modX::LOG_LEVEL_INFO : modX::LOG_LEVEL_ERROR);
   $modx->getService('error','error.modError');
   $modx->error->message = null;

   // Установка места куда будут записываться логи
   $log_target = array(
       'target'=>'FILE',
       'options' => array(
           'filename'=>'import.log',
           'filepath' => MODX_CORE_PATH.'cache/registry/mgr/import/'
       )
   );

Create and Update

Создания и обновление полей объектов MODX REBOLUTION по схемам

Перегенерация schema для объектов modx таблицы

Необходимо создать файл: /core/components/ИМЯ компонента/model/build.model.php и указать имя компонента $package

<?php

    //For run from Console paste follow line
    //require MODX_CORE_PATH . 'components/nameComponents/model/build.model.php';

    /********************************************************/
    /**
     * Recursive directory remove
     *
     */
    function rrmdir($dir) {
        if (is_dir($dir)) {
            $objects = scandir($dir);

            foreach ($objects as $object) {
                if ($object != "." && $object != "..") {
                    if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
                }
            }

            reset($objects);
            rmdir($dir);
        }
    }

    if (!isset($modx)) {
        $root = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
        define('MODX_API_MODE', true);
        require $root.'/index.php';
    }

    $package = 'ИМЯ КОМПОНЕНТА'; // Class name for generation
    $prefix = $modx->config['table_prefix']; // table prefix

    // Folders for schema and model
    $modelPath = $modx->getOption('core_path').'components/'. $package . '/model/';
    $schemaPath = $modelPath.'schema/';
    $xml = $schemaPath.$package.'.mysql.schema.xml';

    // Remove old files
    rrmdir($modelPath.$package .'/mysql');

    /*******************************************************/

    $modx->error->message = null;
    $modx->loadClass('transport.modPackageBuilder', '', false, true);
    $manager = $modx->getManager();

    $generator = $manager->getGenerator();
    $generator->parseSchema($xml, $modelPath);

    print "\nDone\n";

Второй шаг

Указываем объект для которого будут генерировать новы схемы. На всяки случай установлена проверка при условии что в таблице уже есть данные то схемы объекта не будут перезаписыватся

<?php
   ini_set('display_errors', 1);
   ini_set("max_execution_time", 50);
   define('MODX_API_MODE', true);
   require 'index.php';

   $object = 'tmContracts';
   $tmObjectCount = $modx->getCount($object);
   if (!empty($tmObjectCount)) {
       $message = 'Таблица ' . $object . ' содержит записи .' . $tmObjectCount . ' шт.';
   } else {
       require MODX_CORE_PATH . 'components/minishop/model/build.model.php';
       // Сделать создание таблиц для активных справочников
       $manager = $modx->getManager();
       $generator = $manager->getGenerator();
       $manager->removeObjectContainer($object);
       $manager->createObjectContainer($object);
       $message = 'Объект ' . $object . ' перезаписан';

   }
   echo $message;

Select

Выборка полей объекта

$modx->getSelectColumns('modResource','modResource','', array('id','url'), true);

Объекты minishop

<?php

    $xpdo_meta_map = array (
      'modResource' =>
      array (
        0 => 'msCategory',
        1 => 'msProduct',
      ),
      'xPDOSimpleObject' =>
      array (
        0 => 'msProductData',
        1 => 'msVendor',
        2 => 'msProductFile',
        3 => 'msDelivery',
        4 => 'msPayment',
        5 => 'msOrder',
        6 => 'msOrderStatus',
        7 => 'msOrderLog',
        8 => 'msOrderAddress',
        9 => 'msOrderProduct',
        10 => 'msLink',
        11 => 'msOption',
      ),
      'xPDOObject' =>
      array (
        0 => 'msCategoryMember',
        1 => 'msProductOption',
        2 => 'msDeliveryMember',
        3 => 'msProductLink',
        4 => 'msCustomerProfile',
        5 => 'msCategoryOption',
      ),
    );

Другое

поиск ресурсов по uri в контексте

<?php
    $uri = 'catalog';
    $find = $modx->findResource($uri, 'web');

Вызвать процессор

<?php
    $data = array(
        'name' => '',
    );
    /* @var modProcessorResponse $response */
    $response = $modx->runProcessor('product/create', $data, array(
        'processors_path' =>  MODX_CORE_PATH.'components/minishop/processors/mgr/'
    ));
    if ($response->isError()) {
        return $response->getAllErrors();
    }
    return $response->response;

Заготовка на API

<?php
   error_reporting(E_ALL | E_STRICT);
   ini_set('display_errors', 1);

   // Включаем консольный режим движка
   define('MODX_API_MODE', true);
   // Сам файл находится в домашней директории, а MODX по отношению к нему - в www
   require '../index.php';
   require_once "class.php";
   $mtime= microtime();
   $mtime= explode(" ", $mtime);
   $mtime= $mtime[1] + $mtime[0];
   $tstart= $mtime;

   function usage(){
       global $tstart, $modx;

       $memory = round(memory_get_usage(true)/1024/1024, 4).' Mb';

       print "<div>Memory: {$memory}</div>";

       $totalTime= (microtime(true) - $tstart);
       $totalTime= sprintf("%2.4f s", $totalTime);

       if(!empty($modx)){
           $queryTime= $modx->queryTime;
           $queryTime= sprintf("%2.4f s", $queryTime);
           $queries= isset ($modx->executedQueries) ? $modx->executedQueries : 0;

           $phpTime= $totalTime - $queryTime;
           $phpTime= sprintf("%2.4f s", $phpTime);

           print "<div>queries: {$queries}</div>";

           print "<div>queryTime: {$queryTime}</div>";

           print "<div>phpTime: {$phpTime}</div>";
       }

       print "<div>TotalTime: {$totalTime}</div>";
   }
12 июня 2017, 11:45    37018

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Наверх