Seltsames verhalten?

Alice

Erfahrenes Mitglied
Hallo.

Ich programmiere aktuell ein "Add-On" für vBulletin-4 und beobachte ein seltsames verhalten.

Vielleicht weiss ja hier jemand rat?

PHP:
if ($thread['visible'] == 0)
{
  echo 'Der Thread  wird moderiert.<br />';
}

if ($thread['visible'] == 1)
{
  echo 'Der Thread ist offen.<br />';
}

if ($thread['visible'] == 2)
{
  echo 'Der Thread ist geschlossen.<br />';
}

Der Code wird über das vBulletin PlugIn-System verarbeitet und funktioniert. Im Header (weil echo) erscheinen dann die "echos" in der richtigen Reihenfolge, weil es ja X-Mal geparst (heisst das so?) wird (je nachdem wieviele Themen angezeigt werden pro Seite).

Mache ich aber nun folgendes...

PHP:
if ($thread['visible'] == 0)
{
   $StatusThread = 'Der Thread  wird moderiert.';
   $StatusMod = 'style="background-color:#ff0000;"';
   vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread,'StatusMod ' => $StatusMod ));
}

if ($thread['visible'] == 1)
{
  $StatusThread = 'Der Thread ist offen.';
  vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread));
}

if ($thread['visible'] == 2)
{
  $StatusThread = 'Der Thread ist geschlossen.';
  vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread));
}

Kurze Erläuterung:
In vB4 muss man Variablen in Templates "registrieren" bzw. "anmelden".

PHP:
// Registriere die Variable "$StatusThread" als StatusThread für das Template "threadbit"
vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread));

Weiter im Text...

Setze ich die Variable nun in das Template ein...

HTML:
<ul {vb:raw StatusMod}>
  <li>Status-Icon</li>
  <li>Thread-Titel</li>
  <li>Letzter Beitrag</li>
</ul>

Werden ab einem "treffer" (wird moderiert) alle weiteren "ul" Farblich verändert.

Das dürfte aber eigentlich nicht so sein!? :confused:

Das Template "threadbit" wird ja z.B. 20 mal ausgeführt und die IF-Abfrage jedes mal erneut durchlaufen.

So geht es übrigens "richtig"...

PHP:
if ($thread['visible'] == 0)
{
   $StatusThread = 'Der Thread  wird moderiert.';
   $StatusMod = 'style="background-color:#ff0000;"';
   vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread,'StatusMod ' => $StatusMod ));
}

if ($thread['visible'] == 1)
{
  $StatusThread = 'Der Thread ist offen.';
   $StatusMod = '';
   vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread,'StatusMod ' => $StatusMod ));

}

if ($thread['visible'] == 2)
{
  $StatusThread = 'Der Thread ist geschlossen.';
  $StatusMod = '';
   vB_Template::preRegister('threadbit', array('StatusThread ' => $StatusThread,'StatusMod ' => $StatusMod ));

}

Ich kapier das nicht.
 
Hmm, sollte eigentlich klar sein, solange man innerhalb einer Schleife den Wert einer Variablen nicht neu zuweist, dass sich dieser nicht ändert. Lässt sich relativ einfach aus probieren:

PHP:
$a = 5;

for ($i = 0; $i < 10; $i++)
{
  if ($i % 2 == 0) {
    $a++;
  }

  printf("i = %d, a = %d\n", $i, $a);
}

Da deine Variable $StatusMod im ersten Code nur innerhalb "if($thread['visible']==0)"-Kondition mit einem Wert versorgt wird, ist er bei den anderen if-Konditions natürlich mit dem gleichen Wert versorgt.

Ein seltsames Verhalten kann ich nicht feststellen. Du solltest dir Gedanken über die Gültigkeit von Variablen machen ;-)
 
Zurück