if (!defined('MODX_CORE_PATH')) {
$outsideModx = true;
/* put the path to your core in the next line to run
* outside of MODX */
define('MODX_CORE_PATH', 'the_path_to_my_core');
define('MODX_CONFIG_KEY', 'config');
include_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$host = 'hostname';
$username = 'username ';
$password = 'password';
$dbname = 'my_db';
$port = 3306;
$table_prefix = 'modx_';
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
$modx = new xPDO($dsn, $username, $password);
$modx->initialize('mgr');
}$modx->initialize('mgr'); define('MODX_CORE_PATH', 'the_path_to_my_core'); // needs to be changed
define('MODX_CONFIG_KEY', 'config');
include_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$host = 'hostname'; // needs to be changed
$username = 'username '; // needs to be changed
$password = 'password'; // needs to be changed
$dbname = 'my_db'; // needs to be changed
$port = 3306; // needs to be changed
$table_prefix = 'modx_';
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset"; // needs to be changed
<?php
$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = $mtime[1] + $mtime[0];
$tstart = $mtime;
set_time_limit(0);
/* define package name */
define('PKG_NAME','cwDB');
define('PKG_NAME_LOWER',strtolower(PKG_NAME));
//Customize this line based on the location of your script
include_once (dirname(dirname(dirname(dirname(__FILE__)))).'/core/xpdo/xpdo.class.php');
$host = 'localhost';
$username = 'homestead';
$password = 'secret';
$dbname = 'cwdb';
$port = 3306;
$charset = 'utf8';
$tablePrefix = 'cw_';
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
$xpdo = new xPDO($dsn, $username, $password, $tablePrefix);
$xpdo->setDebug(true);
// Test your connection
echo $o = ($xpdo->connect()) ? 'Connected' : 'Not Connected';
echo '<pre>'; /* used for nice formatting of log messages */
$manager= $xpdo->getManager();
$generator= $manager->getGenerator();
$generator->classTemplate= <<<EOD
<?php
/**
* [+phpdoc-package+]
*/
class [+class+] extends [+extends+] {}
?>
EOD;
$generator->platformTemplate= <<<EOD
<?php
/**
* [+phpdoc-package+]
*/
require_once (strtr(realpath(dirname(dirname(__FILE__))), '\\\\', '/') . '/[+class-lowercase+].class.php');
class [+class+]_[+platform+] extends [+class+] {}
?>
EOD;
$generator->mapHeader= <<<EOD
<?php
/**
* [+phpdoc-package+]
*/
EOD;
$xpdo->setPackage('cwdb', dirname(dirname(__FILE__)).'/core/components/cwdb/model/');
$schema = dirname(dirname(__FILE__)).'/core/components/cwdb/model/schema/cwdb.mysql.schema.xml';
$target = dirname(dirname(__FILE__)).'/core/components/cwdb/model/';
$generator->parseSchema($schema,$target);
$manager->createObjectContainer('UnconfirmedStudent');
$manager->createObjectContainer('Student');
$manager->createObjectContainer('StudentPayment');
$manager->createObjectContainer('Subject');
$manager->createObjectContainer('Level');
$manager->createObjectContainer('Location');
$manager->createObjectContainer('Enrolment');
$manager->createObjectContainer('Lesson');
$manager->createObjectContainer('Term');
$manager->createObjectContainer('SEBarcode');
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Done!');
$mtime= microtime();
$mtime= explode(" ", $mtime);
$mtime= $mtime[1] + $mtime[0];
$tend= $mtime;
$totalTime= ($tend - $tstart);
$totalTime= sprintf("%2.4f s", $totalTime);
echo "\nExecution time: {$totalTime}\n";
exit ();
public $modx = null;
public $namespace = 'cwdb';
public $foreignDB = null;
public $database_type = 'mysql';
public $database_connection_charset = 'utf8';
public $dbase = 'cwdb';
public $table_prefix = 'cw_';
public function __construct(modX &$modx, array $options = array()) {
$this->modx =& $modx;
$this->namespace = $this->getOption('namespace', $options, 'cwdb');
$this->database_server = 'localhost';
$this->database_user = 'homestead';
$this->database_password = 'secret';
$database_dsn = $this->database_type.':host='.$this->database_server.';dbname='.$this->dbase.' charset='.$this->database_connection_charset;
$options = array(
xPDO::OPT_HYDRATE_FIELDS => true,
xPDO::OPT_HYDRATE_RELATED_OBJECTS => true,
xPDO::OPT_HYDRATE_ADHOC_FIELDS => true
);
$this->foreignDB = new xPDO($database_dsn, $this->database_user, $this->database_password, $options);
$package_path = $modx->getOption('cwdb.core_path').'model/';
if ( !$this->foreignDB->addPackage('cwdb', $package_path, $this->table_prefix) ) {
return 'Can not load package';
}
return true;
}

Great info. Thanks for posting that.
@random_noob: Note that the script you were trying to use creates the schema file for you based on the structure of the DB table. With Murray's script, you have to create your own schema file on your local machine.
$createSchema = $xpdo->getOption('createSchema',
$scriptProperties,true);
$createClasses = $xpdo->getOption('createClasses',
$scriptProperties,true);
$includeCustomTemplates = empty($includeCustomTemplates) ? false : $includeCustomTemplates;
$myPackage = empty($myPackage)? 'mypackage' : $myPackage;
$myPrefix = empty ($myPrefix)? 'modx_' : $myPrefix;
$myTables = empty($myTables)? '' : $myTables;
$sources = array(
'config' => MODX_CORE_PATH . 'config/config.inc.php',
'package' => MODX_CORE_PATH . 'components/' .
$myPackage . '/',
'model' => MODX_CORE_PATH. 'components/' . $myPackage .
'/model/',
'schema' => MODX_CORE_PATH . 'components/' .
$myPackage . '/schema/',
);
if (! file_exists($sources['package'])) {
mkdir($sources['package'],0777);
}
if (! file_exists($sources['model'])) {
mkdir($sources['model'],0777);
}
if (! file_exists($sources['schema'])) {
mkdir($sources['schema'],0777);
}
$xpdo->setLogLevel(modX::LOG_LEVEL_INFO);
$xpdo->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
echo '<pre>'; /* used for nice formatting of log messages */
$manager= $xpdo->getManager();
$generator= $manager->getGenerator();
if ($includeCustomTemplates) {
customTemplates($generator);
}
$file = $sources['schema'] . $myPackage .
'.mysql.schema.xml';
if ($createSchema) {
$xml= $generator->writeSchema($file,
$myPackage, '',$myPrefix,true,$myTables);
if ($xml) {
$xpdo->log(modX::LOG_LEVEL_INFO,
'Schema file written to ' . $file);
} else {
$xpdo->log(modX::LOG_LEVEL_INFO,
'Error writing schema file');
}
}
if ($createClasses) {
if ($generator->parseSchema($file, $sources['model'])){
$xpdo->log(modX::LOG_LEVEL_INFO,
'Schema file parsed -- Files written to ' .
$sources['model']);
} else {
$xpdo->log(modX::LOG_LEVEL_INFO,
'Error parsing schema file');
}
}
$xpdo->log(modX::LOG_LEVEL_INFO, 'FINISHED');
exit();
function customTemplates($generator) {
$generator->classTemplate= <<<EOD
<?php
/**
* [+phpdoc-package+]
* [+phpdoc-subpackage+]
*/
class [[+class]] extends [[+extends]] {
}
?>
EOD;
$generator->platformTemplate= <<<EOD
<?php
/**
* [+phpdoc-package+]
* [+phpdoc-subpackage+]
*/
require_once (dirname(dirname(__FILE__)) .
'/[+class-lowercase+].class.php');
class [+class+]_[+platform+] extends [+class+] {
}
?>
EOD;
$generator->mapHeader = <<<EOD
<?php
/**
* [+phpdoc-package+]
* [+phpdoc-subpackage+]
*/
EOD;
$xpdo->setPackage('mypackage', MODX_CORE_PATH.'/components/mypackage/model/');
$schema = MODX_CORE_PATH.'/components/mypackage/model/schema/mypackage.mysql.schema.xml';
$target = MODX_CORE_PATH.'/components/mypackage/model/';
$generator->parseSchema($schema,$target);
$manager->createObjectContainer('body_type');
$manager->createObjectContainer('cylinders');
$manager->createObjectContainer('drivetrain');
$manager->createObjectContainer('engine_placement');
$manager->createObjectContainer('engine_type');
$manager->createObjectContainer('make');
$manager->createObjectContainer('model');
$manager->createObjectContainer('model_body');
$manager->createObjectContainer('model_details');
$manager->createObjectContainer('model_engine');
$manager->createObjectContainer('model_name');
$manager->createObjectContainer('model_performance');
$manager->createObjectContainer('model_specs');
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Done!');
$mtime= microtime();
$mtime= explode(" ", $mtime);
$mtime= $mtime[1] + $mtime[0];
$tend= $mtime;
$totalTime= ($tend - $tstart);
$totalTime= sprintf("%2.4f s", $totalTime);
echo "\nExecution time: {$totalTime}\n";
exit ();
} How are you setting the value of $myPrefix, $myTables, and $myPackage?
If you're running this as a snippet, the $xpdo variable would conflict with the MODX $xpdo variable, so you'd have to change its name in the script.