Cách nhận giá trị từ Biểu mẫu con


9

Tôi muốn nhúng một trình chiếu đơn giản vào mẫu của mình và tôi muốn sử dụng biểu mẫu con để dễ dàng thay đổi hình ảnh hơn.

Đây là mã tôi sử dụng để gọi tệp xml con

<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" />

và đây là nội dung của 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>

Đây là những gì tôi nhận được khi 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
        )

)

Làm cách nào tôi có thể phân tích các giá trị ở trên để tôi có thể sử dụng chúng cho trình chiếu?

Cảm ơn!

Câu trả lời:


7

Đây là giải pháp của tôi. Nếu có giải pháp nào tốt hơn xin vui lòng cho tôi biết

<?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
đó là giải pháp chính xác;) chỉ có một điều, tôi sẽ kiểm tra xem tài sản có tồn tại hay không, đại loại như:echo empty($item->slideshow_img) ? '' : $item->slideshow_img;
Fedik

3

Dữ liệu Trường biểu mẫu con lưu dưới định dạng JSON, vì vậy trước tiên cần phải "json_decode ()" này để lấy dữ liệu sau đó chạy foreach look để lấy dữ liệu.

<?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

Khi bạn cần nhận chỉ một giá trị của tên trường:

use Joomla\Utilities\ArrayHelper;

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

Làm thế nào để bạn thêm hoặc gọi Joomla\Utilities\ArrayHelper;?
Eoin

1

Nếu bạn đang sử dụng Bootstrap Carousel. cái này hiệu quả với tôi

<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>

nếu ai đó muốn cải thiện hoặc cung cấp mã thực hành tốt nhất được hoan nghênh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.