Skip to content

Instantly share code, notes, and snippets.

@matdave
Created April 20, 2022 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matdave/94786fd3bbe3468d1b0ebfdf735f2993 to your computer and use it in GitHub Desktop.
Save matdave/94786fd3bbe3468d1b0ebfdf735f2993 to your computer and use it in GitHub Desktop.
Make Fred play nice w/ Preview
<?php
//** On WebPage Pre-Render **//
$corePath = $modx->getOption('preview.core_path', null, $modx->getOption('core_path') . 'components/preview/');
require_once $corePath . '/model/preview/preview.class.php';
$preview = new Preview($modx);
if(!$modx->user->hasSessionContext('mgr')) return; // currently forcing manager context
if(!$modx->getOption('preview.frontendEnabled')) return; // currently forcing manager context
$qsItem = $modx->getOption('preview.previewKey');
$compareItem = $modx->getOption('preview.compareKey');
$allowedContentTypes = explode(',', $modx->getOption('preview.allowedContentTypes'));
$allowedClassKey = explode(',', $modx->getOption('preview.allowedClassKey'));
$revId = 0;
$parentId = $modx->resource->get('id');
$snip = '';
$ctxId = $preview->findContextContainer($modx->resource->get('context_key'));
$cntType = $modx->getObject('modContentType', $modx->resource->content_type);
if(!in_array($cntType->get('mime_type'), $allowedContentTypes)) {
return false; // excluded
}
if(!in_array($modx->resource->class_key, $allowedClassKey)) {
return false; // excluded
}
if(isset($_GET[$qsItem]) && $_GET[$qsItem]) $revId = $_GET[$qsItem];
if(isset($_GET[$compareItem]) && $_GET[$compareItem]) $compareId = $_GET[$compareItem];
$showMenu = true;
$compareMode = false;
$compareModxKey = $modx->getOption('preview.compareMode');
if(isset($_GET[$compareModxKey]) && $_GET[$compareModxKey]) {
$showMenu = false;
$compareMode = true;
}
if(!$compareMode && !$modx->getOption('preview.frontendEnabled')) {
return false;
}
/** Add some preview functionality - Look for the "MODXpreview" QS item */
$prop = $modx->resource->get('properties');
if(isset($prop["preview"]) && isset($prop["preview"]["previewEnabled"]) && $prop["preview"]["previewEnabled"] == false) {
$showMenu = false;
}
if($showMenu) {
$_SESSION['fred'] = 5;
}
<li>
<div>
[[+active:eq=`1`:then=`<span class="extras_extra_preview_status">[[%preview.live? &namespace=`web`]]</span>`]]
[[+pagetitle]] ([[+id]])
<span class="extras_extra_preview_desc">
[[+publishedOn:eq=`0000-00-00 00:00:00`:then=`[[%preview.not.published? &namespace=`web`]]`:else=`[[%preview.Published? &namespace=`web`]] [[+publishedOn:strtotime:date=`%b %e %Y, %l:%M %p`]]`]]
</span>
[[+revisionUrl:ne=``:then=`<a class="extras_extra_preview_button extras_extra_preview_button_view" href="[[~[[+id]]]]?fred=[[+editUrl:ne=``:then=`0`:else=`5`]]">[[%preview.view? &namespace=`web`]]</a>`]]
[[+editUrl:ne=``:then=`<a class="extras_extra_preview_button extras_extra_preview_button_edit" href="[[~[[+id]]]]?fred=1">[[%preview.edit? &namespace=`web`]]</a>`]]
[[+compareUrl:ne=``:then=`<a class="extras_extra_preview_button extras_extra_preview_button_compare" href="[[+compareUrl]]&fred=0">[[%preview.compare? &namespace=`web`]]</a>`]]
</div>
</li>
@matdave
Copy link
Author

matdave commented Apr 20, 2022

Add the FredPreview plugin to run OnWebPagePreRender prior to Fred. Then adjust the properties of the snippet preview.getRevisions to use the tplRow = preview.item.fred

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment