Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

Leerzeichen in Eingabefeldern erlauben #4287

Closed
Babelfisch opened this Issue May 8, 2012 · 8 comments

Comments

Projects
None yet
2 participants

Durch $varInput = trim($varInput) in der Widget.php ist es ja seit einiger Zeit nicht mehr möglich, reine Leerzeichen oder Text mit umschließenden Leerzeichen zu verarbeiten. Als Standardverhalten ist das ja ok, es sollte im DCA jedoch irgendein Flag geschaffen werden, um den Text „roh“ – also ohne Änderungen – speichern zu können, ohne gleich komplett ein eigenes Widget bauen zu müssen.

Im aktuellen Fall habe ich eine Erweiterung zum Suchern und Ersetzen in Inhaltselementen. Dort sind Leerzeichen in der Eingabe durchaus gewünscht, um bspw. ' …' mit 'nbsp;…' zu ersetzen oder falsche nbsp’s mit einem Leerzeichen.

Habe ich hier nur ein Flag übersehen und wenn nicht, könnte man nicht ein solches einführen?

Darf ich mal vorsichtig nachfragen, wie es hiermit aussieht? Ich will ja nicht drängeln aber für mich und meine Erweiterungen ist das Thema schon wichtig.

Irgendwas neues? Ich habe jetzt hier die nächste Erweiterung, die sich nicht realisieren lässt, weil dort auch mal ein Leerzeichen am Anfang oder Ende vom Text stehen muss.

Kann man nicht einfach ein standardmäßiges trim-Attribut beim eval einführen, welches sich bei Bedarf deaktivieren lässt?

Owner

leofeyer commented Jul 23, 2014

Außer Dir scheint niemand dieses Problem zu haben. Eventuell übersiehst Du einen alternativen Lösungsweg?

Mag ja sein, dass außer mir niemand eine Suchen- & Ersetzen-Erweiterung schreibt oder wie bei AutoLayout beliebige Texte (inkl. Leerzeichen) benötigt. Einen alternativen Lösungsweg habe ich schon lange gesucht aber da trim nun mal hier und (doppelt, da in Widget schon getrimt wird) hier hart codiert ist, fällt mir jetzt nur noch der Weg ein, die Core-Methode Widget::validator und das Widget selbst zu überschreiben und das ist schon etwas heftig.

Mein Vorschlag wäre einfach ein zusätzliches eval-Attribut wie bspw. doNotTrim einzuführen. In der Widget.php dann einfach dieses im Setter mit setzen:

case 'doNotTrim':
  $this->arrAttributes[$strKey] = $varValue;
  break;

… und im Validator auswerten:

if (!isset($this->arrAttributes['doNotTrim']) || !$this->arrAttributes['doNotTrim'])
{
    $varInput = trim($varInput);
}

Jetzt in TextField:: validator noch das doppelte trim raus und alles funktioniert wie gehabt und wer mag, kann Trim be Bedarf deaktivieren:

'eval'  => array('doNotTrim' => true)
Owner

leofeyer commented Jul 24, 2014

Über einen save_callback ließe sich das auch lösen, oder?

@leofeyer leofeyer modified the milestones: 3.4.0, 3.x.x Jul 24, 2014

Nicht wirklich sauber, da der save_callback erst später ausgelöst wird und dort die Leerzeichen schon nicht mehr da sind.

Der einzige Weg wäre dann noch über Input::post('feld') den Wert direkt auszulesen aber das hieße dann auch, sämtliche Eingabeüberprüfungen noch mal selbst zu machen. Fände ich jetzt nicht wirklich eine gute und saubere Lösung.

Owner

leofeyer commented Sep 18, 2014

Implementiert in fe1f0e9.

@leofeyer leofeyer closed this Sep 18, 2014

Danke!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment