מעבדי טפסים מותאמים אישית
סקירה כללית
Section titled “סקירה כללית”XOOPS מאפשר התאמה אישית של עיבוד טפסים באמצעות מעבדים מותאמים אישית. זה מאפשר עיצוב ספציפי לנושא, שיפורי נגישות ושילוב עם מסגרות חזיתיות כמו Bootstrap או Tailwind CSS.
עיבוד ברירת מחדל
Section titled “עיבוד ברירת מחדל”כברירת מחדל, טפסי XOOPS משתמשים במחלקה XoopsFormRenderer שמוציאה HTML בסיסית:
// Default rendering$form = new XoopsThemeForm('My Form', 'myform', 'submit.php');$form->addElement(new XoopsFormText('Name', 'name', 50, 255));echo $form->render();ארכיטקטורת מעבד מותאמת אישית
Section titled “ארכיטקטורת מעבד מותאמת אישית”classDiagram class XoopsFormRenderer { <<interface>> +renderForm(XoopsForm form) +renderElement(XoopsFormElement element) +renderLabel(string caption) }
XoopsFormRenderer <|-- XoopsFormRendererBootstrap4 XoopsFormRenderer <|-- XoopsFormRendererBootstrap5 XoopsFormRenderer <|-- XoopsFormRendererTailwind XoopsFormRenderer <|-- CustomFormRendererיצירת מעבד מותאם אישית
Section titled “יצירת מעבד מותאם אישית”כיתת מעבד בסיסית
Section titled “כיתת מעבד בסיסית”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() ); }}רישום המעבד
Section titled “רישום המעבד”// 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());מעבדים מובנים
Section titled “מעבדים מובנים”Bootstrap 4 Renderer
Section titled “Bootstrap 4 Renderer”use Xoops\Form\Renderer\Bootstrap4Renderer;
$form->setRenderer(new Bootstrap4Renderer());Bootstrap 5 Renderer
Section titled “Bootstrap 5 Renderer”use Xoops\Form\Renderer\Bootstrap5Renderer;
$form->setRenderer(new Bootstrap5Renderer([ 'floating_labels' => true, 'validation_style' => 'tooltip']));עיבוד אלמנטים ספציפיים
Section titled “עיבוד אלמנטים ספציפיים”עיבוד בחירה מותאם אישית
Section titled “עיבוד בחירה מותאם אישית”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;}עיבוד קלט קובץ מותאם אישית
Section titled “עיבוד קלט קובץ מותאם אישית”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() );}שילוב נושאים
Section titled “שילוב נושאים”בתבנית ערכת נושא
Section titled “בתבנית ערכת נושא”{* 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}שיטות עבודה מומלצות
Section titled “שיטות עבודה מומלצות”- ירושה ממעבד הבסיס - הארך
XoopsFormRendererלעקביות - תמוך בכל סוגי האלמנטים - טיפול בטקסט, בחירה, תיבת סימון, רדיו וכו’.
- נגישות - כלול תוויות מתאימות, תכונות ARIA
- סגנונות אימות - הצג מצבי שגיאה כראוי
- עיצוב רספונסיבי - ודא שהטפסים עובדים בנייד
תיעוד קשור
Section titled “תיעוד קשור”- סקירת טפסים
- הפניה לרכיבי טופס
- אימות טופס
- פיתוח נושא