web-dev-qa-db-fra.com

Comment utiliser le sous-formulaire dans les sous-formulaires imbriqués

Je veux utiliser Showon dans un fichier XML imbriqué et je veux faire référence au nom de champ du fichier XML d'origine.

J'ai lu que ce n'est pas possible dans Joomla! Sous-formulaires parce que si je devais créer le même nom de champ dans le sous-formulaire, lequel choisirait-il? (Personnellement, je voterais pour le plus proche, c'est-à-dire celui dans le xml currect).

Quoi qu'il en soit, ce n'est pas possible.

Voici mes fichiers

Sous-formulaire principal

<?xml version="1.0" encoding="UTF-8"?>
<form>
  <fieldset name="image-fieldset">
    <field name="media_manager_or_url"
          type="list"
          label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER_OR_URL_LABEL"
          description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER_OR_URL_DESCRIPTION"
          default="0"
          >
            <option value="0">MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER</option>
            <option value="1">URL</option>
    </field>
    <field name="images-subform"
            label= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_LABEL"             
            description= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_DESCRIPTION"
            type= "subform"
            min= "1"
            max= "1000"
            required= "true"
            formsource= "/modules/mod_kou_background_image_with_text/xml/media_manager_or_url.xml"
            multiple= "true"
            buttons= "add,remove"
            layout="joomla.form.field.subform.repeatable"
            groupByFieldset="false"
  />        
  </fieldset>
</form>

Sous-formulaire secondaire

<?xml version="1.0" encoding="UTF-8"?>
<form>
  <fieldset name="media-manager-or-url-fieldset">
    <field name="image"
          type="media"
          label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_IMAGE_LABEL"
          description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_IMAGE_DESCRIPTION"
          showon="media_manager_or_url:0"
          />       
    <field  name="url"
            type="url"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_URL_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_URL_DESCRIPTION"
            showon="media_manager_or_url:1"            
    />
    <field  name="real-size"
            type="text"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_REAL_SIZE_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_REAL_SIZE_DESCRIPTION"            
    />
    <field  name="size"
            type="text"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_SIZE_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_SIZE_DESCRIPTION"            
    />               
  </fieldset>
</form>
2
Eoin

En divisant les fichiers en plusieurs sous-formulaires, vous pouvez utiliser showon. Voici ce que j'ai fini avec.

Sous-formulaire principal

<?xml version="1.0" encoding="UTF-8"?>
<form>
  <fieldset name="image-fieldset">
    <field name="media_manager_or_url"
          type="list"
          label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER_OR_URL_LABEL"
          description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER_OR_URL_DESCRIPTION"
          default="0"
          >
            <option value="0">MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_MEDIA_MANAGER</option>
            <option value="1">URL</option>
    </field>
    <field name="media-manager-images-subform"
            label= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_LABEL"             
            description= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_DESCRIPTION"
            type= "subform"
            min= "1"
            max= "1000"
            required= "true"
            formsource= "/modules/mod_kou_background_image_with_text/xml/media_manager_images_subform.xml"
            multiple= "true"
            buttons= "add,remove"
            layout="joomla.form.field.subform.repeatable"
            groupByFieldset="false"            
  />       
    <field name="url-images-subform"
            label= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_LABEL"             
            description= "MOD_KOU_BACKGROUND_IMAGE_WITH_IMAGES_SUBFORM_DESCRIPTION"
            type= "subform"
            min= "1"
            max= "1000"
            required= "true"
            formsource= "/modules/mod_kou_background_image_with_text/xml/url_images_subform.xml"
            multiple= "true"
            buttons= "add,remove"
            layout="joomla.form.field.subform.repeatable"
            groupByFieldset="false"
            showon="media_manager_or_url:1"
  />          
  </fieldset>
</form>

Sous-formulaire secondaire

<?xml version="1.0" encoding="UTF-8"?>
<form>
  <fieldset name="media-manager-or-url-fieldset">
    <field name="image"
          type="media"
          label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_IMAGE_LABEL"
          description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_IMAGE_DESCRIPTION"
          showon="media_manager_or_url:0"
          />       
    </field>
    <field  name="url"
            type="url"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_URL_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_URL_DESCRIPTION"
            showon="media_manager_or_url:1"            
    />
    <field  name="real-size"
            type="text"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_REAL_SIZE_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_REAL_SIZE_DESCRIPTION"            
    />
    <field  name="size"
            type="text"
            label="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_SIZE_LABEL"
            description="MOD_KOU_BACKGROUND_IMAGE_WITH_TEXT_SIZE_DESCRIPTION"            
    />               
  </fieldset>
</form>

En brisant le formulaire en parties de sous-formulaire, ce qui n'était pas ma première logique, j'ai pu obtenir ce résultat sans utiliser de JavaScript.

Le léger inconvénient est qu'au lieu d'utiliser 1 sous-formulaire avec 4 éléments, j'ai dû en utiliser deux avec 3 éléments. Pour moi, car ils étaient identiques, ce travail de copier-coller était assez facile et cela a résolu mon problème en utilisant uniquement Joomla! coeur.

3
Eoin