PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Elemente aus array nacheinander ausgeben


guterlaie
15.11.2007, 00:51:49
Hi, ich bin was php betrifft ein absoluter beginner, komme aber leider jetzt nicht mehr drum rum.
Ich konfiguriere gerade ein cms für eine kleine community. Mein problem ist jetzt, das ich die template dateien für die profile selbst schreiben muss und die ausgaben von mehrfachauswahlfenstern, also sprich multiple checkboxes ect. immer vom system untereinander ausgegeben werden. Der code für ein solches feld sieht z.B. so aus:

<div class="field field-type-text field-field-ma-suche-g">
<h3 class="field-label"><font color="#BA9C9F">Ich suche:</font></h3>
<div class="field-items">
<?php foreach ((array)$node->field_ma_suche_g as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php } ?>
</div>
</div>

Bin inzwischen soweit, dass ich weiss, dass mit "foreach" das array ausgelesen wird und das "print $item['view']" die values ausgibt, die ich im cms als feldinhalte definiert habe. Er wirft mir jetzt z.B. aus:

Mann
Frau
Paar

soll dieses aber nacheinander ausgeben, also so:

Mann, Frau, Paar.

Ich hoffe das das in dieser form möglich ist und das mir jemand weiterhelfen kann...mit meinem php-mysql buch werde ich nämlich langsam wahnsinnig.
danke schonmal.

defabricator
15.11.2007, 01:38:49
<div></div> ist ein Blockelement.
Versuch stattdessen mal
<span class="field-item"><?php print $item['view'] ?> </span>

guterlaie
15.11.2007, 02:20:51
Du kannst Dir garnicht vorstellen wie dankbar ich Dir bin! Funktioniert einwandfrei. Hab ja wirklich schon in viele Richtungen überlegt, aber da wäre ich nie drauf gekommen...dabei ist es sooooo einfach 'ärger' .

Weisst Du zufällig noch, wie man ein Trennzeichen zwischen die Ausgaben bekommt? Also:

Mann, Frau, Paar

Ich könnte die zwar an die values dranhängen, dass wäre wohl jedoch eher eine sehr laienhafte Lösung, da diese dann auch in der Auswahlbox mit Komma auftauchen würden.

Aber auf jeden Fall nochmal vielen Dank für die schnelle Lösung!

TheBlackPitcher
22.11.2007, 03:45:10
ich bin zwar ein totaler anfänger aber foreach ist ja ne schleife das heisst für jeden wert der in der array ist erfolgt ein durchlauf also sollte das hier helfen
<span class="field-item"><?php print $item['view'] ?>, </span>
dann sieht dein ausgabe so aus
Mann,Frau,Paar,
mhh und wenn du am ende halt nen punkt haben wills kannsu ja noch ne for schleife machen die so lange durchzählt bis das vorletzte erreicht hat und dann halt als else den letzten wert mit punkt drin stehen hat

mhh ich denke komfortabler wäre es mit platzhaltern zu arbeiten aber da ich wie gesagt auch nur ein anfänger bin weiss ich nciht genau wie das funktioniert ;-) werde mich mit beschäftigen sobald ich es brauch

Ckaos
22.11.2007, 12:17:22
Jo ich bin ja kein freund von solchen mischungen des inhalts und des designs,
eher von templates dann kann man sich auch den ganzen echo quatsch sparen.
Da stehen dann im template nur noch die variablen
zB. <div class="meineklasse">$ausgabe</div>

Aber zurück zu deinem problem, ich versteh nich so ganz
(array)$node->field_ma_suche_g
Ich denke du hast dir eine klasse geschrieben in der die funktion "field_ma_suche_g"
aufgerufen wird, was das "(array)" da zu suchen hat is mir nicht bekannt.

ich würde das produzierte array anhand der inhalte zählen
zB.

<?php
$ausgabe_array = $node->field_ma_suche_g();
$array_counter = count($ausgabe_array);
$setze_komma=1;
foreach ($ausgabe_array as $item) {
?>
<span class="field-item">
<?php
print $item['view'];
if($setze_komma < $array_counter){ echo ",";$setze_komma++;}
?>
</span>
<?php } ?>


wenn du zum Schluß noch ein punkt brauchst erweiterst du um

$setze_komma++;}else{
echo ".";}