MODx Evolutionのエレメントをファイル出力する

MODx Evolutionは、CMSとしても、ライトなWebアプリケーションフレームワークとしても使い勝手が良いのですが、エレメントの管理に常に悩まされます。エレメント（テンプレート、テンプレート変数、チャンク、スニペット、プラグイン）は管理画面上から手軽に追加・編集可能な利点がある反面、DB上でコードが管理されているのでバージョン管理やコードの比較、バックアップがしづらい等、そのような問題がメンテ時の欠点として出てきます。（手軽さとメンテのしやすさはトレードオフの関係です）
そこで、コードを出力してファイルとして管理できるようにしました。ざっくりと書いた感じなので、調整が必要な場合もあるかも知れませんが、これによってメンテが少しでも楽になれば。。
## コード
```php
<?php
$dbname = 'DB名';
$dbhost = 'DBホスト(FQDN or IP)';
$dsn = 'mysql:dbname=' . $dbname . ';host=' . $dbhost;
$user = 'ユーザー名';
$password = 'パスワード';
$dbo = new PDO($dsn, $user, $password);
$dbo->query('set names UTF8');
$base_dir = dirname(__FILE__);
$prefix = 'modx_'; // MODxテーブルプレフィックス
$tables = [
        'site_snippets',
        'site_templates',
        'site_tmplvars',
        'site_modules',
        'site_plugins',
        'site_htmlsnippets',
];
foreach ($tables as $table) {
        $sql = 'select * from ' . $prefix . $table . ';';
        $my_dir = $base_dir . '/' . $table;
        mkdir ($my_dir, 0755);
        foreach ($dbo->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row) {
                $tmp = $row;
                unset($tmp['id']);
                switch ($table) {
                        case 'site_snippets':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['name']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.php', $row['snippet']);
                                break;
                        case 'site_templates':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['templatename']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.html', $row['content']);
                                break;
                        case 'site_tmplvars':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['name']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.html', $row['elements']);
                                break;
                        case 'site_modules':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['name']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.php', $row['modulecode']);
                                break;
                        case 'site_plugins':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['name']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.php', $row['plugincode']);
                                break;
                        case 'site_htmlsnippets':
                                $filen_base = '/' . str_replace(' ', '_', $tmp['name']);
                                file_put_contents($my_dir . $filen_base . '.json', json_encode($tmp));
                                file_put_contents($my_dir . $filen_base . '.html', $row['snippet']);
                                break;
                }
        }
}