Problem

Wer eine Seite außerdem in arabischer Sprache realisieren und dabei Formulare per BreezingForms anbieten will, wird vor dem Problem stehen, dass die Rechts-zu-Links-Orientierung (rtl-direction) nicht einfach umsetzbar ist. Leider bietet BF hierfür keine Parametierung und unkomfortablerweise sind die Feld-Labels direkt im Element selbst über Styles formartiert - einschließlich einem float:left im Label Element .ff-label. In irgendwelchen CSS-Files also Anweisungen unterzubringen, funktionieren selbst mit einem !important nicht.



Lösung

Unser Ziel besteht darin, im Fall einer arabischen Sprache also bei rtl-direction das Label rechts vom Formularfeld anzuordnen, was üblich über ein float:right erreicht wird. Diese Styleanweisung muss dem Selector .ff-label zugewiesen werden.

BF bettet vor dem Formular eine Style-Block ein. Dieser wird, ja leider, direkt im Core-Script components/com_facileforms/facileforms.process.php hart codiert erzeugt (ca. Zeile 2914). Hier müssen wir eingreifen.

Zunächst brauchen wir die Information, ob wir eine Sprache mit notwendiger RTL-Orientierung haben. Das machen wir am Anfang des des Scriptes und stellen uns diese Info als Konstante RTL zur Verfügung:

facileforms.process.php - RTL-Konstante erzeugen
15
16
17
$lang = JLanguage::getInstance( $locale );
$mosConfig_lang = $lang->getBackwardLang();
define('RTL', $lang->_metadata['rtl']);

Dann modifizieren wir die Style-Sheet-Block-Ausgabe durch Einfügungen. Wir nutzen hierfür eine neue Variable $floatRight:

facileforms.process.php - Ausgabe der Style-Anweisungen RTL-abhängig
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
} else { // case of forms done with the easy mode
 $floatRight = ( RTL ) ? 'float:right !important; ' : '';
 echo '
 <style type="text/css">
 ul.droppableArea, ul.droppableArea li { background-image: none; list-style: none; '.$floatRight.' }
 li.ff_listItem { width: auto; list-style: none; }
 li.ff_listItem .ff_div { width: auto; float: left; }
 .ff_label { '.$floatRight.' outline: none; }
 .ff_elem { float: left; }
 .ff_dragBox { display: none; }
 </style>
 ';

Im Ergebnis dieser Modifikationen erscheint im Formular-Quelltext dann folgendes für den Fall einer RTL-Direction. Wir haben dann hier unser float:right !important:

Formular-Styles
ul.droppableArea, ul.droppableArea li { background-image: none; list-style: none; float:right !important; }
li.ff_listItem { width: auto; list-style: none; }
li.ff_listItem .ff_div { width: auto; float: left; }
.ff_label { float:right !important; outline: none; }
.ff_elem { float: left; }
.ff_dragBox { display: none; }

Hier ist ein Beispiel zu sehen, wie ein solches Formular dann korrekt arabisch formatiert ist: www.optimess.com.