Filter s napojenim do db alebo?

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

Ako riešit túto situáciu:

V tinymce pri editacii textu článku zadam kód napr {link Product:detial 1} {value Product:price 1} a chcem aby to vrátilo link a cenu produktu ktory som chcel.

Bez nette som to mal cez regular a databazu, ktora mi vratila potrebne hodnoty. Nejak taktot

<?php
function getText($smart = true)
{
	if($smart) {
		$this->text = $this->helper->getSmartText($this->text);
		//+ nejaka ta cache
	} else {
		$this->text;
	}
}
?>

Ako to riešiť v nette? Cez filtry a vlozit tam nejak databazu? {$article->text|smartText}

alebo v presentery si definovat

<?php
$template->article = $article->model->get( id )
$template->text = $neco->getSmartText($article->text);
/* jak sa da vyriesit update? $article->text = ..use update() error */
?>

Pokial do filtra DB, ako ju vrazím do statickej triedy? alebo mam aj tie filtry blbo? :)

<?php
class Filters
{

    public static function common($filter, $value)
    {
        if (method_exists(__CLASS__, $filter)) {
            $args = func_get_args();
            array_shift($args);
            return call_user_func_array(array(__CLASS__, $filter), $args);
        }
    }

    public static function price($price)
    {
        $price = $price * self::$course;
        return number_format($price, 0, ",", " ")." ".self::$courseCode;
    }
	...
}
?>

Díky

CZechBoY
Člen | 3608
+
+2
-

problém update: udělej z ActiveRow obyčejný objekt

$row = (object)iterator_to_array($row);

problém statická třída: udělej z ní službu

class MujHelper
{
	private $db;

	public function __construct(Nette\Database\Context $db)
	{
		$this->db = $db;
	}

	public function price($price)
	{
		$price = $price * $this->getCourse();

		return $this->localizeMoney($price);
	}
}
services:
	- MujHelper
class MujPresenter extends Nette\Application\UI\Presenter
{
	private $mujHelper;

	public function __construct(MujHelper $mujHelper)
	{
		parent::__construct();

		$this->mujHelper = $mujHelper;
	}

	// pokud bys chtěl zaregistrovat ještě ten filtr
	public function beforeRender()
	{
		$this->template->addFilter('price', [$this->mujHelper, 'price']);
	}
}

Editoval CZechBoY (21. 10. 2016 12:49)