J’avance (doucement c’est sûr, sûrement je ne sais pas)...
En plus des fichiers frame4 et frame4ldr il y a deux fichiers d’API.
Dans functions_frame.php, il y a en particulier deux fonctions :
function GetDocSpecifiedByTvIdsAndValueIds($idtvs,$idvalues,$among='*')
Cette fonction retourne les documents qui spécifient dans la table site_tmplvar_contentvalues toutes les tvs dont les identifiants sont dans $idtvs, et qui ont les bonnes valeurs (spécifiées par $idvalues). Elle est assez rapide mais trop simpliste.
function GetDocIdsByTvIdsAndValueIds($idtvs,$idvalues,$among='*')
Cette fonction retourne tous les documents qui ont les bonnes valeurs des tvs. Elle est très lente car je n’utilise pas le bon algorithme. Sinon elle permet de retrouver tous les documents voulus. J’y ai mis un "range(1,400)" pour limiter le nombre de documents considérés et ne pas surcharger le serveur.
Dans frame4ldr, j’utilise
GetDocSpecifiedByTvIdsAndValueIds pour des raisons de rapidité. Cela ne permet pas de faire des intersections avec plusieurs TVs et donc l’arborescence ne marche bien qu’au premier niveau de profondeur. L’intérêt est tout de même que les documents qui héritent des documents retournés vont se retrouver dans l’arborescence donc on n’en perd aucun (ayant la bonne valeur pour la TV), du moins pas trop ...

Maintenant en cliquant sur "tous documents" pour la valeur
M2, j’obtiens les documents 128 et 174. Les documents qui en héritent sont accessibles par leurs arborescences et j’ai ainsi tous les documents "M2".