نوع حقل نموذج نموذج فرعي

From Joomla! Documentation

This page is a translated version of the page Subform form field type and the translation is 38% complete.
Outdated translations are marked like this.
Other languages:
Bahasa Indonesia • ‎English • ‎Nederlands • ‎Türkçe • ‎español • ‎français • ‎العربية

إن نوع حقل نموذج "نموذج فرعي" يقدم طريقة لاستخدام نماذج XML داخل بعضها البعض أو اعادة استعمال نماذج موجودة داخل النموذج الحالي.

الحقل يسمح بتضمين نموذج موجود داخل النموذج الحالي. اذا كانت الحاصية multiple موضوعة على true عندها سيكون النموذج "'مكرر'".

يملك الحقل مخططين "محدد مسبقا" لاظهار النكوذج الفرعي كـ "'جدول"' أو كحاوية div ، وبالطبع يسمح باستخدام مخطط خاص بك.

مثال XML تعريف "حقل" لنمط "'وحيد'"

<field name="field-name" type="subform"
    formsource="path/to/exampleform.xml"
    label="Subform Field" description="Subform Field Description" />

مثال XML تعريف "حقل" لنمط "'متعدد'"

<field name="field-name" type="subform"
    formsource="path/to/exampleform.xml" multiple="true"
    label="Subform Field" description="Subform Field Description" />

مثال XML لـ exampleform.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <field name="example_text" type="text" label="Example Text" />
    <field name="example_textarea" type="textarea" label="Example Textarea" cols="40" rows="8" />
</form>

مثال XML لـ exampleform.xml مع "مجموعة حفول"

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fieldset name="section1" label="Section1">
        <field name="example_text" type="text" label="Example Text" />
        <field name="example_textarea" type="textarea" label="Example Textarea" cols="40" rows="8" />
    </fieldset>
    <fieldset name="section2" label="Section2">
        <field name="example_list" type="list" default="1" class="advancedSelect" label="Example List">
            <option value="1">JYES</option>
            <option value="0">JNO</option>
        </field>
    </fieldset>
</form>

The subform XML may also be specified inline as an alternative to placing the subform XML in a separate file. The following example illustrates this:

<?xml version="1.0" encoding="UTF-8"?>
<field
	name="field-name"
	type="subform"
	label="Subform Field"
	description="Subform Field Description"
	multiple="true"
	min="1"
	max="10"
	>
	<form>
		<field
			name="example_text"
			type="text"
			label="Example Text"
			/>
		<field
			name="example_textarea"
			type="textarea"
			label="Example Textarea"
			cols="40"
			rows="8"
			/>
	</form>
</field>

خصائص الحقل:

  • النوع (أساسي) يجب أن يكون subform.
  • الاسم (أساسي) iهذا هو الاسم الفريد للحقل.
  • التسمية (أساسي) (قابل للترجمة) وهو عنوان وصف للحقل.
  • الوصف (اختياري) (قابل للترجمة) هو النص الذي سيتم اظهاره كتلميح عندما يقوم المستخدم بتحريك الماوس فوق مربع القائمة المنسدلة.
  • مطلوب (اختياري) الحقل يجب أن يعبأ قبل رسال النموذج.
  • الرسالة (اختياري) رسالة الخطأ التي ستظهر بدل الرسالة الافتراضية.
  • الافتراضي (اختياري) وهو القيمة الافتراضية، JSON سلسلة.
  • مصدر النموذج (أساسي) النموذج المصدر الذي سيتضمن. المسار الى ملف xml أو اسم النموذج للبحث بواسطة JForm::getInstance().
  • متعدد (اختياري) الحالة المتعدد لحقل النموذج. إذا ما كان النموذج الفرعي متكرر أو لا.
  • الأدنى (اختياري) عدد الحد الأدنى للتكرار في النمط المتعدد. الافتراضي: "0"
  • الأعلى (اختياري) عدد الحد الأعلى للتكرار في النمط المتعدد. الافتراضي: "1000"
  • تجميع حسب مجموعة حقل (اختياري) تجميع حقول النموذج الفرعي حسب مجموعةالحقل الخاص به (true or false). الافتراضي: false.
  • الأزرار (اختياري) ماهي الأزرار التي ستعرض في نمط متعدد. الافتراضي: اضافة,اعادة حذف,نقل.
  • مخطط (اختياري) اسم المخطط لـ render ادخالات النموذج الفرعي .
  • validate (optional) should be set to SubForm (note that this is case-sensitive!) to ensure that fields in the subform are individually validated. Default: Fields in the subform are not validated, even if validation rules are specified.

المخططات المتاحة:

  • joomla.form.field.subform.default يجعل النموذج الفرعي في حاوية div , بدون دعم التكرار. افتراضي بالنسبة للنمط الوحيد.
  • joomla.form.field.subform.repeatable يجعل النموذج الفرعي في حاوية div , يستخدم للنمط المتعدد. يدعم تجميع حسب مجموعة الحقل.
  • joomla.form.field.subform.repeatable-tableيجعل النموذج الفرعي كجدول , يمكن استعماله لللنمط المتعدد. يدعم تجميع بواسطة مجموعة الحقل. By default render each field as the table بشكل افتراضي يجعل كل حقل كعمود جدول، ولكن إذا كان تجميع بواسطة مجموعة الحقل = "true عندها اجعل كل مجموعة حقل كعمود جدول

"كن حذرا"

إذا كان الحقل في النموذج الفرعي يملك منطق جافا سكريبت اضافي عندها ممكن أن لا يعمل في "النمط المتعدد"، لآنه لا يرى الحقول المضافة من حقل النموذج الفرعي بشكل ديناميكي. وعندما تحدث يجب عليك أن تختار الحقل الخاص بك ليدعمها.

المثال التالي يمكن أن يساعد

jQuery(document).ready(function(){
    ... here the code for setup your field as usual...

    jQuery(document).on('subform-row-add', function(event, row){
        ... here is the code to set up the fields in the new row ...
    })
});

Because of this some extra Joomla! fields may not work for now.

Fields Validation and Filters

The subform form field does not provide the Validation and Filters for child fields.

Addition: Since a security fix in Joomla 3.9.7 the filter="example" attributes in subform child fields are supported and the fields will be validated; but NOT in custom form fields that extend the JFormFieldSubform class. You have to adapt such custom fields yourself!

Beware!

All extensions that use subform fields MUST add an attribute filter to their subform child fields of type editor, textarea, text (maybe others, too) since Joomla 3.9.7 like it's common for "normal" JForm fields, if you want to allow HTML input. Otherwise the validation falls back to STRING, which is the common behavior for "normal" JForm fields. Examples:

filter="safehtml"
filter="JComponentHelper::filterText"
filter="raw" (bad decision in most cases)

Example

Problem

After adding new rows selects are not "chosen".

Solution

Here is an example how to reinit jQuery Chosen on newly added repeated rows:

jQuery(document).ready(function(){
    jQuery(document).on('subform-row-add', function(event, row){
        jQuery(row).find('select').chosen();
    })
});

Or a PHP snippet to be used in e.g. your plugin in **onBeforeCompileHead** method or in your component view.

$doc = JFactory::getDocument();
$js = '
	jQuery(document).on(\'subform-row-add\', function(event, row){
		jQuery(row).find(\'select\').chosen();
	})
';
$doc->addScriptDeclaration($js);

So newly added rows now are "chosen" now

Problem

Subform data not getting stored to database on custom component.

Solution

Add the following line to the beginning of your corresponding table class:

protected $_jsonEncode = array('fieldnamehere');

More information Here.

شاهد أيضا