Autor Zpráva
Kcko
Profil
Chci si vytvorit na svem blogu v komentarich featurku v podobe toho ze kdyz nekdo zada do komentare

[cislo] na nejaky komentar tak se potom nezobrazi pouze to cislo na ktere reagoval ale take jmeno cloveka ktery komentar zadaval.
Postupoval sem takto
// vrati do pole CISLO KOMENTARE a JMENO UZIVATELE
 function reakceNaKomentare($clanekID)
 {
  global $db, $page;
  $sql = $db->query("SELECT id, jmeno FROM komentare WHERE id_cl = '$clanekID'");
  
  $array = array();
  while ($r = $db->fetch($sql))
  {
    $array[$r->id] = $r->jmeno;
  }
  
  return $array;
 
 }


// Callback funkce
 function nahradCisla($out)
 {
   global $reakce;
   return   $reakce[$out[1]] ;
 }


// klasicky vypis komentaru
$reakce = reakceNaKomentare($_GET_argument);
select * from komentare ...
{
   $r->vzkaz = preg_replace_callback("~\[(\d*)\]~U", "nahradCisla", $r->vzkaz);
}




jenze pole $reakce se do callback funkce vubec nedostane
funguje to jedine takhle

 function nahradCisla($out)
 {
  global $reakce;
  $reakce = reakceNaKomentare('20080112-Jak-Na-Hover-v-IE-Pro-Vsechny-HTML-prvky')   ;
  return   $reakce[$out[1]] ;
 }

Coz je tedy nepripustne pro me aby se mi v teto fci v cyklu volala porad ta sama funkce dokola

Jak se to da resit?
Mastodont
Profil
Zdá se, že nejsi první, kdo něco podobného řeší:

http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=54 127

Náznak řešení je asi tady (matthew, 2. komentář shora):

http://php.uli.it/manual/hk/function.preg-replace-callback.php

Já se tomu věnovat nehodlám, ale asi takto: zkus zapomenout na slovo global a nauč se psát bez něj.
Kcko
Profil
Mastodont
Dik, na anonymni fci jsem se taky koukal, nakonec jsem to vyresil pomoci staticke tridy.

Takze kdyby to nekdy nekomu pomohlo:


$reakce = reakceNaKomentare($komentar);
Storage::setPole($reakce);


class Storage
{
private static $tvojePole;

public static function getPole()
{
return self::$tvojePole;
}

public static function setPole($pole)
{
self::$tvojePole = $pole;
}
}


function nahradCisla($out)
{

$reakce = Storage::getPole();

if (array_key_exists($out[1], $reakce))
return "<a href='#komentar".$out[1]."'>[" .$reakce[$out[1]][0]."] ".$reakce[$out[1]][1]."</a>";
else
return $out[1];

}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0