<?php
$resource->setTVValue('version', $resource->getTVValue('version') + 1);
$result = $modx->query("SELECT value FROM modx_site_tmplvar_contentvalues WHERE tmplvarid=2 AND contentid=$id");
$row = $result->fetch(PDO::FETCH_ASSOC);
$version = $row['value'] + 1;
$modx->query("UPDATE modx_site_tmplvar_contentvalues SET value=$version WHERE tmplvarid=2 AND contentid=$id");
This question has been answered by Bruno17. See the first response.
$tvr = $modx->getObject('modTemplateVarResource', array('contentid' => $docId, 'tmplvarid' => $tvId));
if ($tvr) {
$val = (int) $tvr->get('value');
$tvr->set('value', $val + 1);
$tvr->save();
}
$cm = $modx->getCacheManager(); $cm->refresh();
$modx->reloadContext('web');$modx->reloadContext('mgr');$modx->sendRedirect(MODX_MANAGER_URL . '?a=resource/update&id=' . $id)

CREATE TABLE `modx_site_content_version` ( `id` int(11) NOT NULL, `contentid` int(11) NOT NULL, `version` int(11) NOT NULL ) DEFAULT CHARSET=utf8; ALTER TABLE `modx_site_content_version` ADD PRIMARY KEY(`id`); ALTER TABLE `modx_site_content_version` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT; ALTER TABLE `modx_site_content_version` ADD INDEX(`id`);
<?php
/**
* @package = CreateXpdoClasses
*
* Create Xpdo Classes script
*
* This script creates xPDO-ready classes from existing custom
* database tables. Run it again whenever you change
* your schema.
*
* It assumes that 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. To do this, you would need to set the
* following variables after including the config file,
* but before creating the $modx object:
*
* $database_server = 'yourDbServer';
* $database_type = 'mysql';
* $dbase = 'yourDbName';
* $database_user = 'user';
* $database_password = 'password';
* $table_prefix = 'yourPrefix_';
*
* In the snippets that use the classes, you'd need to
* instantiate a new $xpdo object, and use $xpdo-> rather
* than $modx-> to call the methods.
* $xpdo = new xPDO('mysql:host=localhost;dbname=yourDbName',
* $database_user,$database_password,$table_prefix);
*
* 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, 'c:/xampp/htdocs/test/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. Using the same prefix as the MODX
* tables is not recommended */
$myPrefix = 'bobs_';
// $myTables = 'bobs_quotation';
}
/* These two switches let you write the schema and/or
* create the classes; useful for debugging and for leaving
* a manually edited schema file alone*/
$createSchema = $modx->getOption('createSchema',
$scriptProperties,true);
$createClasses = $modx->getOption('createClasses',
$scriptProperties,true);
/* Used to include the phpDoc templates below or
* other custom templates */
$includeCustomTemplates = empty($includeCustomTemplates)?
false : $includeCustomTemplates;
/* $myPackage 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;
/* Table names to process -- this is only necessary if
* your table prefix is the same as that of the MODX
* tables (not recommended). 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.
*
* NOTE: This feature may not be implemented yet.
*
* Examples:
$myTables = 'bobs_quotation';
$myTables = array(
array(
'bobs_quotation'=>'bobQuotation'
)
);
*/
$myTables = empty($myTables)? '' : $myTables;
/* 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'],0777);
}
if (! file_exists($sources['model'])) {
mkdir($sources['model'],0777);
}
if (! file_exists($sources['schema'])) {
mkdir($sources['schema'],0777);
}
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$manager = $modx->getManager();
$generator = $manager->getGenerator();
if ($includeCustomTemplates) {
customTemplates($generator);
}
$file = $sources['schema'] . $myPackage .
'.mysql.schema.xml';
// echo '<br/>File: ' . $file;
/* writeSchema() arguments
* ---------------------------
* string $schemaFile -- Full path to the schema file
* you want to write
* string $package -- (optional) Name of your component
* string $baseClass -- (optional) xPDO base class to use;
* (send '' if using args below)
* string $tablePrefix -- Table prefix (of tables to
* process)
* boolean $restrictPrefix) -- (optional) Process only
* tables with $tablePrefix
* 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.
*
* returns true on success, false on failure
*/
if ($createSchema) {
$xml= $generator->writeSchema($file,
$myPackage, '',$myPrefix,true,$myTables);
if ($xml) {
$modx->log(modX::LOG_LEVEL_INFO,
'Schema file written to ' . $file);
} else {
$modx->log(modX::LOG_LEVEL_INFO,
'Error writing schema file');
}
}
if ($createClasses) {
if ($generator->parseSchema($file, $sources['model'])){
$modx->log(modX::LOG_LEVEL_INFO,
'Schema file parsed -- Files written to ' .
$sources['model']);
} else {
$modx->log(modX::LOG_LEVEL_INFO,
'Error parsing schema file');
}
}
$modx->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;
}
<?php
$path = MODX_CORE_PATH . 'components/version/';
$result = $modx->addPackage('Version', $path . 'model/','modx_site_content_');
$currentResource= $modx->getObject('Version', array('contentid' => $id));
if (empty($currentResource)) {
$newResource = $modx->newObject('Version', array(
'contentid' => $id,
'version' => 1
));
$newResource->save();
}
else {
$currentResource->set('version', $currentResource->get('version') + 1);
$currentResource->save();
}
unset($path, $result, $currentResource, $newResource, $id);
<?php
$result = $modx->query("SELECT version FROM modx_site_content_version WHERE contentid=$id");
$row = $result->fetch(PDO::FETCH_ASSOC);
return $row['version'];
unset($result, $row);
[[getVersion?id=`[[*id]]`]]
<?php
$resources = $modx->getCollection('modResource', array('class_key'=>'modDocument'));
foreach ($resources as $resource) {
$path = MODX_CORE_PATH . 'components/version/';
$result = $modx->addPackage('Version', $path . 'model/','modx_site_content_');
$currentResource= $modx->getObject('Version', array('contentid' => $resource->get('id')));
if (empty($currentResource)) {
$newResource = $modx->newObject('Version', array(
'contentid' => $resource->get('id'),
'version' => 1
));
$newResource->save();
}
else {
$currentResource->set('version', $currentResource->get('version') + 1);
$currentResource->save();
}
}
