Jednoduché nastavení položek webu z databáze
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ikysek
- Člen | 22
Zdravím, mám:
namespace App\Model;
class Settings extends Base {
/** @var string */
protected $tableName = 'settings';
public function getAll() {
$rows = $this->findAll();
$settings = array();
foreach($rows as $row) {
$settings[$row->name] = $row->value;
}
return $settings;
}
}
(V base mám funkce pro práci s databází)
BasePresenter
<?php
namespace App\Presenters;
use Nette,
App\Model;
/**
* Base presenter for all application presenters.
* @property-read \SystemContainer $context
*/
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
private $settings;
public function __construct(\App\Model\Settings $settings) {
parent::__construct();
$this->template->settings = $this->settings = $settings->getAll();
}
public function getSettings($name)
{
return $this->settings[$name];
}
}
Ale při použití v latte, např:
<title>{block title|striptags}{$settings['title']}}{/block}</title>
Tracy hlásí: „Undefined variable: settings“, jakto? Kdyť přece v konstruktoru BasePresenteru do template settings nalévám..
- studna
- Člen | 181
V konstruktoru ještě neznáš šablonu (view). Pro začátek mrkni na životní cyklus presenteru https://doc.nette.org/…n/presenters#….
<?php
namespace App\Presenters;
use Nette,
App\Model;
/**
* Base presenter for all application presenters.
* @property-read \SystemContainer $context
*/
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
private $settings;
public function __construct(\App\Model\Settings $settings) {
parent::__construct();
$this->settings = $settings->getAll();
}
protected function beforeRender() {
$this->template->settings = $this->settings;
}
public function getSettings($name)
{
return $this->settings[$name];
}
}
Editoval studna (7. 3. 2015 15:30)