Vypsání hlášky, když latte foreach neobsahuje záznamy
- Honza_Vaclavik
- Člen | 20
Zdravím,
potřeboval bych poradit ohledně výpisu hlášky, když do foreach cyklu
vstupuje objekt bez dat.
Presenter
public function renderDefault()
{
$employeeId = $this->getUser()->id;
$this->template->amountOfMoney = $this->dashboardManager->getEmployeeAmountOfMoney($employeeId);
$this->template->activeOrdersPreview = $this->dashboardManager->getActiveOrdersPreview($employeeId);
$this->template->availableOrdersPreview = $this->dashboardManager->getAvailableOrdersPreview();
}
Šablona
<h3>Active Orders Preview</h3> <br>
<a n:if='empty($activeOrdersPreview) === true'> Žádné aktivní objednávky k dipozici</a>
{foreach $template->activeOrdersPreview as $row}
<span>{$row->name} </span><span>{$row->city} </span><span>{$row->estimatedTime} </span><span>{$row->description} </span>
{/foreach}
<h3>Available Orders Preview</h3> <br>
<a n:if='empty($availableOrdersPreview) === true '> Žádné objednávky k dipozici</a>
{foreach $availableOrdersPreview as $row}
<span>{$row->name} </span><span>{$row->city} </span><span>{$row->estimatedTime} </span><span>{$row->description} </span>
<br>
{/foreach}
empty($availableOrdersPreview) vrací false, i když je objekt prázdný.
- David Matějka
- Moderator | 6445
promenna, ktera obsahuje objekt, se nebere jako prazdna. pouzij namisto
toho count()
- Honza_Vaclavik
- Člen | 20
David Matějka napsal(a):
promenna, ktera obsahuje objekt, se nebere jako prazdna. pouzij namisto toho
count()
To jsem zkoušel. Count vrací stejně 1.
- David Matějka
- Moderator | 6445
ukaz, co mas v getActiveOrdersPreview()
(nebo v te konkretni
metode, ktera vraci count 1, ale nema zadny data)
- Honza_Vaclavik
- Člen | 20
public function getAvailableOrdersPreview()
{
$availableOrdersPreview = $this->context->query("
SELECT
j.name,
o.city,
e.detail as estimatedTime,
o.".self::COLUMN_DESCRIPTION."
from orders o
inner join ".self::TABLE_JOBS." j on o.".self::COLUMN_JOB_TYPE_ID." = j.id
inner join ".self::TABLE_ESTIMATED_TIME_OF_WORK." e on o.".self::COLUMN_WORK_HOURS_ID." = e.id
where o.".self::COLUMN_EMPLOYEE_ID." is null AND o.active = 1
Limit 5
");
return $availableOrdersPreview;
}
- David Matějka
- Moderator | 6445
ah, koukam, ze ResultSet
neimplementuje Countable interface. Asi to budes muset prevest na pole
skrz fetchAll()
Alternativou je pak presunout to „zadne objednavky k dispozici“ pod
foreach a vyuzit pomocnou promennou $iterations
(tam uklada, ke
kolika iteracim doslo ve foreach) kterou vytvari latte. nejak takhle:
{foreach $availableOrdersPreview as $row}
<span>{$row->name} </span><span>{$row->city} </span><span>{$row->estimatedTime} </span><span>{$row->description} </span>
<br>
{/foreach}
<a n:if='!$iterations'> Žádné objednávky k dipozici</a>
- Honza_Vaclavik
- Člen | 20
Děkuji mnohokrát. Trápím se s tím už přes týden a vždycky jsem řešení odkládat, protože jsem netušil, jak na to.
- Honza_Vaclavik
- Člen | 20
CZechBoY napsal(a):
Jak resis strankovani, kdyz nevis kolik je zaznamu k zobrazeni? :-)
Tohle je jenom preview, který je omezen pouze na 5 záznamů. Po rozkliknutí bude plný seznam, který jsem ještě neřešil ;)