Trošku zvláštní helper – je to správně?
- Kcko
- Člen | 468
V mém komentářovém systému je možno kliknout na reagovat se přenese číslo ve formátu [číslo] to se uloží do DB a při výpisu zobrazuji odkaz na ten komentář a jméno uživatele. Napsal jsem si na to helper a nejsem si tedy jistý, jestli je to OK. Funguje, ale to použití vypadá hrozně.
Připravím si helper v renderBefore
Proměnná $commentsArr se do helperu dostává až v šabloně, protože
nevím jak ji tam dostat jinak.
$that = $this; // na hostingu je PHP 5.3 arghh!
$this->template->registerHelper('reactions', function($string, $commentsArr) use ($that){
$string = preg_replace_callback("~\[(\d*?)\]~si", function($out) use($commentsArr) {
if (array_key_exists($out[1], $commentsArr))
return "<a href='#komentar".$out[1]."'>[" .$commentsArr[$out[1]][0]."] ".$commentsArr[$out[1]][1]."</a>";
else
return $out[1];
}, $string);
return $string;
});
renderDetail
.
.
.
$comments = $this->template->comments = $this->model->findComments($this->template->post->id);
$commentsArr = array();
$i = 0;
foreach ($comments as $arr)
{
$i++;
$commentsArr[$arr->id] = array($i, $arr->jmeno);
}
$this->template->commentsArr = $commentsArr;
Použití <div class=„text“>{$cmtRow->vzkaz|striptags|reactions:$commentsArr|makeLink|nl2br|smileys}</div>
Moje otázka zní tedy, lze to napsat trošku lépe? Zápis reactions:$commentsArr vypadá fakt ugly.
A ještě drobnost. Potřebuji vykonávat určité záměny jako nahrazení značek za smajlíky, nahrazení textových odkazů za klikací atd takže potřebuji povolit HTML tagy. Nejdříve odstranění přes striptags a pak provedu záměny, je to bezpečné? Četl jsem cosi o tom, že striptags není uplně ono, ale nevím jak to napsat jinak.
- Myiyk
- Člen | 321
Místo předání přes šablonu si to pole můžeš předat v presenteru.
Přidáš si proměnnou do presenteru
class AnyPresenter extends .... {
public $commentsArr;
a místo
$this->template->commentsArr = $commentsArr;
použiješ
$this->commentsArr = $commentsArr;
Výsledný helper
$that = $this; // na hostingu je PHP 5.3 arghh!
$this->template->registerHelper('reactions', function($string) use ($that){
$commentsArr = $that->commentsArr;
$string = preg_replace_callback("~\[(\d*?)\]~si", function($out) use($commentsArr) {
if (array_key_exists($out[1], $commentsArr))
return "<a href='#komentar".$out[1]."'>[" .$commentsArr[$out[1]][0]."] ".$commentsArr[$out[1]][1]."</a>";
else
return $out[1];
}, $string);
return $string;
});
použití
<div
class=„text“>{$cmtRow->vzkaz|striptags|reactions|makeLink|nl2br|smileys}</div>