Quantcast
Channel: OXID Community Forum
Viewing all articles
Browse latest Browse all 6951

Multidimensionale Varianten und der Non-Breaking-Space

$
0
0
Hallo, Community,

ich hätte mir heute fast die Haare ausgerissen, da ein Kunde bei einem Artikel mit MD-Varianten auf der Detailseite teilweise nicht "S" und dann "Gelb" in Auswahl1 bzw. Auswahl2 sah, sondern in Auswahl1 "S | Gelb" - hier am Bsp. "Größe / Farbe" - und es ging natürlich garnix.

Der Kunde hatte augenscheinlich alles korrekt eingegeben - augenscheinlich...

Hinweis: Das ganze vollzog sich auf einem Mac - kann gut sein, dass das bei Windows nicht passiert, weil die Tastenkombination da was anderes oder nichts bedeutet.

Um die Varianten einzugeben, muss man ja als Trennzeichen Leerzeichen-Strich-Leerzeichen eingeben. Das wären die Tasten auf der Mac-Tastatur: <Space><Alt+7><Space>

Nun kann es passieren, dass stattdessen <Space><Alt+7><Alt+Space> eingegeben wurde. Der kleine Finger hing zu lange auf der Alt-Taste. Am Mac bedeutet <Alt+Space> "Non-Breaking-Space", eine besondere Form des Leerzeichens, nämlich eines, nachdem kein Zeilenumbruch stattfinden darf. Sieht aus wie ein normales Leerzeichen - ist es aber nicht.

Die Varianten-Logik von OXID hat dann versucht, die Angaben anhand Leerzeichen-Strich-Leerzeichen zu trennen, ist aber auf Leerzeichen-Strich-Non-Breaking-Space gestoßen und hat eben nicht erkannt, dass hier getrennt werden soll.

Das soll man mal einem Laien erklären und man kann es mit den Augen nicht erkennen! Das Problem tritt natürlich nicht auf, wenn man Auswahllisten arbeitet, zumindest nicht so einfach.

Wir haben OXID jetzt per Modul so modifiziert, dass er auch Non-Breaking-Space erkennt. Außerdem haben wir das ganze gleich so umgebaut, dass vor und hinter dem Strich garkein Leerzeichen mehr eingegeben werden muss - spart also etwas Arbeit und hat eh immer nur genervt. Wer verwendet das Pipe-Zeichen schon im Artikel-Text... Anbei der Code des Moduls:

PHP Code:

// Überschreibt oxVariantHandler
class NBSVariantHandler extends NBSVariantHandler_parent {

    
/**
     * @var string Trennzeichen für MD-Varianten. HOTFIX: Nur <PIPE> s. _getSelections
     */
    
protected $_sMdSeparator "|";

    
/**
     * HOTFIX: MD-Varianten, die am Mac eingegeben werden, können von einem Fehler betroffen sein, wenn
     * statt <SPACE><PIPE><SPACE> <SPACE><PIPE><NON-BREAKING-SPACE> eingegeben wird. Das kann vorkommen,
     * weil <PIPE> am deutschen Keyboard mit alt+7 erzeugt wird und <NON-BREAKING-SPACE> mit alt+space.
     * Lösung: MD-Varianten werden nur anhand von <PIPE> getrennt - das Leerzeichen nervt eh. Danach werden
     * die getrennten teile getrimmt, wobei das trim so eingestellt ist, dass auch non-breaking Spaces gelöscht werden.
     * @param $sTitle
     * @return array
     */
    
protected function _getSelections$sTitle )
    {
        
$aSelections parent::_getSelections$sTitle );

        
// Change: Nach dem Zerlegen alle Werte trimmen, dabei auch NB-Space löschen
        
array_walk($aSelections,function( &$el$key){
            
$el trim($el"\xC2\xA0\n");
        });
        
// /Change

        
return $aSelections;
    }


Vielleicht hilft es euch ja mal bei Gelegenheit.

Viewing all articles
Browse latest Browse all 6951

Trending Articles