私のようなXMLファイルがあります
<?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>
このオプションを一定回数繰り返す必要があります。オプションを繰り返すループをどのように書くことができますか?ループを書くことは可能ですか?
現在、完全に 整数フォームフィールド を使用できます。
整数フォームフィールドタイプは、整数値の範囲を含む選択ボックスを提供します。
<field
name="age"
type="integer"
default="1"
label="Age"
description="age"
first="1"
last="100"
step="1"
/>
firstは最小年齢であり、lastは最大年齢です。
[〜#〜]代替[〜#〜]
別のオプションは、カスタムフォームフィールドを作成することです。これにより、フィールドを拡張したい場合に柔軟性が高まります。
administrator/components/[コンポーネントの名前] /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;
}
}
拡張メインファイルにフィールドをロードします。
JForm::addFieldPath(JPATH_COMPONENT . '/models/fields'); // Change the path for your needs
[〜#〜] xml [〜#〜]
さらに、親へのフィールドパスの追加が必要になる場合があります。
<fieldset addfieldpath="/administrator/components/<component name>/models/fields">
ここでも、必要に応じてパスを変更します。
最後に、カスタムフィールドタイプを使用します
<field
name="age"
type="Age"
description="age"
label="Age"
min="18"
max="90"
size="1" />
カスタムフォームフィールドタイプの作成 の詳細をご覧ください。
ルネのソリューションははるかにエレガントですが、別の選択肢を追加したいと思います。 XMLファイル内にループを作成する代わりに(おそらく可能ではないでしょう)、PHPなどの他のプログラミング言語を使用してXMLテキストを生成し、コンテンツをXMLファイルにコピーして貼り付けるだけです。
次に、Ageフィールドの例を示します。
<!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>
これにより、テキスト領域内に1〜100の値を持つ<option>
タグが出力されます。その後、コードをXMLファイルにコピーできます。
多分それほどエレガントではないかもしれませんが、それは間違いなく動作します...