Ist es möglich direkt in Smarty den Inhalt eines Arrays zu zählen?

Despoiler

Erfahrenes Mitglied
Hallo, ich stehe mal wieder vor einem Problem, welches mich seit ca. 3 Std. beschäftigt.
Meine Suche nach einer Lösung blieb bis jetzt ohne Erfolg!

Hier erstmal mein Code:

portfolio_eos.php
PHP:
#Auslesen der Kategorien
$categories = mysql_query("SELECT * FROM images_eos_categories WHERE EOSCatVisible = 'true' ORDER BY EOSCatID DESC"); 
while($row_categories = mysql_fetch_array($categories)) {  
	$query_picincat = mysql_query("SELECT EOSID, EOSCatID FROM images_eos WHERE EOSCatID = '" . $row_categories['EOSCatID'] . "' AND EOSVisible = 'true'"); 
	while($row_picincat = mysql_fetch_array($query_picincat)) { 
		$data_picincat[] = $row_picincat;
	}
	$data_cats[] = $row_categories;
}

################################ 
$smarty->assign('data_cats',$data_cats);
$smarty->assign('data_picincat',$data_picincat);
################################

portfolio_eos.tpl
HTML:
<div class="single_width bg_color_01 mrg_bottom">
    <div class="single_width bg_color_06">
        <div class="pad_small left text bold">Kategorien</div>
    </div>
    <div class="pad_small left text bold">
    {foreach from=$data_cats item=dat_cats}
        <span class="intro">.: <a href="portfolio_eos.php?page=1&cat={$cat.EOSCatID}">{$dat_cats.EOSCatName}</a>{foreach from=$data_picincat item=dat_picincat}{if $dat_cats.EOSCatID eq $dat_picincat.EOSCatID}{$dat_picincat.EOSID|@count}{/if}</a>{/foreach}</span><br />
    {/foreach}
    </div>             
</div>

Ich möchte gerne erreichen, dass er mir die Kategorien und die Anzahl der Bilder pro Kategorie ausgibt. Was er momentan macht ist auf dem Bild zu erkennen.

Bin ich überhaupt auf dem richtigen Weg?
Ich habe auch schon versucht mit dem SQL-Befehl "Count" Die EOSID's zu zählen.

Vielen Dank
 

Anhänge

  • despoiler.jpg
    despoiler.jpg
    277,1 KB · Aufrufe: 14
Nein, sowas gibt es in Smarty glaube ich nicht. Allerdings ist es auch schon ein paar Jährchen her, das ich mich grob damit beschäftigt habe.

Aber kannst du es nicht einfach so machen?
Code:
{$data_cats|@count}

Ich meine mich zu erinnern, dass das irgendwie so gehen sollte..


*edit*
Ach das tust du ja schon... :rolleyes:
Aber für das, was du willst, fällt mir spontan leider auch keine Lösung ein, sorry für einen sinnfreien Beitrag. ;)

*edit2*
Du könntest die Bildinformationen aber auch einfach direkt in dem Kategorie-Array hinterlegen:
PHP:
while($row_categories = mysql_fetch_array($categories)) {  
    $query_picincat = mysql_query("SELECT EOSID, EOSCatID FROM images_eos WHERE EOSCatID = '" . $row_categories['EOSCatID'] . "' AND EOSVisible = 'true'"); 
    while($row_picincat = mysql_fetch_array($query_picincat)) { 
        $row_categories['pictures'][] = $row_picincat;
    }
    // oder einfach die summe hinterlegen..
    $row_categories['picture_count'][] = mysql_num_rows( $query_picincat );
    $data_cats[] = $row_categories;
}
Somit könntest du dann einfach folgendes schreiben, falls du die Summe nicht hinterlegen möchtest.
Code:
{$data_cats.pictures|@count}
 
Zuletzt bearbeitet:
Grüß dich DeluXe!

Danke für deine schnelle Antwort!
Ich habe mir deinen Vorschlag gerade angeschaut und ausprobiert.

PHP:
$row_categories['picture_count'][] = mysql_num_rows( $query_picincat );

Das ist das Beispiel von dir.
Lass es mich kurz mit meinen Worten beschreiben. Du Zählst die Zeilen, die die Abfrage zurückgibt. OK!
Danach packst du sie in das Array von den Kategorien?

So was ähnliches habe ich heute auch schon probiert, hat aber nicht funktioniert.
Deines schaut schon besser aus. Irgendwas fehlt aber noch, er macht wieder das Gleich wie auf dem Bild nur mit einer 0.
 
Huch, da sind sie wieder - die beliebten Copy&Paste-Fehler. ;)

Die beiden eckigen Klammern müssen natürlich weg.
PHP:
$row_categories['picture_count'] = mysql_num_rows( $query_picincat );

Mensch, bin ich heute mal wieder schusselig.. ;-)
 
Ich habe es jetzt wie folgt:

PHP:
#Auslesen der Kategorien
$categories = mysql_query("SELECT * FROM images_eos_categories WHERE EOSCatVisible = 'true' ORDER BY EOSCatID DESC"); 
while($row_categories = mysql_fetch_array($categories)) {  
	$query_picincat = mysql_query("SELECT EOSID, EOSCatID FROM images_eos WHERE EOSCatID = '" . $row_categories['EOSCatID'] . "' AND EOSVisible = 'true'"); 
	while($row_picincat = mysql_fetch_array($query_picincat)) { 
		$row_categories['pictures'][] = $row_picincat;
	}
	$row_categories['picture_count'] = mysql_num_rows($query_picincat);
	$data_cats[] = $row_categories;
}

HTML:
<div class="single_width bg_color_01 mrg_bottom">
    <div class="single_width bg_color_06">
        <div class="pad_small left text bold">Kategorien</div>
    </div>
    <div class="pad_small left text bold">
    {foreach from=$data_cats item=dat_cats}
        <span class="intro">.: <a href="portfolio_eos.php?page=1&cat={$cat.EOSCatID}">{$dat_cats.EOSCatName}</a>{foreach from=$data_picincat item=dat_picincat}{if $dat_cats.EOSCatID eq $dat_picincat.EOSCatID}{$dat_cats.pictures|@count}{/if}</a>{/foreach}</span><br />
    {/foreach}
    </div>             
</div>

Jetzt zeigt er nichts mehr an, die vielen 1er sind verschwunden.

Ich verstehe es nicht ganz. Warum hast du
PHP:
$data_picincat[] = $row_picincat;

durch
PHP:
$row_categories['pictures'][] = $row_picincat;

ersetzt? Ach diese mehrdimensionalen Arrays bringen mich nochmal um! :(
 
OK Kommando zurück! :)

So geht es jetzt!

PHP:
#Auslesen der Kategorien
$categories = mysql_query("SELECT * FROM images_eos_categories WHERE EOSCatVisible = 'true' ORDER BY EOSCatID DESC"); 
while($row_categories = mysql_fetch_array($categories)) {  
	$query_picincat = mysql_query("SELECT EOSID, EOSCatID FROM images_eos WHERE EOSCatID = '" . $row_categories['EOSCatID'] . "' AND EOSVisible = 'true'"); 
	$row_categories['picture_count'] = mysql_num_rows($query_picincat);
	$data_cats[] = $row_categories;
}

HTML:
<div class="single_width bg_color_01 mrg_bottom">
    <div class="single_width bg_color_06">
        <div class="pad_small left text bold">Kategorien</div>
    </div>
    <div class="pad_small left text bold">
    {foreach from=$data_cats item=dat_cats}
        <span class="intro">.: <a href="portfolio_eos.php?page=1&cat={$cat.EOSCatID}">{$dat_cats.EOSCatName}</a>{$dat_cats.picture_count}</a></span><br />
    {/foreach}
    </div>             
</div>

Ich dank dir recht schön! Die Idee mit den mehrdimensionalen Arrays hätte ich ja gleich haben können. Freude :)
 
Zurück