Zum Inhalt springen

Extension Browser: Selectorbox & Checkbox: Titel statt ID

Erstellt am 29. Juli 2010 · 2 Antworten · letzte Antwort am 20. Juni 2011

Tags: TCA, Frage

IvoFrie ·

Hallo Gemeinde,

Bin dabei, eine Datenbankstruktur für die Benutzung mit der Extension Browser aufzubauen.

Mit Hilfe des Kickstarters habe ich die notwendige Datenbankstruktur aufgebaut, wobei einige Felder im Backend als Selectorboxen und Checkboxen bereitgestellt werden.

Das Problem ist nur, dass im Frontend nicht wie im Backend die Begriffe, sondern die ID's der Werte erscheinen.

Die üblichen Lösungen klappen leider nicht, weil Browser lediglich auf die DB-Struktur zugreift und die Struktur keine eigentliche EXT ist.

Kennt jemand eine Möglichkeit, auf die in der locallang_db.xml definierten Werte zurückzugreifen?

In der locallang_db.xml liegen die Werte wie folgt vor:

<label index="tx_meineext_main.mediumofimage.I.0">Dia</label>

Bin für jede Hilfe dankbar!

Parameter:

T3 Version 4.4.1
PHP Version 5.2.12
MySQL Version 5.1.42
Browser Version 3.4.0

tko ·

Hallo IvoFrie,

ist zwar schon eine Weile her, aber ich hoffe ich habe Dir dennoch einen Tipp, der Dir (und vielleicht auch dadurch mir) weiterhilft:

Ich stehe beim extension-browser vor dem gleichen Problem und habe beim Stöbern folgenden thread von Ándre Mansfeld gefunden (danke für dessen Beharrlichkeit)

#468351,

der aufzeigt, wie die checkbox-values gebildet werden und wie sie über php wieder zurückentschlüsselt werden können. Der direkte Weg über die locallang_db.xml ist lt. Ulfried vom browserteam wohl nicht möglich!

Da ich vermute, das Du mit php ziemlich gut umgehen kannst, zumindest viel besser als ich, kann ich mir vorstellen, dass Du in der Lage bist, das php script aus dem thread so einzusetzen, dass die listview der EXT:browser zum gewünschten Ergebnis kommt. Ich denke da laienhaft an eine userfunc oder so.

Ich fasse daraus mal das Wesentliche zusammen:
1. checkbox-Hits werden binär in die db geschrieben
2. es gilt hierbei

Checkbox 1 = 0
Checkbox 2 = 2
Checkbox 3 = 4
Checkbox 4 = 8
Checkbox 5 = 16
Checkbox 6 = 32 usw

wenn also die checkboxen 2 und 5 gewählt werden, werden die werte addiert und in das Feld der db geschrieben.

3. php-script (danke Andreas!!):

// Den addierten Wert der Checkboxen aus der DB Tabelle->Spalte holen
$cbwert = $row['tx_feuserext_dienstleistungen']; // <- ist die Spalte mit dem Wert
 
	$ret=array(); // Ein Array für die Werte erzeugen 
        for($i=0;$i<7;$i++) {   // Die Bits durchgehen und für jedes Bit den Wert (0 oder 1) ermitteln
                $ret[$i]= ($cbwert & pow(2,$i)) ? 1 : 0; // Das Array ausgeben 
      		} 
      		$ausgabe = $ret;
 
$markerArray['###BIT1###']= $ret[0];
$markerArray['###BIT2###']= $ret[1];
$markerArray['###BIT3###']= $ret[2];
$markerArray['###BIT4###']= $ret[3];
$markerArray['###BIT5###']= $ret[4];
$markerArray['###BIT6###']= $ret[5];
$markerArray['###BIT7###']= $ret[6];
//t3lib_div::debug($ausgabe);

In seinem thread verfeinert Andreas sein script noch und führt weitere Erklärungen auf, die Du Dir auch unbedingt ansehen musst.

Mir fehlt leider noch das Wissen in php und die Typo3 Erfahrung, den aufgezeigten Weg zu einer Lösung zu bringen, aber ich bin mir sicher, dass dies der Weg sein müsste.

Würde mich freuen, wenn Du Deine Lösung hier posten würdest.

Mit besten Grüßen aus Ulm

Thomas

IvoFrie ·

Hallo Thomas,

Ist wirklich schon eine Weile her!

Ein PHP-Guru bin ich leider auch (noch) nicht, deshalb ist der Browser ja so toll! 😃

Das Problem von damals habe ich - zumindest bei der Selectbox - durch "Simple-Relations" anstelle von "MM-Relations" gelöst, dadurch erhälst Du eine kommagetrennte Liste mit den Werten, welche Du mit "split" und entsprechenden Wraps im Frontend darstellen kannst.

Deinen Post habe ich zum Anlass genommen, nochmals kurz eine Test-Erweiterung für den Browser herzustellen. Könntest Du nicht mit folgendem TS die entsprechenden Werte direkt aus der MM-Tabelle holen?

plugin.tx_browser_pi1 {
  views {
    list {
      1 {
        select (         
          tx_fmtestext_main.selectbox
        )
        relations {
          mm {
            tx_fmtestext_main {
              tx_fmtestext_main_selectbox_mm = tx_fmtestext_selectboxvalues
            }
          }
        }
      }
    }
    single {
      1 {
        select (
          tx_fmtestext_main.selectbox,
          tx_fmtestext_selectboxvalues.title
        )
        relations {
          mm {
            tx_fmtestext_main {
              tx_fmtestext_main_selectbox_mm = tx_fmtestext_selectboxvalues
            }
          }
        }
      }    
    }
  } 
}

Bei mir werden im Frontend die Werte aus "selectboxvalues.title" entsprechend der Auswahl im Datensatz im Backend richtig angezeigt.

Vielleicht hilft Dir das weiter?

Gruss, Ivo