Dans cet exemple, j'ai ajouté dans un subform, l'appel de module, simplement en indiquant son ID dans le fiels.

Ensuite j'ai appelé le module depuis le PHP via le {loadmoduleid xxx}

<?php
// dabord, j'ai ajouté la ligne pour appeler le module (en haut de mon document)

use Joomla\CMS\Helper\ModuleHelper;
?>

 

<?php
// Ensuite en haut de mon fichier PHP, j'ai ajouté les déclaration pour mes fields 
// "contentbloc" est le nom de mon champ subform (celui qui appel les fields)
// on récupère les données et on les place dans un tableau
// on créer ensuite une boucle


// Récupération des champs Joomla
$fields = $this->item->jcfields;
$fieldName = 'contentbloc'; 
$subformData = [];

foreach ($fields as $field) {
    if ($field->name === $fieldName) {
        if (!empty($field->rawvalue)) {
            $decodedValue = json_decode($field->rawvalue, true);
            if (is_array($decodedValue)) {
                $subformData = $decodedValue;
            }
        }
        break;
    }
}
?>

 

<?php
// et pur finir, je place le code la ou je souhaite afficher le résultat
// "field1", "field2" et "field5" correspondent aux ID de mes fiels
// $title, $content et $module => sont les noms de mes fields
// ici j'ai utilisé {loadmoduleid xxx} pour appeler mon module

    if (!empty($subformData)) {
        foreach ($subformData as $rowValue) {
            if (is_array($rowValue)) {
                $title = trim($rowValue['field1'] ?? 'Sans titre');
                $content = trim($rowValue['field2'] ?? '');
                $module = trim($rowValue['field5'] ?? '');

                echo '<div class="subform-item">';
                echo '<h3>' . htmlspecialchars($title) . '</h3>';
                echo '<p>' . nl2br(htmlspecialchars($content)) . '</p>';
                echo '</div>';
                echo '<div class="srv-mod">' . HTMLHelper::_('content.prepare', '{loadmoduleid ' . $module . '}') . '</div>';

            }
        }
    } else {
        echo '<p>Aucune donnée disponible.</p>';
    }
    
    
    ?>