Makro s přístupem do databáze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
trejjam
Backer | 65
+
0
-

Zdravím,

možná to řeším špatně. Myšlenka je taková že použitím makra:

{popisek "klíč v konkrétní tabulce"}

se natáhne z DB hodnota v ní uložená. Ať jsem googlil sebevíc tak jsem nic nenašel tudíž to asi nebude správně :)

Můžu požádat o nasměrování správným směrem?

Děkuji

mkoubik
Člen | 728
+
0
-

Lepší bude použít vlastní komponentu a Multiplier. Renderoval bys to pak pomocí {control komponenta-klic}. Jen pozor na to, aby se ti pro každou vykreslenou hodnotu nepokládal samostatný dotaz do db, pokud jich bude hodně.

trejjam
Backer | 65
+
0
-

Děkuji za nasměrování, vymyslel jsem toto, je to napsáno „vhodně“?

BasePresenter.php:

function createComponentLabels() {
	$labels=$this->context->labelsService;
	return new Nette\Application\UI\Multiplier( function ($data) use ($labels) {
		$label=new \Label($labels->getData($data));
		return $label;
	});
}

Label

class Label extends \Nette\Application\UI\Control {
	private $text;

	public function __construct($text) {
		parent::__construct();
		$this->text = $text;
	}
	public function render()
	{
		echo $this->text;
	}
}

LabelsService:

class LabelsService extends \Nette\Application\UI\Control {
	private $database;
	private $labels=array();
	private $data="";

	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}
	public function getData($name) {
		if (in_array($name, $this->labels)) {
			return $this->labels[$name];
		}
		else {
			$value=$this->database->table("labels")->select("value")->where(array("name"=>$name))->fetch();
			return $this->labels[$name]=$value->value;
		}
	}
	public function setData($name, $data) {
		$this->database->table("labels")->where(array("name"=>$name))->update(array("value"=>$data));
		$this->labels[$name]=$data;
	}
	function &__get($name) {
		$this->getData($name);
		return $this->labels[$name];
	}
}

Při psaní mi pomohl záznam ze Soboty: https://www.youtube.com/watch?…

Editoval trejjam (5. 5. 2014 0:12)