Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 16. 1. 2008, 23:14:01 · Upravil/a: Kcko
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 |
#2 · Zasláno: 16. 1. 2008, 23:53:53
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 |
#3 · Zasláno: 17. 1. 2008, 00:10:27
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]; } |
||
Časová prodleva: 14 let
|
0