<?php if($modx->context->key == 'mgr') return; $modx->loadClass('sources.modMediaSource');
<?php if ($object->xpdo) { $modx =& $object->xpdo; // $modelPath = $modx->getOption($pkgName.'.core_path',null,$modx->getOption('core_path').'components/ '.$pkgName.'/').'model/'; switch ($options[xPDOTransport::PACKAGE_ACTION]) { case xPDOTransport::ACTION_INSTALL: case xPDOTransport::ACTION_UPGRADE: if ($modx instanceof modX) { if(!$modx->loadClass('transport.modTransportPackage')){ return $modx->log(modX::LOG_LEVEL_ERROR, "Could not load modTransportPackage class"); } /* * Packages need to install */ $packages = array( 'Wayfinder', 'getResources', 'getPage', 'Ace', 'TinyMCE', 'phpTemplates', 'GoogleSiteMap', ); $modx->log(modX::LOG_LEVEL_INFO, "Trying to install packages: ". implode(", ", $packages). "<br />\n Be patient. it`s take a several moments."); $modx->setLogLevel(modX::LOG_LEVEL_INFO); $LogTarget = $modx->getLogTarget(); $LogTopic = $LogTarget->subscriptions[0]; $messages = array(); foreach($packages as $packageName){ if(!$packageName) continue; if($packageExists = $modx->getObject('modTransportPackage', array( 'package_name' => $packageName, ))){ $messages[] = array( 'level' => modX::LOG_LEVEL_INFO, 'msg' => "Package '{$packageName}' allready exists" , ); /* * Check is installed */ if(!$packageExists->get('installed')){ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Package '{$packageName}' exists, but not installed. Please, install it manually" , ); } continue; } // $modx->log(modX::LOG_LEVEL_INFO, "Try to get '{$packageName}' package."); $response = $modx->runProcessor('workspace/packages/rest/getlist', array( 'provider' => 1, 'query' => $packageName, )); if($response->isError()){ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => $response->getMessage(), ); continue; } if(!$result = json_decode($response->getResponse())){ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Error while reading results" , ); continue; } /* * Try to find package info */ foreach($result->results as $r){ $package = (array)$r; if($package['name'] == $packageName){ goto downloadPackage; } } /* * Info was not found */ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Package '{$packageName}' was not found. Please try to install it manually" , ); continue; /* * Download Package */ downloadPackage: $messages[] = array( 'level' => modX::LOG_LEVEL_INFO, 'msg' => "Trying to download '{$packageName}' package" , ); $response = $modx->runProcessor('workspace/packages/rest/download', array( 'provider' => 1, 'info' => "{$package['location']}::{$package['signature']}", )); if($response->isError()){ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Failed download '{$packageName}'. ".$response->getMessage(), ); continue; } $result = $response->getResponse(); if($result['success'] == 1){ $messages[] = array( 'level' => modX::LOG_LEVEL_INFO, 'msg' => "Package '{$packageName}' downloaded success" , ); goto installPackage; } $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Failed download '{$packageName}'.", ); /* * Installing Package */ installPackage: $messages[] = array( 'level' => modX::LOG_LEVEL_INFO, 'msg' => "Trying to install '{$packageName}' package" , ); $response = $modx->runProcessor('workspace/packages/install', array( 'signature' => $package['signature'], )); if($response->isError()){ $messages[] = array( 'level' => modX::LOG_LEVEL_ERROR, 'msg' => "Failed install '{$packageName}'. ". $response->getMessage(), ); continue; } $messages[] = array( 'level' => modX::LOG_LEVEL_INFO, 'msg' => $response->getMessage() , ); } $modx->registry->setLogging($LogTarget, $LogTopic); // $modx->log(xPDO::LOG_LEVEL_ERROR, '$err'); // print_r($messages); $modx->setLogLevel(modX::LOG_LEVEL_INFO); foreach($messages as $msg){ $modx->log($msg['level'], $msg['msg']); } } break; } } return true;
Ты бы документацию почитал, что ли.
Путь к процессору указывается — это и в моей заметке есть. А runSnippet() выполняет нужное — ибо оно всегда лежит в одном и том же месте, в БД.
$obj = $modx->newObject('MyTable'); $obj->set('name', 'Калинка'); $obj->save(); // Или $obj = $modx->getObject('MyTable', array( 'name' => 'Калинка' )); print $obj->get('id');
<?php /*******************************************************/ /* Конфиги нашей схемы */ /*******************************************************/ // Имя Класса. Так будет потом называться Класс при вызове $modx->addPackage() $obj = 'program'; /* Префикс таблиц. Если префикс не отличается от системного, то можно вообще не указывать. К сожалению, xPDO при генерации не позволяет перечислять имена конкретных таблиц, которые нам нужны, а позволяет отсеять только по префиксу. */ $tablePrefix='modx_program_'; // Папка, где будет записана XML-схема и все файлы создаваемого объекта // Путь к файлам класса вы будете потом прописывать в вызове метода $modx->addPackage(); $Path = dirname(__FILE__).'/model/'; // Файл-схема $Schema = $Path.'/'.$obj.'.mysql.schema.xml'; /*******************************************************/ // Подгружаем основной файл-конфиг сайта или самим придется прописывать все основные настройки require_once dirname(dirname(dirname(__FILE__))).'/core/config/config.inc.php'; // Подружаем основной класс MODx include_once MODX_CORE_PATH . 'model/modx/modx.class.php'; // Инициализируем класс MODx $modx= new modX(); // Инициализируем контекст, если принципиально // $modx->initialize('mgr'); // Устанавливаем настройки логирования // Не обязательно $modx->setLogLevel(modX::LOG_LEVEL_INFO); $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML'); // !!! Обязательно! // Подгружаем основной класс-пакер $modx->addPackage('transport.modPackageBuilder', '', false, true); // Указатель типа базы данных (MySQL / MsSQL и т.п.) $manager = $modx->getManager(); // Класс-генератор схем $generator = $manager->getGenerator(); // Генерируем файл-XML // /xpdo/om/mysql/xpdogenerator.class.php // public function writeSchema($schemaFile, $package= '', $baseClass= '', $tablePrefix= '', $restrictPrefix= false) // $tablePrefix - указываем, если хотим только те таблицы, которые начинаются с этого префикса. // $restrictPrefix - указывает true, если хотим получить таблицы только по префиксу $xml= $generator->writeSchema($Schema, $obj, 'xPDOObject', $tablePrefix ,$restrictPrefix=true ); // Создает классы и мапы (php) по схеме xml $generator->parseSchema($Schema, $Path); print "<br /><br />Выполнено";
<model package="testtbl" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <object class="Tbl" table="tbl" extends="xPDOObject"><param name="wmode" value="opaque"></param>
<model package="testtbl"
$modx->addPackage( $package, $path, $prefix); // !!! Проверка в функции addPackage не канает, так как проверяется только присутствие названия пакета в принципе и чтобы указанный путь был директорией, и всё.
$result = $modx->getCollection('Tbl'); foreach($result as $row){ print "<br />Next:". $row->get('columnName'); }
private static function testCreateRows(){ $pkg = 'testtbl'; $modx->addPackage( 'testtbl', $Path , 'modx_kl_test')) ; $row = $modx->newObject('Tbl'); $row->fromArray(array( 'id' => 5 )); return $row->save(); }