web-gelistirme-sc.com

XML'de bir döngü nasıl yazılır?

Gibi bir XML dosyam var

<?xml version="1.0" encoding="UTF-8"?>
<form>
     <field name="age" type="list"
        default="1"
        description="age"
        label="Age"
        size="1"
    >
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>

    </field>
</form>

Seçeneği belirli sayıda tekrarlamam gerekiyor. Seçeneği tekrarlamak için nasıl bir döngü yazabilirim? Döngü yazmak mümkün mü?

4
aish

Şu anda Tamsayı form alanı kullanabilirsiniz.

Tamsayı form alanı türü, bir dizi tamsayı değeri içeren bir seçim kutusu sağlar.

<field 
  name="age" 
  type="integer" 
  default="1" 
  label="Age" 
  description="age" 
  first="1" 
  last="100" 
  step="1" 
/>

ilk minimum yaş ve son maksimum yaş olacaktır.

[~ # ~] alternatif [~ # ~]

Başka bir seçenek de özel form alanı oluşturmak olacaktır. Alanınızı genişletmek istiyorsanız bu size daha fazla esneklik sağlar.

yönetici/bileşenler/[bileşeninizin adı] /models/fields/Age.php

<?php
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');

jimport('joomla.form.formfield');

class JFormFieldAge extends JFormField {

  protected $type = 'Age';

  // getLabel() left out, no need to overwrite it (at least for this example)

  public function getInput() {

    // Define min and max ages, if not set by field, defaults to 1 and 100.
    $minAge = isset($this->element['min']) ? $this->element['min'] : 1;
    $maxAge = isset($this->element['max']) ? $this->element['max'] : 100;

    $html = '<select id="'.$this->id.'" name="'.$this->name.'">';

    // Loop
    for ($i = $minAge; $i <= $maxAge; $i++) { 
      $html .= '<option value="'.$i.'">'.$i.'</option>';
    }

    $html .= '</select>';

    return $html;
  }
}

Alanlarınızı uzantı ana dosyanıza yükleyin.

JForm::addFieldPath(JPATH_COMPONENT . '/models/fields'); // Change the path for your needs

[~ # ~] XML [~ # ~]

Ayrıca, ana alana alan yolunu eklemeniz gerekebilir:

<fieldset addfieldpath="/administrator/components/<component name>/models/fields">

Yine, ihtiyaçlarınız için yolu değiştirin.

Son olarak, özel alan türünüzü kullanın

<field 
  name="age"
  type="Age"
  description="age"
  label="Age"
  min="18"
  max="90"
  size="1" />

özel form alanı türü oluşturma hakkında daha fazla bilgi edinin.

7
Rene Korss

Rene'nin çözümü çok daha zarif olmasına rağmen, başka bir alternatif daha eklemek istiyorum. XML dosyanızın içinde bir döngü oluşturmak yerine (ki şüphesiz) PHP metnini PHP gibi başka bir programlama dilini kullanarak oluşturabilir ve ardından içeriği XML dosyanıza kopyalayıp yapıştırabilirsiniz.

Yaş alanınız için bir örnek:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>XML Loop</title>
</head>
<body>
<textarea rows="50" cols="100">
<field name="age" type="list"
        default="1"
        description="age"
        label="Age"
        size="1"
    >
<?php 
    for ($x = 1; $x <= 100; $x++) { // Change values according to your desired range
        echo "        <option value=\"$x\">$x</option> \n";
    }
?>
</field>
</textarea>
</body>
</html>

Bu <option> etiketi, metin alanının içinde 1 ile 100 arasında bir değere sahip. Kod daha sonra XML dosyanıza kopyalanabilir.

Belki o kadar zarif değil, ama kesinlikle işe yarıyor ...

1
johanpw