MyBB.de Forum
Sprache des ACP (Backend) auslesen? - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Entwicklung (https://www.mybb.de/forum/forum-74.html)
+--- Thema: Sprache des ACP (Backend) auslesen? (/thread-37500.html)

Seiten: Seiten: 1 2 3 4 5


RE: Sprache des ACP (Backend) auslesen? - Gerti - 26.10.2020

Danke für die Lösungsvariante.

Irgendwo habe ich noch einen Fehler in der Umsetzung im Abschnitt "Zusatztext". Nachstehend das gesamte Kontrukt:
PHP-Code:
$pn_admin $mybb->settings['pn_empfaenger_uid'];
$pn_language $db->write_query("select cplanguage FROM ".TABLE_PREFIX."adminoptions WHERE uid='$pn_admin'"); 
$pn_language $db->fetch_array($pn_language);

var_dump($pn_language);

// Zusatztext
$info_text "";
   if(empty($pn_language)) {
      Fallback // die in mybb_settings > cplanguage definierte Sprache
   }
   if($pn_language == "deutsch_du") {
      Sprachvaribale-DU
   
}
   if($pn_language == "deutsch_sie") {
      Sprachvaribale-SIE
   
}
   if($pn_language == "english") {
      Sprachvaribale-Englisch
   
}
   if($pn_language == "spanish") {
      Sprachvaribale-Spanisch
   

Obwohl beim Admin (pn_empfaenger) die Sprache in mybb->adminoptions auf "english" definiert ist, erfolgt keine Textanzeige. Nur wenn leer, wird der Text angezeigt. Was mache ich falsch?


RE: Sprache des ACP (Backend) auslesen? - itsmeJAY - 26.10.2020

$pn_language ist ein array und kann somit nicht über deine Abfrage funktionieren. Poste hier mal bitte das Ergebnis von:

var_dump($pn_language);

Du musst auf das Array so zugreifen:

$pn_language['index'] ;


RE: Sprache des ACP (Backend) auslesen? - Gerti - 26.10.2020

(26.10.2020, 13:32)itsmeJAY schrieb: Poste hier mal bitte das Ergebnis von:
PHP-Code:
var_dump($pn_language); 

Ausgabergebnisse "mybb_adminoptions"
Eingestellt "keine Sprache":
PHP-Code:
array(1) { ["cplanguage"]=> string(0"" 

Eingestellt "Deutsch_Du":
PHP-Code:
array(1) { ["cplanguage"]=> string(10"deutsch_du" 

Eingestellt "Deutsch_Sie":
PHP-Code:
array(1) { ["cplanguage"]=> string(11"deutsch_sie" 

Eingestellt "English":
PHP-Code:
array(1) { ["cplanguage"]=> string(7"english" 

Somit dürfte das array korrekt sein.

(26.10.2020, 13:32)itsmeJAY schrieb: Du musst auf das Array so zugreifen:
PHP-Code:
$pn_language['index'] ; 
Also mit:
PHP-Code:
if($pn_language['index'] == "deutsch_du") {
Sprachvariable // deutsch_du

Es erfolgt jedoch nur die Ausgabe einer Sprachvariable bei:
PHP-Code:
if(empty($pn_language['index'])) {
Sprachvariable




RE: Sprache des ACP (Backend) auslesen? - Schnapsnase - 26.10.2020

(26.10.2020, 13:32)itsmeJAY schrieb: Du musst auf das Array so zugreifen:

$pn_language['index'] ;

@JAY
Frage nebenbei:

Da in diesem speziellen Fall das array immer nur einen Wert hat (oder eben leer ist), ist doch der Index immer [0], oder sehe ich das falsch??
Also:
PHP-Code:
if($pn_language[0] == "deutsch_du") {
...

Sollte doch immer korrekt sein, oder habe ich einen Denkfehler?


RE: Sprache des ACP (Backend) auslesen? - itsmeJAY - 26.10.2020

@Gerti: Versuch mal:

PHP-Code:
$pn_admin $mybb->settings['pn_empfaenger_uid'];
$pn_language $db->write_query("select cplanguage FROM ".TABLE_PREFIX."adminoptions WHERE uid='$pn_admin'"); 
$pn_language $db->fetch_array($pn_language);

var_dump($pn_language);

// Zusatztext
$info_text "";
   if(empty($pn_language['cplanguage'])) {
      Fallback // die in mybb_settings > cplanguage definierte Sprache
   }
   if($pn_language['cplanguage'] == "deutsch_du") {
      Sprachvaribale-DU
   
}
   if($pn_language['cplanguage'] == "deutsch_sie") {
      Sprachvaribale-SIE
   
}
   if($pn_language['cplanguage'] == "english") {
      Sprachvaribale-Englisch
   
}
   if($pn_language['cplanguage'] == "spanish") {
      Sprachvaribale-Spanisch
   


@Schnapsnase:

ja, das gilt aber nur für indizierte Arrays ohne Schlüssel, also bspw:

PHP-Code:
$array = array("foo""bar""hello""world"); 

Um auf "foo" zuzugreifenm würde hier 
PHP-Code:
var_dump($array[0]); 
genügen.  Wichtig zu PHP-Basics: Der erste Index eines Arrays ist immer 0 und nicht 1.

Im oben genannten Beispiel (von Gerti) müssen wir allerdings folgendes beachten:
https://www.w3schools.com/php/php_arrays_associative.asp

Du (Schnapsnase) gehst allerdings von folgendem indizierten Array aus:
https://www.w3schools.com/php/php_arrays_indexed.asp

Achja, wenn wir sowieso bei Arrays sind, haben wir auch noch das multidimensionale Array - das könntet ihr euch im gleichen Zuge direkt mit angucken! Wink
https://www.w3schools.com/php/php_arrays_multidimensional.asp


RE: Sprache des ACP (Backend) auslesen? - Schnapsnase - 26.10.2020

(26.10.2020, 15:10)itsmeJAY schrieb: Du (Schnapsnase) gehst allerdings von folgendem indizierten Array aus:

Danke JAY, ich habe den Unterschied verstanden... Wink


RE: Sprache des ACP (Backend) auslesen? - Gerti - 26.10.2020

Mittelerweile klappt es Dank eurer Geduld und Unterstützung so gut wie perfekt.

Zum jedoch alle Unwegbarkeiten bzgl. der Spracheinstellungen zu umgehen, würde ich gerne noch einen Befehl beim Aktivieren einbinden.

Wenn $mybb->users['language'] = "leer" (somit default) dann fülle $mybb->users['language'] mit mybb->settings['bblanguage'] (ist default).
Sollte bereits eine Sprachangabe in $mybb->users['language'] vorhanden sein, soll diese belassen werden.

Mit dieser Vorgehensweise würde ich keinem User und keinem Forum schaden bzw. negatives bewerkstelligen (lasse mich gerne eines Besseren belehren).

Es würde mir zig Variationen bzgl. der ansonsten kombinierten Sprachdarstellungen ersparen. Sind die Werte mit obiger Anweisung einmal eingestellt, kann ich mit vier IF-Bedingungen bei derzeit drei Sprachen (deutsch_du; deutsch_sie; english) alle hierbei möglichen Szenarien abfangen.


RE: Sprache des ACP (Backend) auslesen? - StefanT - 26.10.2020

(26.10.2020, 11:11)itsmeJAY schrieb: Bitte beache, dass $db->query ersetzt wurde durch:
https://docs.mybb.com/1.8/development/plugins/database-methods/#db-write_query
Das hast du falsch verstanden. $db->write_query ergibt für SELECT-Abfragen keinen Sinn.

$db->simple_select wäre hier die schönere Lösung, gerne in Kombination mit $db->fetch_field und einer Absicherung gegen SQL-Injection.


RE: Sprache des ACP (Backend) auslesen? - itsmeJAY - 26.10.2020

Ich habe das richtig verstanden, wollte Schnapsnase nur darauf hinweisen, dass wenn er die Methode Query nimmt, er lieber write_query nehmen sollte. Mir ist bewusst das die simple_select Methode dafür besser geeignet wäre. Dadurch hätte ich den obigen Kollegen aber wieder den Code vermiest. Wink dennoch danke für die Info.


RE: Sprache des ACP (Backend) auslesen? - StefanT - 26.10.2020

(26.10.2020, 20:09)itsmeJAY schrieb: Ich habe das richtig verstanden, wollte Schnapsnase nur darauf hinweisen, dass wenn er die Methode Query nimmt, er lieber write_query nehmen sollte.
Das stimmt aber nicht, query und write_query werden für verschiedene Zwecke verwendet.

Die korrekte Verwendung siehst du beispielsweise bei simple_select und update_query.