シンプルなスライドショーをテンプレートに埋め込んで、サブフォームを使用して画像を簡単に変更できるようにしたいと考えています。
これは、子xmlファイルを呼び出すために使用するコードです
<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" />
そしてこれは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>
これは、print_r($ slideshow_items);を実行すると得られるものです。
stdClass Object
(
[slideshow_items0] => stdClass Object
(
[slideshow_img] => images/slideshow/img0.jpg
[slideshow_text] => Title 1
)
[slideshow_items1] => stdClass Object
(
[slideshow_img] => images/slideshow/img1.jpg
[slideshow_text] => Title 2
)
[slideshow_items2] => stdClass Object
(
[slideshow_img] => images/slideshow/img2.jpg
[slideshow_text] => Title 3
)
[slideshow_items3] => stdClass Object
(
[slideshow_img] => images/slideshow/img3.jpg
[slideshow_text] => Title 4
)
)
スライドショーで使用できるように、上記の値をどのように解析できますか?
ありがとう!
これが私の解決策です。より良い解決策がある場合はお知らせください
<?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つだけ取得する必要がある場合:
use Joomla\Utilities\ArrayHelper;
$items = ArrayHelper::getColumn((array) $params->get('subformName'), 'fieldName');
サブフォームフィールドのデータはJSON形式で保存されるため、データを取得するにはまず「json_decode()」を実行してから、foreachルックを実行してデータを取得する必要があります。
<?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; ?>
Bootstrap Carouselを使用している場合、これは私にとってはうまくいきます。
<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>
誰かがベストプラクティスコードを改善または提供したい場合は歓迎します。