Ked poslem pole objektov do template tak v template neviem vytiahnut hodnoty

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

v Presenteri si posielam do sablony pole objektov

				$timestamp = strtotime($this->year.'-'.$this->month.'-1');
$item;

for ($i=0; $i < date("t",$timestamp); $i++) {
    $item = new CalendarItem($this->database,$i,$this->month,$this->year);
    array_push($this->list, $item);
}

trieda CalendarItem vyzera takto

<?php

namespace App\Model;

use Nette;

use Tracy\Debugger;


/**
 * Calendar
 */
class CalendarItem extends Nette\Object
{

    /** @var Nette\Database\Context */
    private $database;

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

    private $numberDay;
    private $wordDay;
    private $from;
    private $to;
    private $overtime;
    private $note;
    private $timestamp;
    private $color;

    function CalendarItem(Nette\Database\Context $database,$numberDay,$month,$year) {
        $this->database = $database;
        $this->numberDay = $numberDay;

        $timestamp = strtotime($year.'-'.$month.'-'.$numberDay);
        $day = date('D', $timestamp);

        switch ($day) {
            case 'mon':
                $this->wordDay = "pondelok";
                break;
            case 'tue':
                $this->wordDay = "utorok";
                break;
            case 'wed':
                $this->wordDay = "streda";
                break;
            case 'thu':
                $this->wordDay = "stvrtok";
                break;
            case 'fri':
                $this->wordDay = "piatok";
                break;
            case 'sat':
                $this->wordDay = "sobota";
                break;
            case 'sun':
                $this->wordDay = "nedela";
                break;
        }

    }

    public function getWordDay() {
        return $this->wordDay;
    }

}

a v sablone mam

{for $i = 0; $i < count($list); $i++}
	        	      	<tr>
	        	      		<td>{$i+1}.</td>
	        	      		<td>{$list[$i]->getWordDay()}</td>
	        	      		<td></td>
	        	      		<td></td>
	        	      		<td></td>
	        	      		<td></td>
	        	      		<td></td>
	        	      		<td></td>
	        	      	</tr>
    	      	{/for}

spravny pcoet riadkov to ma ale nedokazem dostat hodnotu wordDay… co mam zmenit ?

Editoval figurluk (26. 7. 2015 18:54)

Patrik Votoček
Člen | 2221
+
0
-

V první řadě ti v presenteru chybí $this->template->list = $this->list;

A řadě druhé šablonu můžeš zjednodušit viz https://latte.nette.org/cs/tags#…

{foreach $list as $item}
	<tr>
		<td>{$iterator->counter}.</td>
		<td>{$item->getWordDay()}</td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
	</tr>
{/foreach}
figurluk
Člen | 61
+
0
-

to v presenteru mam len ej to nizsie sorry..

ja mam problem so zaregistrovanim toho modelu

v configu mam

services
App\Model\UserManager
App\Model\CalendarItem

Service ‚27_App_Model_CalendarItem‘: Class App\Model\Nette\Database\Context needed by App\Model\CalendarItem::__construct() not found. Check type hint and ‚use‘ statements. search►

Šaman
Člen | 2640
+
0
-

V první řadě si dumpni proměnné a lokalizuj problém. Jestli ti jde do šablony co chceš, případně jestli je problém v šabloně nebo presenteru. Podle nadpisu je to dotaz na šablonu, ale ty si tam možná posíláš nějaký nesmysl, soudě podle druhého příspěvku.

A ta chybová hláška říká jasně, v čem je problém – použij před Nette\Database… zpětné lomítko, nebo ji dej do sekce use. Pokud ti to není úplně jasné, tak si nastuduj namespace v PHP 5.3. Bez toho nemá cenu řešit další věci.

Editoval Šaman (26. 7. 2015 20:49)

figurluk
Člen | 61
+
0
-
<?php

namespace App\Model;

use Nette;

class CalendarItem
{

    /** @var Nette\Database\Context */
    private $database;
    private $numberDay;
    private $wordDay;
    private $from;
    private $to;
    private $overtime;
    private $note;
    private $timestamp;
    private $color;

    public function __construct(Nette\Database\Context $database,$numberDay,$month,$year) {
        $this->database = $database;
        $this->numberDay = $numberDay;

        $timestamp = strtotime($year.'-'.$month.'-'.$numberDay);
        $day = date('D', $timestamp);

        switch ($day) {
            case 'mon':
                $this->wordDay = "pondelok";
                break;
            case 'tue':
                $this->wordDay = "utorok";
                break;
            case 'wed':
                $this->wordDay = "streda";
                break;
            case 'thu':
                $this->wordDay = "stvrtok";
                break;
            case 'fri':
                $this->wordDay = "piatok";
                break;
            case 'sat':
                $this->wordDay = "sobota";
                $this->color = "B1AAAA";
                break;
            case 'sun':
                $this->wordDay = "nedela";
                $this->color = "B1AAAA";
                break;
        }
    }

    public function getWordDay() {
        return $this->wordDay;
    }

}

dal som to teda do use ale stale mam chybu
Service ‚27_App_Model_CalendarItem‘: Parameter $numberDay in App\Model\CalendarItem::__construct() has no type hint, so its value must be specified

services:
	- App\Model\UserManager
	- App\Model\CalendarItem(%numberDay%, %month%, %year%)
	- App\Forms\SignFormFactory
	router: App\RouterFactory::createRouter

upravil som teda config a teraz mi to pise ze Missing parameter ‚numberDay‘

Editoval figurluk (26. 7. 2015 21:02)