Özel Form Oluşturucular
Genel Bakış
Section titled “Genel Bakış”XOOPS, özel oluşturucular aracılığıyla form oluşturmanın özelleştirilmesini sağlar. Bu, temaya özel stil, erişilebilirlik iyileştirmeleri ve Bootstrap veya Tailwind CSS gibi ön uç çerçevelerle entegrasyon sağlar.
Varsayılan İşleme
Section titled “Varsayılan İşleme”Varsayılan olarak, XOOPS formları, temel HTML çıktısını veren XoopsFormRenderer sınıfını kullanır:
// Default rendering$form = new XoopsThemeForm('My Form', 'myform', 'submit.php');$form->addElement(new XoopsFormText('Name', 'name', 50, 255));echo $form->render();Özel Oluşturucu Mimarisi
Section titled “Özel Oluşturucu Mimarisi”classDiagram class XoopsFormRenderer { <<interface>> +renderForm(XoopsForm form) +renderElement(XoopsFormElement element) +renderLabel(string caption) }
XoopsFormRenderer <|-- XoopsFormRendererBootstrap4 XoopsFormRenderer <|-- XoopsFormRendererBootstrap5 XoopsFormRenderer <|-- XoopsFormRendererTailwind XoopsFormRenderer <|-- CustomFormRendererÖzel Oluşturucu Oluşturma
Section titled “Özel Oluşturucu Oluşturma”Temel Oluşturucu Sınıfı
Section titled “Temel Oluşturucu Sınıfı”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() ); }}Oluşturucuyu Kaydetme
Section titled “Oluşturucuyu Kaydetme”// 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());Yerleşik Oluşturucular
Section titled “Yerleşik Oluşturucular”Bootstrap 4 Oluşturucu
Section titled “Bootstrap 4 Oluşturucu”use Xoops\Form\Renderer\Bootstrap4Renderer;
$form->setRenderer(new Bootstrap4Renderer());Bootstrap 5 Oluşturucu
Section titled “Bootstrap 5 Oluşturucu”use Xoops\Form\Renderer\Bootstrap5Renderer;
$form->setRenderer(new Bootstrap5Renderer([ 'floating_labels' => true, 'validation_style' => 'tooltip']));Belirli Öğeleri Oluşturma
Section titled “Belirli Öğeleri Oluşturma”Özel Seçim Oluşturucu
Section titled “Özel Seçim Oluşturucu”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;}Özel Dosya Giriş Oluşturucusu
Section titled “Özel Dosya Giriş Oluşturucusu”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() );}theme Entegrasyonu
Section titled “theme Entegrasyonu”theme Şablonunda
Section titled “theme Şablonunda”{* 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}En İyi Uygulamalar
Section titled “En İyi Uygulamalar”- Temel oluşturucudan devral - Tutarlılık için
XoopsFormRenderer’yi genişletin - Tüm öğe türlerini destekleyin - Metin, seçim, onay kutusu, radyo vb. işlemlerini yönetin.
- Erişilebilirlik - Uygun etiketleri ve ARIA özelliklerini ekleyin
- Doğrulama stilleri - Hata durumlarını uygun şekilde gösterin
- Duyarlı tasarım - Formların mobil cihazlarda çalışmasını sağlayın
İlgili Belgeler
Section titled “İlgili Belgeler”- Formlara Genel Bakış
- Form Öğeleri Referansı
- Form Doğrulama
- theme Geliştirme