Skip to content

Instantly share code, notes, and snippets.

@dopsmain
Forked from christianhanvey/modx-snippets.php
Created September 8, 2016 09:08
Show Gist options
  • Save dopsmain/c490ed2dc0dcb7fdd941dcd8612a17b8 to your computer and use it in GitHub Desktop.
Save dopsmain/c490ed2dc0dcb7fdd941dcd8612a17b8 to your computer and use it in GitHub Desktop.
Useful snippets for MODX Revo
Snippet: [[SnippetName]]
Chunk: [[$ChunkName]]
System Setting: [[++SettingName]]
TV: [[*fieldName/TvName]]
Link tag: [[~PageId? &paramName=`value`]]
Placeholder: [[+PlaceholderName]]
<?php
/* ***************************************** */
/* GLOBALS AND SETTINGS */
/* ***************************************** */
/* always available objects */
$modx->resource; // the current document
$modx->user; // the current user
/* get a system setting */
$modx->getOption('SettingName'); // eg site_start
/* ***************************************** */
/* LOGGING */
/* ***************************************** */
/* log an error */
$elementName = '[SnippetName]';
$modx->log(modX::LOG_LEVEL_ERROR, $elementName.' Could not do something.');
// also: LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_WARN
/* change target of logging */
$modx->setLogTarget('FILE'); // or ECHO
$target = array(
'target' => 'FILE',
'options' => array(
'filename' => 'path_to_file'),
);
$modx->log(xPDO::LOG_LEVEL_ERROR, 'Error Message', $target);
/* change error level */
$modx->setDebug(E_ALL & ~E_NOTICE); // sets error_reporting to everything except NOTICE remarks
$modx->setLogLevel(modX::LOG_LEVEL_DEBUG);
// To report errors to the MODx error log:
trigger_error('...', E_USER_ERROR);
/* ***************************************** */
/* CHUNKS */
/* ***************************************** */
/* get simple chunk */
$modx->getChunk('ChunkName');
/* parse a chunk many times */
foreach ($docs as $doc) {
$output .= $modx->getChunk('teaserTpl', $doc->toArray() );
}
return $output;
/* ***************************************** */
/* SNIPPETS */
/* ***************************************** */
// class boilerplate for creating a class for use in a snippet
// provides access to $modx object by reference and snippet properties
class MyClass {
function __construct($modx, $scriptProperties) {
$this->modx =& $modx;
$this->props =& $scriptProperties;
}
public function init() {
$this->size = $this->props['size'];
$this->color = $this->props['color'];
}
}
/* ***************************************** */
/* RESOURCES */
/* ***************************************** */
$id = $modx->resource->get('id');
/* Display a particular document */
$resource = $modx->getObject('modResource', array('pagetitle'=>'MyDocument')); // with properties
$resource = $modx->getObject('modResource', $resourceID); // with a document id
$output = '<p>Document:' . $resource->get('longtitle') . '</p>';
$output .= '<p>Content:' . $resource->get('content') . '</p>';
/* change a resource property */
$resource = $modx->getObject('modResource', $resourceID); // with a document id
$resource->set('template', 7);
$resource->save();
/* get all published resources that have not been deleted */
$resources = $modx->getCollection('modResource',
array('published'=>'1','deleted'=>'0'));
foreach($resources as $resource) {
$output .= '<div class="resource"><p>Document:' .
$resource->get('longtitle') . '</p>';
$output .= '<p>Content:' . $resource->get('content') . '</p></div>';
}
/* Get the parent object of the current resource */
$parent = $modx->resource->getOne('Parent');
return $parent->get('pagetitle');
/* Get the child objects of the current resource */
$children = $modx->resource->getMany('Children');
foreach ($children as $child) {
$output .= '<p>' . $child->get('pagetitle') . '</p>';
}
/* ***************************************** */
/* TVs */
/* ***************************************** */
/* To set a TV value for the current resource */
$tv = $modx->getObject('modTemplateVar',array('name'=>'tvName')); // get the required TV object by name (or id)
$tv->setValue($modx->resource->get('id'), $newValue); // set the new value and save it
$tv->save();
/* to get a TV value for the current resource */
/* retrieve a number of TVs for resource */
$results = array();
$tvs = $modx->getCollection(
'modTemplateVar',
array("`name` IN (
'image',
'imageClass',
'imageAlt',
'imageCaption'
)")
);
foreach ($tvs as $tv) {
$results[$tv->get('name')] = (empty($processTVs) ? $tv->getValue($resourceId) : $tv->renderOutput($resourceId));
}
// render to a chunk of goodness
return $modx->getChunk('Picture.tpl',$results);
/* get all tvs for another resource */
$obj = $modx->getObject('modResource', array('name'=>'MyDoc'));
$id = $obj->get('id');
$tvs = $obj->getMany('TemplateVars');
foreach ($tvs as $tv) {
$rawValue = $tv->getValue($id);
$processedValue = $tv->renderOutput($id);
}
/* ***************************************** */
/* USERS */
/* ***************************************** */
/* Get all active users */
$users = $modx->getCollection('modUser',
array('active'=>'1'));
foreach ($users as $user) {
$output .= '<p>Username: ' . $user->get('username') . '</p>';
}
return $output;
/* Get the user object for the creator of the current document */
$user = $modx->resource->getOne('CreatedBy');
return $user->get('username');
/* Publish a set of resources from a list of resource IDs */
$resourceIds = array('12, 23, 32, 45');
foreach ($resourceIds as $id) {
$resource = $modx->getObject('modResource',$id);
$resource->set('published', '1');
$resource->save();
}
/* ***************************************** */
/* XPDO */
/* ***************************************** */
/* getObject - get one object/table row */
/* getCollection - get many objects/table rows */
/* getOne - get one related object */
/* getMany - get many related objects */
/* getCollectionGraph - get many objects and their related objects */
/* other xpdo object methods */
$object->get('fieldName');
$object->toArray();
/* change the template of many documents with the same parent */
foreach ($modx->getIterator('modResource', array('parent' =>15)) as $res) { $res->set('template',5); $res->save(); }
/* general xpdo query */
$sql = 'SELECT * FROM `'.$modx->getOption(xPDO::OPT_TABLE_PREFIX).'site_htmlsnippets`';
$result = $modx->query($sql);
if (!is_object($result)) {
return 'No result!';
}
else {
while ($row = $q_chunks->fetch(PDO::FETCH_ASSOC))
// do something: $row['name'];
}
}
/* ***************************************** */
/* MODX SERVICES - EMAIL */
/* ***************************************** */
/* send an email */
// first, get the email with the placeholders in it replaced by the snippet call.
// (Note the properties in the snippet call are in the array $scriptProperties.
// http://api.modx.com/revolution/2.1/_model_modx_mail_modmail.class.html
$message = $modx->getChunk('myEmail',$scriptProperties);
/* now load modMail, and setup options */
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,$scriptProperties['fromEmail']);
$modx->mail->set(modMail::MAIL_FROM_NAME,$scriptProperties['fromName']);
$modx->mail->set(modMail::MAIL_SENDER,$scriptProperties['fromName']);
$modx->mail->set(modMail::MAIL_SUBJECT,$scriptProperties['subject']);
$modx->mail->address('reply-to',$scriptProperties['fromEmail']);
$modx->mail->setHTML(true);
/* specify the recipient */
$modx->mail->address('to',$scriptProperties['toEmail']);
/* send! */
$modx->mail->send();
$modx->mail->reset();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment