pepebe
5/21/2014 - 11:32 AM

Add this as a plugin (OnDocFormSave). Saves the first MoreGallery image or cropimage into a TV (could be a hidden one) for quicker access.

Add this as a plugin (OnDocFormSave). Saves the first MoreGallery image or cropimage into a TV (could be a hidden one) for quicker access.

<?php
/*
    mgThumb by pepebe
    ---------------------------------------------
    saves the first image in a galley inside a tv
    trigger OnDocFormSave
    
    Initial idea: https://gist.github.com/christianseel/557a1e0f2a1f502ce1c5 
    
    Changelog:
    2014-05-20 - Initial release by christianseel
    2014-05-21 - Fork and a minor fix 
    2015-06-20 - Added option to include crop images
    2015-06-21 - Corrected a bug that crept in while cleaning up the code.
    
    $templates - array with ids of all templates this plugin should use
    $crop - Name of your cropimage. Set to false if you want to use the image itself.
    $basename - if you are using a media resource for your tv, set this to true
    $tvId - Id of the TV where you want to store your image
*/



    $templates =  array(2);
    
    $crop  = '1 zu 1'; // Name of your crop. Set to false if you don't want to have a crop image.
    $basename = true;

    $tvId = 22; // Add the name/id of your Thumbnail TV here

    // Only trigger this plugin for resources with templates included in the array
    if( !in_array( $resource->get('template') , $templates ) ){
        return;
    }
    
    $c = $modx->newQuery('mgImage');
    $c->where(array(
        'resource' => $resource->get('id')
    ));
    $c->sortby('sortorder', 'ASC');
    $c->limit('1');
    
    $image = $modx->getObject('mgImage', $c);

    $output = "";
    
    if($image){
        if(!$crop) {
            $props = $image->toArray(); 
            $output = $props['file_url'];
        }
        else {
            $props = $image->getCropsAsArray();
            
            if(isset($props[$crop])){
                $output = $props[$crop]['thumbnail_url'];
            }
            else {
                return;
            }
        }
    }
    else {
        return;
    }
    
    if(!empty($output)){
        if($basename){
            $output = basename($output);
        }
        $resource->setTVValue($tvId, $output);
        $resource->save();
    }