OK still not working,
I have a table in my DB called bobs_quotation, I have 1 insert in the table to make sure it’s populated.
I created a snippet called CreateXpdoClasses, I changed the path to reflected my server. I tied just /core/ and /home/mysite/public_html/core/
/**
* @package = CreateXpdoClasses
*
* Create Xpdo Classes script
*
* This script creates xPDO-ready classes from existing custom
* database tables. It only needs to be run once.
*
* It works best when your custom tables have been imported into
* the MODx DB and use a different table prefix than the MODx tables.
* In theory, you can use a separate DB but this has not been tested
* and the process of using the classes would be more complicated.
*
*
* Note: If you are running this outside of MODx and testing it
* in the Manager, it will log you out when it runs, even though
* the Manager screen will still be visible. Actions taken in the
* Manager (e.g., saving a snippet) will not be successful. After
* running the script, reload the Manager page in your browser
* and you will be prompted to log back in.
*
*
*/
/* assume we're in a snippet */
$outsideModx = false;
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, '/home/mysite/public_html/core/');
include_once MODX_CORE_PATH . '/model/modx/modx.class.php';
$modx= new modX();
$modx->initialize('mgr');
}
/* set these if running outside of MODx */
if ($outsideModx) {
$myPackage = 'mypackage';
/* table prefix; must match the prefix of the tables to process */
$myPrefix = 'bobs_';
/* optional -- only if your table prefix is the same as the modx prefix */
// $myTables = 'bobs_quotation';
}
/* These two switches let you write the schema and/or create the classes;
* useful for debugging */
$createSchema = empty($createSchema)? true : $createSchema;
$createClasses = empty($createClasses) ? true : $createClasses;
/* Used to include the phpDoc templates below or other custom templates */
$includeCustomTemplates = empty($includeCustomTemplates)? false : $includeCustomTemplates;
/* $pkg is the name of your package. Use this in your addPackage() call to load all
* classes created by this script. The class files will be created
* under the /core/components/$myPackage/model/ directory.
* Example:
* $myPackage = 'quotes';
* $myPrefix = 'bobs_';
* $path = MODX_CORE_PATH . 'components/' . $myPackage . '/';
* $result = $modx->addPackage($myPackage, $path . 'model/', $myPrefix);
* if (! $result) {
* return('Failed to add package');
* }
*/
$myPackage = empty($myPackage)? 'mypackage' : $myPackage;
/* table prefix; must match the prefix of the tables you want to process */
$myPrefix = empty ($myPrefix)? '' : $myPrefix;
$myTables = empty($myTables)? '' : $myTables;
/* Table names to process -- this is only necessary if your table prefix is the same
* as that of the MODx tables. You can send a comma-separated list of full table names;
* in that case the class name will be the table name minus the prefix with any
* underscores removed and any letter after an underscore in upper case.
*
* You can also send an array of arrays of tableName => className, which allows you
* to specify the exact class name rather then letting MODx create it from the
* table name. Each inner array specifies a full table name and the class name to use.
* Examples:
$tables = 'bobs_quotation';
$tables = array(
array(
'bobs_quotation'=>'bobQuotation'
)
);
*/
/* You shouldn't need to modify the code beyond this point
********************************************************** */
$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']);
}
if (! file_exists($sources['core'])) {
mkdir($sources['core']);
}
if (! file_exists($sources['model'])) {
mkdir($sources['model']);
}
if (! file_exists($sources['schema'])) {
mkdir($sources['schema']);
}
require_once $sources['config'];
$dbase = str_replace('`','',$dbase);
$connectString = $database_type . ':' . 'host=' .
$database_server . ';' . 'dbname=' . $dbase;
/* note: $tablePrefix is the modx table prefix - not your prefix;
* should be set automatically */
$xpdo = new xPDO('mysql:host=localhost;dbname=test',
$database_user,$database_password,$table_prefix);
$xpdo->setLogLevel(xPDO::LOG_LEVEL_INFO);
$xpdo->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$manager= $xpdo->getManager();
$generator= $manager->getGenerator();
if ($includeCustomTemplates) {
customTemplates($generator);
}
$file = $sources['schema'] . $myPackage . '.mysql.schema.xml';
// echo '<br />File: ' . $file;
/* boolean writeSchema (
* string $schemaFile, full path to the schema file you want to write
* [string $package = ''], name of your component
* [string $baseClass = ''], xPDO base class to use (send '' if using args below)
* [string $tablePrefix = ''], table prefix (of tables to process)
* [boolean $restrictPrefix = false]), process only tables with the above prefix
* [mixed $tableList = '' array of arrays of full-table-name=>className
or a string with a comma-separated list of full
table names; if you send the string
* the table name will be used as the class name.
*/
if ($createSchema) {
$xml= $generator->writeSchema($file,$myPackage,'',$myPrefix,true,$myTables);
if ($xml) {
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'schema file written to ' . $file);
} else {
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Error writing schema file');
}
}
if ($createClasses) {
if ($generator->parseSchema($file, $sources['model'])) {
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Schema file parsed .
Files written to '. $sources['model']);
} else {
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'Error parsing schema file');
}
}
$xpdo->log(xPDO::LOG_LEVEL_INFO, 'FINISHED');
exit();
function customTemplates($generator) {
$generator->classTemplate= <<<EOD
<?php
/**
*
*
*/
class extends {
}
?>
EOD;
$generator->platformTemplate= <<<EOD
<?php
/**
*
*
*/
require_once (dirname(dirname(__FILE__)) .
'/.class.php');
class _ extends {
}
?>
EOD;
$generator->mapHeader= <<<EOD
<?php
/**
*
*
*/
EOD;
}
I created a blank document, with a blank template with this snippet call. [[CreateXpdoClasses? &myPackage=`quotes` &myPrefix=`bobs_`]]
I created a folder (quotes) in /home/mysite/public_html/core/components/
I went to the page with the snippet and I still get this error.
[2010-10-19 19:40:36] (ERROR in xPDO::connect @ /home/mysite/public_html/core/xpdo/xpdo.class.php : 318)
SQLSTATE[28000] [1045] Access denied for user 'nobody'@'localhost' (using password: NO)
Fatal error: Call to a member function execute() on a non-object in /home/mysite/public_html/core/xpdo/om/mysql/xpdogenerator.class.php on line 103
In the quotes folder there are 2 directories made, model and schema but both are empty.
I must be doing something wrong?
Do I need to enable this part of the code.
$myPackage = 'quotes';
$myPrefix = 'bobs_';
$path = MODX_CORE_PATH . 'components/' . $myPackage . '/';
$result = $modx->addPackage($myPackage, $path . 'model/', $myPrefix);
if (! $result) {
return('Failed to add package');
}
I do not get that last error but it now says Failed to add package if I do.