Comment obtenir de la valeur à partir du sous-formulaire


9

Je souhaite intégrer un diaporama simple à mon modèle et je souhaite utiliser un sous-formulaire pour faciliter la modification de l'image.

Voici le code que j'utilise pour appeler le fichier xml enfant

<field name="slideshow_items" type="subform" formsource="templates/jomlamaster/admin/subform/slideshow.xml" min="1" max="4" multiple="true" layout="joomla.form.field.subform.repeatable-table" groupByFieldset="true" label="Subform Field" description="Subform Field Description" />

et voici le contenu de slideshow.xml:

<?xml version="1.0" encoding="UTF-8"?>
<form>
<fieldset name="fieldset" label="Slideshow">
<field name="slideshow_img" type="media" directory="" label="Slideshow item" description="Choose an image slideshow"/>
<field name="slideshow_title" type="text" class="inputbox" label="Slideshow text" size="40" />
</fieldset>
</form>

C'est ce que j'obtiens lorsque print_r ($ slideshow_items);

stdClass Object
(
    [slideshow_items0] =&gt; stdClass Object
        (
            [slideshow_img] =&gt; images/slideshow/img0.jpg
            [slideshow_text] =&gt; Title 1
        )

    [slideshow_items1] =&gt; stdClass Object
        (
            [slideshow_img] =&gt; images/slideshow/img1.jpg
            [slideshow_text] =&gt; Title 2
        )

    [slideshow_items2] =&gt; stdClass Object
        (
            [slideshow_img] =&gt; images/slideshow/img2.jpg
            [slideshow_text] =&gt; Title 3
        )

    [slideshow_items3] =&gt; stdClass Object
        (
            [slideshow_img] =&gt; images/slideshow/img3.jpg
            [slideshow_text] =&gt; Title 4
        )

)

Comment puis-je analyser les valeurs ci-dessus afin de pouvoir les utiliser pour le diaporama?

Merci!

Réponses:


7

C'est ma solution. S'il y a une meilleure solution, faites-le moi savoir

<?php foreach ($slideshow_items as $item) : ?>
  <div class="slideshow">
    <img src="<?php echo $item->slideshow_img; ?>" />
    <p class="slideshow_text">
      <?php echo $item->slideshow_text; ?>
    </p>
  </div>
<?php endforeach; ?>

1
c'est la bonne solution;) seule chose, je vérifierais si la propriété existe, quelque chose comme:echo empty($item->slideshow_img) ? '' : $item->slideshow_img;
Fedik

3

Les données des champs de sous-formulaire sont enregistrées au format JSON, il faut donc d'abord "json_decode ()" pour obtenir les données, puis exécutez foreach look pour obtenir les données.

<?php $slideshow_items= json_decode($this->item->slideshow_items); ?>

<?php foreach ($slideshow_items as $item) : ?>
<div class="slideshow">
<img src="<?php echo $item->slideshow_img; ?>" />
<p class="slideshow_text">
  <?php echo $item->slideshow_text; ?>
</p>
</div>
<?php endforeach; ?>

3

Lorsque vous devez obtenir la valeur d'un seul nom de champ:

use Joomla\Utilities\ArrayHelper;

$items = ArrayHelper::getColumn((array) $params->get('subformName'), 'fieldName');

Comment ajoutez-vous ou appelez-vous le Joomla\Utilities\ArrayHelper;?
Eoin

1

Si vous utilisez le carrousel Bootstrap. cela fonctionne pour moi.

<div id="gallery-1" class="carousel slide" data-ride="carousel">
    <div class="carousel-inner" role="listbox">
        <?php foreach ($slideshow_items as $item => $value) :?>
            <div class="item<?php echo ($item=='slideshow_items0') ? ' active': ''; ?>">
                <img src="<?php echo $value->slideshow_img;?>">
            </div>
            <div class="carousel-caption>">
                <p><?php echo $value->slideshow_text;?></p>
            </div>
        <?php endforeach; ?>
    </div>
</div>

si quelqu'un veut améliorer ou fournir les meilleures pratiques, le code est bienvenu

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.