Forse ho una soluzione per il tuo problema.
Sei dicendo che le tue categorie ricevono il loro contenuto via @DIRECTORY - cioè assumo che esistono come cartelle nel systema di file, e che le sottocategorie sono le loro sottocartelle. Allora, ci sara un albero di directory come questo:
categorie
|
|_____cat-1
| |______sottocat-11
| |______sottocat-12
|_____cat-2
|______sottocat-21
|______sottocat-22
Hai una prima TV di nome [tt]TVcat[/tt] , per esempio di tipo Radio Options e con
@DIRECTORY percorso/categorie
come Input Option Values (con il percorso adatto alla situatione).
Come risultato nel manager appare l’elenco dei radio buttons così:
Adesso ci serve un snippet per racogliere le sottocartelle della categoria scelta via [tt]TVcat[/tt] .
Lo diamo il nome [tt]getSubcats[/tt] , e questo è il suo code:
<?php
$resource = $modx->getObject('modResource',$modx->resource->get('id'));
$folder = trim($resource->getTVValue('TVcat'), "/.")."/";
$output = '';
$files = array();
if ($handle = opendir(MODX_BASE_PATH.$folder)) {
while( $file = readdir($handle) ) {
if (is_dir(MODX_BASE_PATH.$folder.$file) && !in_array($file, array(".","..")))
$output .= (strlen($output) ? '||' : '').$file.'=='.$folder.$file;
}
closedir($handle);
} else return "Folder {$folder} not found";
return $output;
?>
Se per esempio la [tt]TVcat[/tt] ha il valore [tt]cat-2[/tt], lo snippet da come risultato lo string seguente:
sottocat-21==percorso/cat-2/sottocat-21||sottocat-22==percorso/cat-2/sottocat-22
Questo è lo string necessario come Input Option Values per la seconda TV di nome [tt]TVsottocat[/tt] (anche di tipo Radio Options) per creare questo elenco di radio buttons:
o sottocat-21
o sottocat-22
Per avere l’elenco giusto in dipendenza del valore di [tt]TVcat[/tt] si deve sostituire questo string dal output del nostro snippet, prendendo invece come Input Option Values di [tt]TVsottocat[/tt] il sequente:
@EVAL return $modx->runSnippet('getSubcats');
Con questo l’utente editore trova le sottocategorie giuste a scegliere.
Ma, non è troppo comodo per lui: Quando cambia il valore di [tt]TVcat[/tt] , deve salvare la pagina e rinfrescarla per vedere le sottocategorie cambiate.
È logico però, perchè il cambio di [tt]TVcat[/tt] dev’essere registrato nel database di MODx per fare effetto. Penso si può vivere con questa restrizione. (Forse ci sono possibilità con Javascript, AJAX ecc. per evitarlo, ma non so abastanza per dare un consiglio.)
Spero di avere potuto aiutarti.
Buon successo e tanti saluti!
ottogal
Nota 1: Lo snippet [tt]getSubcats[/tt] devo al gentile sostegno della communità tedesca die MODx, specialmente di "sam" (
link )
Nota 2: L’italiano non è la mia lingua madre - scusate.