Penyampai Borang Tersuai
Gambaran KeseluruhanXOOPS membenarkan penyesuaian pemaparan borang melalui pemapar tersuai. Ini membolehkan penggayaan khusus tema, peningkatan kebolehaksesan dan penyepaduan dengan rangka kerja bahagian hadapan seperti Bootstrap atau Tailwind CSS.## Rendering LalaiSecara lalai, borang XOOPS menggunakan kelas XoopsFormRenderer yang mengeluarkan HTML asas:
Section titled “Gambaran KeseluruhanXOOPS membenarkan penyesuaian pemaparan borang melalui pemapar tersuai. Ini membolehkan penggayaan khusus tema, peningkatan kebolehaksesan dan penyepaduan dengan rangka kerja bahagian hadapan seperti Bootstrap atau Tailwind CSS.## Rendering LalaiSecara lalai, borang XOOPS menggunakan kelas XoopsFormRenderer yang mengeluarkan HTML asas:”php// Default rendering$form = new XoopsThemeForm('My Form', 'myform', 'submit.php');$form->addElement(new XoopsFormText('Name', 'name', 50, 255));echo $form->render();Seni Bina Penyampai Tersuai
Section titled “Seni Bina Penyampai Tersuai”mermaidclassDiagram class XoopsFormRenderer { <<interface>> +renderForm(XoopsForm form) +renderElement(XoopsFormElement element) +renderLabel(string caption) }
XoopsFormRenderer <|-- XoopsFormRendererBootstrap4 XoopsFormRenderer <|-- XoopsFormRendererBootstrap5 XoopsFormRenderer <|-- XoopsFormRendererTailwind XoopsFormRenderer <|-- CustomFormRendererMencipta Penyampai Tersuai### Kelas Asas Renderer
Section titled “Mencipta Penyampai Tersuai### Kelas Asas Renderer”phpnamespace XOOPS\Modules\MyModule\Form;
use XoopsFormRenderer;use XoopsForm;use XoopsFormElement;
class BootstrapRenderer extends XoopsFormRenderer{ public function renderFormStart(XoopsForm $form): string { $class = $form->getExtra() ?: 'needs-validation'; return sprintf( '<form name="%s" id="%s" action="%s" method="%s" class="%s" %s>', $form->getName(), $form->getName(), $form->getAction(), $form->getMethod(), $class, $form->getExtra() ); }
public function renderFormEnd(): string { return '</form>'; }
public function renderElement(XoopsFormElement $element): string { $output = '<div class="mb-3">';
// Label if ($element->getCaption()) { $output .= sprintf( '<label for="%s" class="form-label">%s</label>', $element->getName(), $element->getCaption() ); }
// Element with Bootstrap classes $element->setExtra($element->getExtra() . ' class="form-control"'); $output .= $element->render();
// Description if ($element->getDescription()) { $output .= sprintf( '<div class="form-text">%s</div>', $element->getDescription() ); }
$output .= '</div>';
return $output; }
public function renderButton(XoopsFormElement $button): string { $type = $button->getType() === 'submit' ? 'btn-primary' : 'btn-secondary'; return sprintf( '<button type="%s" name="%s" class="btn %s">%s</button>', $button->getType(), $button->getName(), $type, $button->getValue() ); }}Mendaftarkan Renderer
Section titled “Mendaftarkan Renderer”php// In your module's xoops_version.php or bootstrap$GLOBALS['xoopsOption']['form_renderer'] = new BootstrapRenderer();
// Or set it per-form$form = new XoopsThemeForm('My Form', 'myform', 'submit.php');$form->setRenderer(new BootstrapRenderer());Renderer Terbina dalam### Bootstrap 4 Renderer
Section titled “Renderer Terbina dalam### Bootstrap 4 Renderer”phpuse XOOPS\Form\Renderer\Bootstrap4Renderer;
$form->setRenderer(new Bootstrap4Renderer());Bootstrap 5 Renderer
Section titled “Bootstrap 5 Renderer”phpuse XOOPS\Form\Renderer\Bootstrap5Renderer;
$form->setRenderer(new Bootstrap5Renderer([ 'floating_labels' => true, 'validation_style' => 'tooltip']));Memaparkan Elemen Khusus### Pemapar Pilihan Tersuai
Section titled “Memaparkan Elemen Khusus### Pemapar Pilihan Tersuai”phppublic function renderSelect(XoopsFormSelect $select): string{ $multiple = $select->isMultiple() ? 'multiple' : ''; $size = $select->getSize();
$output = sprintf( '<select name="%s%s" id="%s" class="form-select" %s size="%d">', $select->getName(), $multiple ? '[]' : '', $select->getName(), $multiple, $size );
foreach ($select->getOptions() as $value => $label) { $selected = in_array($value, (array)$select->getValue()) ? 'selected' : ''; $output .= sprintf( '<option value="%s" %s>%s</option>', htmlspecialchars($value), $selected, htmlspecialchars($label) ); }
$output .= '</select>';
return $output;}Penyampai Input Fail Tersuai
Section titled “Penyampai Input Fail Tersuai”phppublic function renderFile(XoopsFormFile $file): string{ return sprintf( '<div class="mb-3"> <label for="%s" class="form-label">%s</label> <input type="file" class="form-control" id="%s" name="%s" %s> </div>', $file->getName(), $file->getCaption(), $file->getName(), $file->getName(), $file->getExtra() );}Integrasi Tema### Dalam Templat Tema
Section titled “Integrasi Tema### Dalam Templat Tema”Smarty{* In theme's form.tpl *}{foreach $form.elements as $element} <div class="form-group {$element.class}"> {if $element.caption} <label class="control-label">{$element.caption}</label> {/if} {$element.body} {if $element.description} <span class="help-block">{$element.description}</span> {/if} </div>{/foreach}Amalan Terbaik1. Warisi daripada pemapar asas - Panjangkan XoopsFormRenderer untuk konsistensi
Section titled “Amalan Terbaik1. Warisi daripada pemapar asas - Panjangkan XoopsFormRenderer untuk konsistensi”- Sokong semua jenis elemen - Kendalikan teks, pilih, kotak semak, radio, dsb.
- Kebolehaksesan - Sertakan label yang betul, atribut ARIA
- Gaya pengesahan - Tunjukkan keadaan ralat dengan sewajarnya
- Reka bentuk responsif - Pastikan borang berfungsi pada mudah alih## Dokumentasi Berkaitan- Gambaran Keseluruhan Borang
- Rujukan Elemen Bentuk
- Pengesahan Borang
- Pembangunan Tema