Grido – komponenta pro vykreslení vlastního sloupce

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

Ahoj,
používám o5 grido. Aplikace vychází z Nette sandbox.
Když mám v presenteru

use Grido\Grid;

...

protected function createComponentComplaintboardGrid($name) {
        $grid = new Grid($this, $name);
        $model = $this->database;
        $model = $model->query($this->getSQLQuery())->fetchAll();
        $grid->model = $model;
        $grid->setPrimaryKey("Complaint_ID");
        $grid->addColumnText('ComplaintNumber', self::$trans->translate("messages.database.ClaimNumber"))
                ->setSortable();
        $grid->addColumnText('Type', self::$trans->translate("messages.database.Type"))
                ->setSortable();
       ...
        $grid->addColumnText("Path", self::$trans->translate("messages.database.DefectPhoto")); //TENTO ŘÁDEK CHCI ZOBRAZIT JAKO OBRÁZKY
        $grid->setExport();
    }

Tak tento kód mi funguje.

Okomentovaný předposlední řádek chci zobrazit jako obrázek (místo textu), kde src je uložen v DB.
Inspiroval jsem se na grido-examples na Githubu a postupoval jsem takto:
Vytvořil jsem si složky controls/Grido v App. V ní soubor Grid.php

namespace App\Controls\Grido\Grid;

class Grid extends \Grido\Grid
{

    public function addColumnImage($name, $label)
    {
        $column = new Components\Columns\Image($this, $name, $label);
        $header = $column->headerPrototype;
        //$header->style['width'] ='2%';
        $header->class[] = 'center';
        return $column;
    }
}

Dále jsem si vytvořil složku app/controls/Grido/Components/Columns a v ní soubor Image.php

namespace App\Controls\Grido\Components\Columns;

class Image extends \Grido\Components\Columns\Text
{
    public function getCellPrototype($row = NULL)
    {
        $cell = parent::getCellPrototype($row = NULL);
        $cell->class[] = 'center';
        return $cell;
    }
    /**
     * @param $value
     * @return \Nette\Utils\Html
     */
    protected function formatValue($value)
    {
        $value = "<img src=\"$value\">";
        return $value;
    }
}

V presenteru kde vykresluji grid jsem změnil:

use App\Controls\Grido\Grid;

Ale laděnka mi ukáže chybu:
Class 'App\Controls\Grido\Grid' not found

Nevím jak přinutit počítač, aby použil App\Controls\Grido\Grid.php. Poradíte mi, co asi tak dělám špatně?V adresářové struktuře jsem neviděl nic špatného a přiznám se, že s namespaces jsem se pořádně nesetkal, pokud to souvisí s tím.
Přdem díky za radu.

CZechBoY
Člen | 3608
+
+1
-

Protože ta třída je v namespacu App\Controls\Grido\Grid a ještě název té třídy je Grid – takže musíš použít use App\Controls\Grido\Grid\Grid; (nebo nedávat do namespacu Grid na konec)

Šaman
Člen | 2666
+
+1
-

První co mě trklo, možná to je jen chyba při psaní příspěvku, ale zkontroluj to.

<?php
namespace App\Controls\Grido\Grid;

class Grid extends \Grido\Grid
{…}
?>

Výsledkem bude třída App\Controls\Grido\Grid\Grid, tedy o jeden Grid navíc.

phoffman
Člen | 7
+
0
-

Děkuji, přidání dalšího grid do řádku USE v presenteru pomohlo.