podrez
1/11/2018 - 8:35 PM

Example export script to turn MODX Resources into CSV entries for importing in another site.

Example export script to turn MODX Resources into CSV entries for importing in another site.

<?php
// Only run this via SSH
if (PHP_SAPI !== 'cli') return;
// Sometimes helpful if processing lots of Resources
ini_set('memory_limit', '2048M');
// Init @modx
@include(dirname(__FILE__) . '/config.core.php');
if (!defined('MODX_CORE_PATH')) define('MODX_CORE_PATH', dirname(__FILE__) . '/core/');
include_once (MODX_CORE_PATH . "model/modx/modx.class.php");
$modx= new modX();
$modx->initialize('web');

// Options
$template = 1;
$resClass = 'modDocument';
$tvnames = array_flip(array('someTV', 'anotherTV', 'thirdTV'));
$filename = 'export.csv';

// Query Resources
$c = $modx->newQuery('modResource');
$c->where(array(
    'template' => $template,
    'class_key' => $resClass,
    ));
$resources = $modx->getCollection('modResource', $c);

// Create a "template" Resource
$template = $modx->newObject($resClass);
$template = $template->toArray();

$idx = 0;
// Open a file handle
$file = fopen($filename, 'w');
foreach ($resources as $res) {

    // get resource fields
    $id = $res->get('id');
    $fields = $res->toArray();
    
    // merge in tvnames
    $fields = array_merge($template, $fields, $tvnames);
    // add idx for reference
    $fields['idx'] = $idx;
    // get tvs from resource
    $tvs = $res->getMany('TemplateVars');
    foreach ($tvs as $tv) {
        $tvname = $tv->get('name');
        // if the tv isn't in our list, skip it
        if (!isset($fields[$tvname])) continue;
        // if you want the raw value you can do this
        //$rawValue = $tv->getValue($id);
        $processedValue = $tv->renderOutput($id);
        // set the value
        $fields[$tvname] = $processedValue;
    }
       
    // first column of the csv should have headers
    if ($idx === 0) {
        $columns = array_keys($fields);
        fputcsv($file, $columns);
    }
    // write the row
    fputcsv($file, $fields);
    $idx++;

}
// close file handler
if (!fclose($file)) echo 'problem closing file';
exit();