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!

webchun
la source

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; ?>
webchun
la source
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; ?>
RadiusTheme
la source
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');
piotr_cz
la source
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

Leoalv
la source