Vykreslení stejné komponenty dvakrát s různými šablonami

krcuk41
Člen | 12
+
0
-

Ahoj,

ve svojí aplikaci mám napsanou komponentu, kterou potřebuju vypsat na dvou místech. Jediný rozdíl je v tom, že se použije jiná šablona.

Problém je v tom, že každá šablona má svůj snippet a pokud se snažím při použití ajaxu o jejich překreslení tak se překreslí snippet pouze z jedné šablony.

Nenapadá vás zároveň lepší způsob vyřešení tohodle problému než dvojí vykreslení komponenty? Díky.

šablona

<?php
 {control panel, left => false}

 {control panel, left => true}
?>

render komponenty

<?php
public function render($params = array()) {
    if (isset($params['left']) && $params['left']) {
        $this->template->setFile(__DIR__ . '/StopwatchLeft.latte');
    } else {
        $this->template->setFile(__DIR__ . '/StopwatchPanel.latte');
    }
    $this->template->render();
}
?>
CZechBoY
Člen | 3608
+
0
-

Jo, ty render parametry v ajaxu nefungujou. Doporucuje se vse predavat pres konstruktor.
V tomhle pripade muzes pouzit Multiplier

krcuk41
Člen | 12
+
0
-

Mohl by jsi postnout ukázku?

Přes Multiplier jsem to zkoušel a nepovedlo se mi to rozchodit. Komponentu tvořím přes továrničku, kde už v metodě create() předávám jeden parametr.

Díky.

David Matějka
Moderator | 6445
+
+4
-

nejjednodussi bude, kdyz to definujes v presenteru jako dve komponenty

protected function createComponentPanel()
{
	$control = $this->panelFactory->create();
	return $control;
}

protected function createComponentLeftPanel()
{
	$control = $this->panelFactory->create();
	$control->enableLeftPanel(); //a tam si nastavis do clenske property nejaky flag

	return $control;
}
krcuk41
Člen | 12
+
0
-

Díky to mě taky mohlo napadnout. Ještě jedna otázka. Komponenta má v sobě SQL dotaz a nechtěl bych aby se 2× prováděl. Napadá mě možnost ty data získat už v presenteru a do komponety je předat přes setter. Co myslíš?

CZechBoY
Člen | 3608
+
0
-

Můžeš si to zacachovat třeba do statický proměnný.