Vypsání hlášky, když latte foreach neobsahuje záznamy

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

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
+
0
-

promenna, ktera obsahuje objekt, se nebere jako prazdna. pouzij namisto toho count()

Honza_Vaclavik
Člen | 20
+
0
-

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
+
0
-

ukaz, co mas v getActiveOrdersPreview() (nebo v te konkretni metode, ktera vraci count 1, ale nema zadny data)

Honza_Vaclavik
Člen | 20
+
0
-
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
+
+2
-

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
+
0
-

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.

CZechBoY
Člen | 3608
+
+1
-

Jak resis strankovani, kdyz nevis kolik je zaznamu k zobrazeni? :-)

Honza_Vaclavik
Člen | 20
+
0
-

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 ;)

CZechBoY
Člen | 3608
+
0
-

Co když nebude ani 5 záznamů? Zobrazíš tlačítko pro „zobrazit celý seznam“?