Gridito (falešný datagrid) – komponenta

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
VaKvas
Začátečník | 111
+
0
-

Jo, to je ono !
Diky !!!!

Jeste prosim otazku. Na zprovozneni AJAXu, staci mit nacteny ty JSka?

Moc díky !

Filip Procházka
Moderator | 4668
+
0
-

ArrayHash si ukládá data do členských proměnných, prosté přetypování na array funguje stejně a příjde mi jednodužší. :)

$this->redirect('default', (array)$form->getValues());
VaKvas
Začátečník | 111
+
0
-

Ano, take funguje… Diky !!!!

VaKvas
Začátečník | 111
+
0
-

Jeste jsem narazil na jednu vec :

pridal jsem si do metody render() podminku pro vychozi razeni, ale rad bych, ale to pracovalo i s podbarvenim razeneho sloupce a znaky pro razeni.. lze to nejak jednoduse prosim?

if ($this->sortColumn && $this["columns"]->getComponent($this->sortColumn)->isSortable()) {
			$this->model->setSorting($this->sortColumn, $this->sortType);
		}
		else {
			$this->model->setSorting('name', 'desc');
		}
Kovik
Člen | 10
+
0
-

Narazil jsem na požadavek výchozího řazení podobně jako VaKvas výše…
Do column.php jsem si přidal metodu setDefaultSorting()

<?php

	/**
	 * Set dafault sorting
	 * @param string asc, desc
	 * @return Column
	 */
        public function setDefaultSorting($sortType){
            $grid = $this->getGrid();
            if ($grid->sortColumn === null){
                $grid->sortColumn = $this->getName();
                $grid->sortType = $sortType;
            }
            return $this;
        }
?>

Použití:

<?php
$grid->addColumn("order", "Pořadí")->setSortable(true)->setDefaultSorting("asc");
?>

Možná by něco podobného mohlo být přímo součástí Gridita :)

VaKvas
Začátečník | 111
+
0
-

To je vypada dobre a i to pekne funguje !! Diky !

VaKvas
Začátečník | 111
+
0
-

Honza Marek napsal(a):

Editační formulář ve window buttonu mít jde, ale ten musí být definován klasicky v presenteru. Jinak se při odeslání nedá najít a proto neproběhne ta onSubmit akce.

<?php
$presenter = $this;
$grid->addToolbarWindowButton("create", "Přidat záznam")->setHandler(function () use ($presenter) {
    echo $presenter['addForm'];
})->setIcon("ui-icon-newwin");
?>

Nicméně bych to spíše nedoporučil. Pokud bude formulář obsahovat validaci, kterou nelze zkontrolovat javascriptem, při špatném odeslání se mi již formulář nezobrazí a přijdu o již vyplněná data.

Jen bych se zeptal, co se tedy doporucuje? Je lepsi odkazat na jinou sablonu pres addButton ?
Ptam se mozna spatne, ale jen nevim, jak spravne poresit editaci..

Diky !

JanBohac
Člen | 5
+
0
-

Zdravím,

omlouvám se, jsem asi uplná lama, ale zkouším se rozjet Gridito a v addonech se teď nevím proč nezobrazujou source kody, když kliknu na jednotlivé příklady, takže prostě nevím, jak to implementovat do Nette, aby to v pohodě chodilo… Podle mě je chyba mezi židlí a stolem, ale nejspíš někde v namespace popř. v rozmístění jednotlivých komponent ze .zip balíčku co jsem sosnul do struktury složek… Ta je klasická:

app – controls, log, models, presenters, temp, templates, bootstrap, @layout

document_root – kde je index, js, css…

libs – dibi, Nette, mPDF, Gridito

V config.ini mám pak následující:

; services
service.Nette-Security-IAuthenticator = UsersModel

service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.option.directory[] = "%libsDir%/mPDF"
service.Nette-Loaders-RobotLoader.option.directory[] = "%libsDir%/Gridito"
service.Nette-Loaders-RobotLoader.run = TRUE

Do prezenteru jsem dodal tuto část:

<?php
protected function createComponentGrid($name)
	{
		$grid = new Grid($this, $name);

		$db = dibi::connect(NEnvironment::getConfig('database'));
		$grid->setModel(DibiFluentModel($db->select("*")->from("uzivatel")));

		$grid->setItemsPerPage(10);

		// columns
		$grid->addColumn("id", "ID")->setSortable(true);
		$grid->addColumn("username", "Uživatelské jméno")->setSortable(true);
		$grid->addColumn("name", "Jméno")->setSortable(true);
		$grid->addColumn("surname", "Surname")->setSortable(true);
	}
?>

Vykreslení pak jen v template přes { control grid }

Omlouvám se za čas těch, kteří pomohou nebo alespoň odkážou někam jinam… Už jsem hledal tady na foru, Googlem i jsem projížděl nějaké zdrojáky na gidHubu a bez úspěchu. Díky za pomoc!

bojovyletoun
Člen | 667
+
0
-

funkční odkaz . Ukazují se ti chybové hlášky? Tady bude chyba: setModel(DibiFluentModel(...) – má být new Dibi…

  • service.Nette-Loaders-RobotLoader.option.directory[] = "%libsDir%/Gridito", je zbytečné IMHO, protože %libsDir% se indexuje automaticky
  • {control grid} bez první mezery
JanBohac
Člen | 5
+
0
-

Díky za odkaz a za odpověď! Myslel jsem si, že je to ono (to rozložení), takže to jsem měl ok… zatím jsem zjistil, že jsem měl rozdílný kódování (utf-8), to už jsem také vyřešil… ten service, jsem vyhodil, ten control jasně, bez mezer u závorek, to jsem akorát blbě napsal…

Co se týče chyb, tak mi teď laděnka vyhazuje:

Parse Error

syntax error, unexpected T_STRING
<?php
 2:
 3:    namespace Gridito;
 4:
 5:    use NetteComponentModelContainer, NetteEnvironment, NetteUtilsPaginator;
 6:
 7:    /**
 8:     * Grid
 9:     *
10:     * @author Jan Marek
11:     * @license MIT
12:     */
.....
?>

A to na lajně 3 přímo v Grid.php, ale chápu, že to může mít zdroj uplně jinde, otázka je kde :-D… Proto jsem už v prvním postu usuzoval nad tím, že to bude mít co dočinění s namespace, popř. rozložením a komunikací mezi jednotlivými částmi Gridita… Díky za pomoc!

iqtq
Člen | 20
+
0
-

Nejedeš náhodou na PHP 5.2? Jestli ano, tak tam tuhle verzi Gridita bez úprav nezprovozníš, jelikož je to zjevně pro 5.3.

Editoval iqtq (14. 6. 2011 0:01)

JanBohac
Člen | 5
+
0
-

iqtq napsal(a):

Nejedeš náhodou na PHP 5.2? Jestli ano, tak tam tuhle verzi Gridita bez úprav nezprovozníš, jelikož je to zjevně pro 5.3.

Ano, teď jsem to prověřil, já jedu pořád ve v. 5.2, ale myslel jsem, že na serveru, kde to bude běžet a testově běží je 5.3, tohle mě vůbec nenapadlo :-(… takže jaké úpravy je nutné udělat, jestli Tě s tím mohu otravovat? nebo jak z toho ven?

iqtq
Člen | 20
+
0
-

No, čistě teoreticky (nijak zvlášť jsem kód nestudoval) by mohlo stačit zbavit se namespaces a use + v kódu odstranit lomítka (\\). Ovšem pokud jsou tam někde anonymní funkce tak se to trochu komplikuje :)
Jestli ale na serveru kde to poběží je 5.3 a ty jedeš na 5.2 tak proč to neděláš na 5.3 a Nette beta?

Editoval iqtq (14. 6. 2011 1:38)

JanBohac
Člen | 5
+
0
-

iqtq napsal(a):

No, čistě teoreticky (nijak zvlášť jsem kód nestudoval) by mohlo stačit zbavit se namespaces a use + v kódu odstranit lomítka (\\). Ovšem pokud jsou tam někde anonymní funkce tak se to trochu komplikuje :)
Jestli ale na serveru kde to poběží je 5.3 a ty jedeš na 5.2 tak proč to neděláš na 5.3 a Nette beta?

Původní přání zákazníka bylo to rozjet na 5.2, takže jsem celou aplikačku psal v tomto, ta je téměř hotové, ale nelíbí se výpis jen do normálních tabulek, tak jsem se snažil využít gridu, neuvědomil jsem si, že to jede pod 5.3 takže jsem to samozřejmě zvojtil a můžu výše uvedený komenty promazat, páč chyba byla u mě mezi žídlí a stolem :-X… Děkuji všem za pomoc a musím to hold nějak doformátovat sám či se poohlídnout po nějakém jiném addonu ;-)

v6ak
Člen | 206
+
0
-

Ještě je potřeba přejmenovat Button na např, Gridito_Button a upravit pár stringů, ve kterých je název třídy. Už jsem to kdysi na 5.2 rozjel, ale zatím jsem neměl moc důvodů upgradeovat Gridito, tak jsem tu starou verzi tam nechal a neměl jsem až tak velkou motivaci to automatizovat. A tehdy jsem to prostě potřeboval rychle rozjet. Ale mohl byvh někam nahrát tu (částečně automaticky) upravenou verzi, bude-li zájem.

Ja
Člen | 260
+
0
-

v6ak: zajem je

JanBohac
Člen | 5
+
0
-

Zdravím, už jsem to nějak rozchodil, ale ještě když dávám parametry do array pro rozšíření parametrů sloupce (např. renderování true/false tick), tak se mi nedaří nacpat do to ho pole „function“, vyhazuje to:

syntax error, unexpected T_FUNCTION

takže chybka je někde v předání a zavolání funkce v jiné části kodu… V preseneteru:

<?php
grid->addColumn("active", "Active", array(
"renderer" => function ($row) {
Gridito\Column::renderBoolean($row->active);
},
?>

Chybka je ta function, jinak pro ty co budou radit, tak jedu na PHP5.2 viz výše ;-) Díky za info!

v6ak
Člen | 206
+
0
-

Ja: http://v6ak.com/…idito-52.zip

Nicméně:

  • Je to starší verze.
  • Má pár patchů (napadá mě NotORMModel a setTrClass).
  • Asi to opravdu nebudu udržovat. PHP 5.3 k dispozici momentálně mám, akorát projekt byl psán pro 5.2, takže by to asi v budoucnu šlo vyřešit pomocí aliasů.
  • EDIT: Jinak to vzniklo pomocí dříve uvedeného skriptu a několika ručníma úpravama, které byly nezbytné.

Editoval v6ak (22. 6. 2011 10:07)

v6ak
Člen | 206
+
0
-

Mohl bych se zeptat, jak řešíte situaci, kdy chci nechat znovu zobrazit neplatně odeslaný formulář?

one-two
Člen | 80
+
0
-

Nedaří se mi zprovoznit řazení :-/
v hlavičce mam přesně to co je v demu gridito

v presenteru toto:

protected function createComponentGrid($name) {
       $grid = new \Gridito\Grid($this, $name);
       $grid->setModel(new \Gridito\DibiFluentModel(\dibi::select('*')
                               ->from('licence')));
       $grid->setItemsPerPage(5);
       $grid->addColumn("licence_id", "ID: ")->setSortable(true);
       $grid->addColumn("title", "Název: ")->setSortable(true);
   }

odezva v firebugu:
{"state":{"grid-page":null,"grid-sortColumn":"licence_id","grid-sortType":"asc"}}

fakt už nevim, kde by mohla být chyba, pokud dám pryč

$("a.ajax").live("click", function (event) {
		event.preventDefault();
		$.get(this.href);
	});

tak to funguje samostatně bez ajaxu funguje

Editoval one-two (25. 6. 2011 13:47)

Ot@s
Backer | 476
+
0
-

Řešil už někdo z vás Gridito s modelem Nette database? Díky za případné info, jak na to.

Honza Marek
Člen | 1664
+
0
-

https://github.com/…tteModel.php

Ale zatím jsem nezkoušel.

Ot@s
Backer | 476
+
0
-

Honza Marek napsal(a):

https://github.com/…tteModel.php

Ale zatím jsem nezkoušel.

Honzo, podle prvnich testu funguje! Moc diky!

Etruska
Člen | 25
+
0
-

Nemohl by prosím někdo někam hodit zdrojáky k těm příkladům? Ty na githubu to nenajde…

leumas
Člen | 13
+
0
-

Zdrojáky k príkladom sú presunuté na https://github.com/…dito-sandbox

Pár rozšírení a zlepšení gridita som spáchal na https://github.com/hleumas/gridito

Konkrétne:

  • pridaný NetteModel pre fungovanie s Nette databázovým rozhraním
  • opravené XSS, (obsahy stĺpcov doteraz neboli escapované)
  • Možnosť určiť maximálný počet znakov pre stĺpec, v prípade prekročenia dĺžky sa zobrazí časť stringu a celý string je možné vidieť v tooltipe.
  • Možnosť určiť typ renderovania manuálne
  • Nový typ renderovania Email
  • Zápis confirmationquestions vo formáte: „Skutočne odstrániť zákazníka %meno% %priezvisko%?“, kde %meno% a %priezvisko% sa zasubstituujú $row[‚meno‘] a $row[‚priezvisko‘].
  • Oddelenie css a javascriptu, pre pekný výzor už nie je potrebné mať povolený javascript, s týmto však pribúda závislosť na scss

Editoval leumas (9. 7. 2011 15:33)

Etruska
Člen | 25
+
0
-

Díky moc :) Ty vylepšení vypadají super, minimálně třída NetteModel by se měla přidat do oficiální verze.

wodCZ
Člen | 49
+
0
-

Dá se nějak na použít helper na text kolonky? takové
addColumn("db_time|timeAgoInWord", "Čas");

radikus
Člen | 11
+
0
-

Ahoj, zkouším v Griditu naformátovat datum z datetime na např. d.m.Y, ale nějak se mi to nedaří.

<?php

// dibifluent mam klasicky
$att = array("action_id","name","place","text","dateTimeFrom");
$db = \dibi::select($att)->from("action");

// sloupec s datem se pokousim formatovat takto
$grid->addColumn("dateTimeFrom", "Datum")->setDateTimeFormat("d.m.Y");
?>

Můžete mi prosím poradit jak to naformátovat v Griditu, případně v dibifluent? Ani jeden případ se mi nedaří rozjet.
Díky

yngwie
Člen | 4
+
0
-

Ahoj snazim sa rozbehnut si Gridito na Nette Framework 2.0-beta pro PHP 5.2, cize bez mennych priestorov, lebo moj hosting ma iba PHP 5.2.9 a chcem si skusit spravit v Nette male administracne rozhranie s Griditom ale akosi sa nedari. Konkretne som sa dostal az k chybe, ktora sa objavi pri spracovani sablony grid.phtml.
Invalid argument passed to foreach resp. NSmartCachingIterator; array or Traversable expected, GriditoDibiModel given

Pri odstranovani mennych priestorov som postupoval tak, ze som stiahol poslednu verziu pre php 5.3 a zmazal som namespace a use, nahradil som vsetko nette prefixovanymi nazvami ako NObject atd. Triedy gridita som premenoval na Gridio_nazov_triedy, aby sa mi to nebilo s triedami v nette, to vyzera, ze je ok, ale evidentne nie vsetko. Pouzivam pre spojenie s db pouzivam dibi. Tak neviem uz som z toho bezradny, ale rad by som to rozchodil, lebo uz som nad tym stravil dost casu a vysledok nikde. Tak bude vdacny za kazdu radu, isto chyba bude medzi stolickou a klavesnicou som v Nette uplny novacik takze predpokladam, ze som nepochopil urcite suvislosti, ale v tom FOREACH v sablone mi to pri vypise pise, ze nepozna premennu $iterator, ale ked som si dal vypis $control->getModel tam data su, tak neviem proste predpokladam, ze neni co iterovat asi preto tam iterator neni definovany. Takto nejak vypada ten moj lepeny kod:

Toto mam ako sucast presenteru Admin_DashboardPresenter.php

protected function createComponentGrid($name)
	{
		$grid = new Gridito_Grid($this, $name);


		$db = $this->context->database;


     $model =  new GriditoDibiModel($db);



		if ($this->getParam('activeOnly')) {
			$model->filterActiveOnly();
		}

		$search = $this->getParam('search', false);
		if ($search) {
			$model->filterSearch($search);
		}


    $grid->setModel($model);
	  $grid->setItemsPerPage(15);

    $presenter = $this->presenter;
    $grid->addColumn("id", "ID")->setSortable(true);
    $grid->addColumn("login", "Jméno", array(
        "renderer" => function ($row) use ($presenter) {
           $presenter->link(':Admin:Dashboard', array( 'id' => $row->id));
        },
        "sortable" => true,
    ));

GriditoDibiModel.php

class GriditoDibiModel extends DibiFluentModel
{
	public function __construct(DibiConnection $db)
	{
		parent::__construct($db->select("*")->from("user"));
	}



	public function filterActiveOnly()
	{
		$this->fluent->where("status= 1");
	}



	public function filterSearch($search)
	{
		$searchString = "%$search%";
		$this->fluent->where(
			"(login like %s or mail like %s)",
			$searchString, $searchString
		);
	}

}

Inak v podstate je vsetko ostatne totozne s datami ku Griditu z gitHubu, kde som akurat pridal prefixy
miesto mennych priestorov a pouzivam DibiFluentModel.php

Tabulka user v db ma atributy id,login,mail, pass a status.

Vopred dakujem za kazdu radu.

Editoval yngwie (5. 9. 2011 20:13)

kybrex
Člen | 4
+
0
-

Zdravím,
nikde jsem se nedočetl o nějaké podpoře pro Translator. Plánuje se něco(a přehlédnul jsem to) nebo to gridito neumí a umět nebude? Hodilo by se, aby gridito podporoval (třeba jako formuláře) setTranslator a při renderování se automaticky volalo na všechny názvy sloupců a tlačítek ->translate().

stefi023
Člen | 71
+
0
-

Ahoj,

zacal jsem pouzivat Gridito spolu s Doctrine 2 (v obojim zacinam, pred tim byl mym dennim chlebem DataGrid a DibiFluent) a narazil jsem na problem pri spojovani „tabulek“ (v pripade Doctrine asi spise „entit“). Pokud vazba neni povinna, tzn cizi klic je NULL, tak gridito skonci s tim ze nemuze ziskat promennou neexistujiicho objektu (coz je asi samo spravne). Delam neco spatne (at uz s griditem ci doctrine), nebo to je drobna chybka?

Pomohl jsem si rychlou upravou v DoctrineQueryBuilderModel.php na r. 85 z:

<?php
$value = ObjectMixin::get($value, $getter);
?>

na:

<?php
$value = $value ? ObjectMixin::get($value, $getter) : '';
?>

nepo*to jsem touto upravou nekde neco jinde?

matoni555
Člen | 40
+
0
-

Zdravím,
stáhl jsem si Gridito odtud: https://github.com/hleumas/gridito

Nedaří se mi jej však nastylovat a propojit s jQuery UI. Nikde jsem nenašel ani žádný ukázkový příklad.
Můžete mi poradit, co mám vše nalinkovat, aby se to nastylovalo? jQuery UI nalinkované mám.

Díky

matoni555
Člen | 40
+
0
-

Nakonec jsem na to přišel sám a převedl SCSS na CSS, viz. http://sass-lang.com/

zuhla
Člen | 33
+
0
-

Dobrý večer, poradil by mi prosím někdo jak naformátovat datum v Griditu?

$grid->addColumn('change', 'Změněno', array(
            '???' => 'd.m.Y',
            'sortable' => true
        ));

Děkuji za rychlou odpověď ;)

Editoval zuhla (25. 11. 2011 21:59)

bojovyletoun
Člen | 667
+
0
-

no mělo by stačit, aby předaná hodnota byla instance DateTime. formát pak můžeš změnit přes Column::setDateTimeFormat.. tzn

$grid->addcolumn("date","datum")->setDatetim...
zuhla
Člen | 33
+
0
-

Zapomněl jsem dodat, že je to TimeStamp :(

bojovyletoun
Člen | 667
+
0
-

Hlásím chybu „Possible CSRF attack“ – pravděpodobně za to může filtrování číselných parametrů v URL:
url : http://l/p/D/akce?1-token=e24...2&1-pk=108&grid-actions-1-token=e24...a92&grid-actions-1-pk=108&do=grid-actions-1-click
píšu ve spěchu, třeba to bude uplně banální problém

Source file ▼

File: C:\web\htdocs\libs\controls\Gridito\BaseButton.php   Line: 149
139:
140:        /**
141:         * Handle click signal
142:         * @param string $token security token
143:         * @param mixed $pk
144:         */
145:        public function handleClick($token, $pk = null) {
146:            $grid = $this->getGrid();
147:
148:            if ($token !== $this->getGrid()->getSecurityToken()) {
149:                throw new ForbiddenRequestException("Security token does not match. Possible CSRF attack.");
150:            }
151:
152:            call_user_func($this->handler, $grid->getModel()->processActionParam($pk));
153:        }
Call stack ▼
‪1.‬

C:\web\htdocs\libs\controls\Gridito\WindowButton.php:20 source ►  Gridito\BaseButton-> handleClick (arguments ►) $token	NULL
$pk	NULL

10:     */
11:    class WindowButton extends BaseButton {
12:
13:        /**
14:         * Handle click signal
15:         * @param string $token security token
16:         * @param mixed $pk primary key
17:         */
18:        public function handleClick($token, $pk = null) {
19:            ob_start();
20:            parent::handleClick($token, $pk);
21:            $output = ob_get_clean();
22:
23:            if ($this->getPresenter()->isAjax()) {
24:                echo $output;
‪2.‬

inner-code Gridito\WindowButton-> handleClick (arguments ►) $token	NULL
$pk	NULL

‪3.‬

C:\web\htdocs\git\nette\Nette\Application\UI\PresenterComponent.php:99 source ►  ReflectionMethod-> invokeArgs (arguments ►)

GET:
$_GET1-token	"e2477264c9a2c6a8a604b5db90145a92" (32)
1-pk	"108" (3)
grid-actions-1-token	"e2477264c9a2c6a8a604b5db90145a92" (32)
grid-actions-1-pk	"108" (3)
do	"grid-actions-1-click" (20)

Editoval bojovyletoun (14. 2. 2012 16:22)

muflix
Člen | 92
+
0
-

jestli mohu, taky se hlásím o nějaký ukázkový příklad.. Gridito sem rozchodil, ale vypsala se mi tabulka se stránkováním a sortování mi nejde byť sem to do presenteru přidal ($grid->addColumn("id", "ID")->setSortable(true);) a nevím co všechno dokáže protože nikde neni ani dokumentace žádná ?:P

Honza Marek
Člen | 1664
+
0
-

Příklady jsou tady: https://github.com/…dito-sandbox

muflix
Člen | 92
+
0
-

Honza Marek: jo dík, toho sem si nevšiml.. ale nepodařilo se mi to rozchodit.. ale zprovoznil sem datatables.net takže to zatím nepotřebuji.

repter
Člen | 2
+
0
-

Zdravím, chcel by som sa spýtať, ako spraviť nasledovnú vec. Používam Doctrine a keď aplikujem filter a výsledkom je napr. 200 záznamov , a zobrazujú sa mi záznamy po 50 na stránku. Momentálne ked chcem prepnúť z prvej na druhú stránku tak ma presunie na druhú stránku so všetkých záznamov a nie z tých vyfiltrovaných. Ako sa to dá vyriešiť ? . Vďaka.

<?php
protected function createComponentGrid($name) {
	$grid = new \Gridito\Grid($this, $name);
	// filtrovanie
	$magId = $this->getParam('magId', NULL); //id magazinu podla ktoreho sa filtruje

	if ($magId) {
		$em= $this->context->database;
		$repository=$em->getRepository('\Release');
		$qb=$repository->filterByMagazine($magId);
		$model = new \Gridito\DoctrineQueryBuilderModel($qb);
		}
		else $model = $this->context->models_releaseModel;
	$grid->setModel($model);
	$grid->setItemsPerPage(50);
?>
Honza Marek
Člen | 1664
+
0
-

Dej si parametr magId jako persistentní

repter
Člen | 2
+
0
-

Dík , už to funguje

Bumerank
Člen | 30
+
0
-

nedaří se mi spojit tabulky :( ..pokud v dotazu selectuju jen z jedné tabulky, tak v pohodě

<?php
// akce v presenteru
    function actionDefault($id)
    {
        $this->processed_catalog_id = $id;

        $this->model = new LabelsModel();
        $this->processed_catalog_url = $this->model->getAllLabels($id);

        $this->model->setPrimaryKey("er_catalog_id_catalog, er_insert_attribute_id_attribute");	// tabulka má složený primární klíč
    }
?>
<?php
// model
function getAllLabels($id)
{
$id = 2216;	// zatím statické ID pro testování

$this->fluent = $this->connection->query("
          select
            L.er_input_label_cycle,
            L.er_input_label_required,
            L.er_input_label_hidden_value,
            A.er_insert_attribute_label
          from
            elpod_registrator_input_label as L
          left join
            elpod_registrator_insert_attribute as A on A.er_insert_attribute_id_attribute = L.er_insert_attribute_id_attribute
          where
            er_catalog_id_catalog = %id", $id);
}
?>

ztroskotá to tady (File: …\libs\dibi\libs\DibiFluent.php Line: 429):

<?php

425:        public function count()
426:        {
427:            return (int) $this->query(array(
428:                'SELECT COUNT(*) FROM (%ex', $this->_export(), ') AS [data]'
429:            ))->fetchSingle();
430:        }

?>
Bumerank
Člen | 30
+
0
-

Osvítilo mě a vyřešil jsem to! :) Použil jsem dotaz z dotazu (namísto z tabulky)…něco jako:

	SELECT tbl.* FROM (SELECT * FROM tabulka1, tabulka2) as tbl
DavidD
Člen | 2
+
0
-

Narazil jsem na problém při použití textového primárního klíče (jednoznačný název modulu). Chvíli jsem dubuggoval a dostal se do souboru DoctrineQueryBuilderModel.php, kde v metodě getItemByUniqueId($uniqueId) je explicitní přetypování $uniqueId na int. Nevím jestli jsem něco nepřehlédl, ale asi by bylo dobré, zavést nastavení typu primárního klíče a podle typu pak s daným primárním klíčem nakládat před vložením do dotazu.

davidm
Člen | 81
+
0
-

to je blbost :) jeste se mi nestalo abych mel primaryKey string .. pokud to potrebujes tak si muzes podedit DoctrineQueryBuilderModel a prepsat metodu getItemByUniqueId

DavidD
Člen | 2
+
0
-

Jsem si to samozřejmně upravil ;-) Jen jsem na to chtěl upozornit, kdyby se s tím taky někdo setkal. Jako taková blbost mi to zase nepřipadá. Nevím proč by nemohlo být jako primární klíč použito třeba nějaké sériové číslo, které obsahuje i písmena nebo u uživatele jeho unikátní uživatelské jméno. Samozřejmně přidat sloupec id typu int není problém, ale proč když už nějakou unikátní identifikaci mám.