رندرهای فرم سفارشی
بررسی اجمالی
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
Section titled “رندر Bootstrap 4”use XOOPS\Form\Renderer\Bootstrap4Renderer;
$form->setRenderer(new Bootstrap4Renderer());رندر Bootstrap 5
Section titled “رندر Bootstrap 5”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 “مستندات مرتبط”- بررسی اجمالی فرم ها
- مرجع عناصر فرم
- اعتبار سنجی فرم
- توسعه تم