Skip to content

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();
mermaid
classDiagram
class XoopsFormRenderer {
<<interface>>
+renderForm(XoopsForm form)
+renderElement(XoopsFormElement element)
+renderLabel(string caption)
}
XoopsFormRenderer <|-- XoopsFormRendererBootstrap4
XoopsFormRenderer <|-- XoopsFormRendererBootstrap5
XoopsFormRenderer <|-- XoopsFormRendererTailwind
XoopsFormRenderer <|-- CustomFormRenderer

Mencipta Penyampai Tersuai### Kelas Asas Renderer

Section titled “Mencipta Penyampai Tersuai### Kelas Asas Renderer”
php
namespace 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()
);
}
}
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”
php
use XOOPS\Form\Renderer\Bootstrap4Renderer;
$form->setRenderer(new Bootstrap4Renderer());
php
use 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”
php
public 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;
}
php
public 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()
);
}
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”
  1. Sokong semua jenis elemen - Kendalikan teks, pilih, kotak semak, radio, dsb.
  2. Kebolehaksesan - Sertakan label yang betul, atribut ARIA
  3. Gaya pengesahan - Tunjukkan keadaan ralat dengan sewajarnya
  4. Reka bentuk responsif - Pastikan borang berfungsi pada mudah alih## Dokumentasi Berkaitan- Gambaran Keseluruhan Borang
  • Rujukan Elemen Bentuk
  • Pengesahan Borang
  • Pembangunan Tema