Datagrid Ublaboo – Vytváření odkazů

Dvory59
Člen | 40
+
0
-

Zdravím, chtěl bych se zeptat na řešení odkazů v datagridu Ublaboo.

Umí ColumnLink odkazovat i jinam než na akci? Případně jak můžu vytvořit odkaz z URL, kterou mám v databázi?
Zkoušel jsem :

public function createComponentSimpleGrid($name)
	{$grid = new DataGrid($this, $name);
		$grid->setDataSource($this->db->table('urls');
	    $grid->addColumnLink('url','Odkaz','url')

s tím, že url je sloupec ve kterým jsou uložený kompletní odkazy na který se potřebuju dostat… Ale tohle řešení je asi nesmysl, teda určitě je to nesmysl, ale něco v tomhle smyslu bych potřeboval. Aby se vytvořil odkaz z obsahu sloupce. Dá se to nějak udělat? Díky všem za případné rady!

Editoval Dvory59 (11. 3. 2018 17:12)

Pavel Janda
Člen | 977
+
+1
-

@Dvory59 Použij vlastní renderer, popř vlastní templatíček té akce..

Dvory59
Člen | 40
+
0
-

Děkuji, nakonec se podařilo. Nevšiml jsem si v první chvíli funkce pro možnost zrušit escapování.

Jen jsem narazil na problém, když jsem si vytvořil datagrid jako komponentu přes továrnu a potřebuji v různých metodách presenterů přidávat různé sloupce nějakým takovýmto způsobem:

class Presenter extends BasePresenter
{
	public function createComponentSimpleGrid()
	{
		$grid = $this->fooControlFactory->create();
      $grid->addColumnText('id','ID');
		return $grid;
	}
}

Bohužel tento zápis nefunguje. Rád bych v presenteru měnil i zdroje odkud se berou pro grid data a nechávat továrnu ať tvoří jen jednoduchou kostru gridu.
Lze tuto situaci nějakým podobným stylem vyřešit nebo jsem úplně vedle?

V továrně mám pak

namespace App\Components;
interface IFooControlFactory
{
	/**	 * @return FooControl	 */
	public function create();
}

a v samotné komponentě mám kromě funkce render() a konstruktoru funkci na vytvoření

class FooControl extends \Nette\Application\UI\Control
{
public function createComponentSimpleGrid($name)
	{
        $grid = new DataGrid($this, $name);
		$grid->setDataSource($this->database->table('vut_projects')->select('*'));
		$grid->addColumnText('name', 'Name');
		$grid->addColumnText('detail_url', 'Detail');
        return $grid;
	}
}

Děkuju za rady!

rkor
Člen | 62
+
+1
-

Teoreticky můžeš:

Presenter

$columns = ['id'=>'ID','name'=>'Name'];
$grid = $this->fooControlFactory->create($columns);

Komponenta

$grid = new Datagrid();
foreach($columns as $key=>$name) {
$grid->addColumnText($key,$name);
}

Editoval rkor (13. 3. 2018 2:57)