[GELÖST] Extrafelder im News Template

Für Fragen und Diskussionen zum Layout und Design, Templates und Stylesheets sowie Themes
Post Reply
antibart
Power Poster
Power Poster
Posts: 1162
Joined: Sun Aug 17, 2008 9:29 am

[GELÖST] Extrafelder im News Template

Post by antibart »

Hallo,

Im News - Summary Template steht für das Handling  mit extra Feldern unten:

Code: Select all

{if isset($entry->fields)}
  {foreach from=$entry->fields item='field'}
     <div class="NewsSummaryField">
        {if $field->type == 'file'}
          <img src="{$entry->file_location}/{$field->value}"/>
        {else}
          {$field->name}: {eval var=$field->value}
        {/if}
     </div>
  {/foreach}
Was ich als globale Regel verstehe. Um an unterschiedlichen Positionen im Template die Inhalte der einzelnen Extrafelder erscheinen zu lassen, habe ich an jeweiligen Stellen einfach ein

{$entry->feldname}

eingefügt

Das klappt zwar, ist aber nur nicht so richtig das wahre, da es zu Lücken in der Aüsgabe führt, besonders, wenn das Exztrafeld mit einem Link verbunden ist.  ich möchte aber, dass tweilweise sowohl Überschrift als auch Inhalt nur gezeigt werden, wenn auch was eingetragen wurde (was ja auch in der Scheife so gedacht ist).

Ich habe einiges versucht, zB:

{if isset ($entry->fields)}
mail}">{$field->mail}{/if}


oder

{if isset ($entry->mail)}
mail}">{$field->mail}{/if}

und noch andere varianten. Aber es kommt nichts das richtige bei raus.

Muss ich bei jedem einzelnen Feld die ganzen foreach-schleife eingeben und auf das jeweilige Feld spezifiziern oder geht das auch "kürzer"?

...
Last edited by antibart on Wed Apr 01, 2009 7:01 am, edited 1 time in total.
NaN

Re: Extrafelder im News Template

Post by NaN »

Ich denke Du solltest in der Foreach-Schleife alle Möglichkeiten, die Du brauchst, durchspielen.
Denn nur weil {if isset ($entry->fields)} gegeben ist, heißt das nicht, dass auch automatisch {$entry->mail} existiert.
Du müsstest also innerhalb der foreach-Schleife immer Typ, Feldnamen und vor allem den Wert prüfen.
Bsp:

Code: Select all

{if isset($entry->fields)}
  {foreach from=$entry->fields item='field'}
        {if $field->name == 'mail' && $field->value!=''}
          tu was mit {$field->value}
        {else if $field->name == 'irgendwas anderes' && $field->value!=''}
          tu was anderes mit {$field->value}
        {/if}
{/foreach}
Da Du ja in der Regel weißt, welchen Typ die einzelnen Felder haben, kannst Du die Prüfung nach dem Typ auch weglassen und Dich ganz auf den Feldnamen verlassen.
Nur wenn Du nicht weißt, welchen Typ die einzelnen Felder haben können (weil sie vielleicht jemand anderes als Du angelegt hat), dann würde ich einfach pauschal nach dem Typ des Feldes prüfen und den Wert entsprechend ausgeben. So wie es im Beispieltemplate gemacht wird.
Wichtig ist jedenfalls, dass Du auch den Wert des Feldes Prüfst ($field->value!=''), ob da wirklich was drinsteht, damit eben keine Lücken entstehen.
antibart
Power Poster
Power Poster
Posts: 1162
Joined: Sun Aug 17, 2008 9:29 am

Re: Extrafelder im News Template

Post by antibart »

Danke schonmal...

Es gibt noch Hürden, die ich einfach nicht verstehe. Mit ist die Schleife noch nicht klar.

die foreach-schleife behandelt ja ALLE Felder ... und gibt dort wo sie im Template steht, eben auch die Werte aus (was ich ja gar nicht möchte)...

Denn ich habe die Felder an lauter verschiedenen Stellen. Demenstprechend bringt mir doch die schleife nichts.

Ich müsste eher an jeder Stelle, an der sich ein Feld befindet, einen einzelnen Feldaufruf starten.

Das ging bereits für den Feldinhalt {$entry->zb mail} - leider nicht für nicht Feldnamen.

Eigentlich bräuchte ich lediglich an verschiednen Stellen wahlweise so etwas:

{$entry->name des feldes} und {$entry=inhalt des Feldes}

Und wenn nichts im Feld steht, soll weder das eine noch das andere erscheinen.

Aber klappt immer nur so halb ...

Mein ursprungstemplate - da habe ich den Feldnamen (bzw die Übeaschrift) noch als Text eingefügt. Und genau daruaf möchte ich verzichten. Die Foreach-Schleife hatte ich hier ganz raus genommen: Die Extrafelder sind: foto, mail, internet, googlemap und vorteile der hausmarke

Code: Select all

<!-- Start News Display Template -->
{if $pagecount > 1}
  <p>
{if $pagenumber > 1}
{$firstpage} {$prevpage} 
{/if}
{$pagetext} {$pagenumber} {$oftext} {$pagecount}
{if $pagenumber < $pagecount}
 {$nextpage} {$lastpage}
{/if}
</p>
{/if}
{foreach from=$items item=entry}
<table cellpadding="5" cellspacing="5" style="border: solid 2px #f1eeef; width:100%;" summary="Bild, Adresse und Kurzbeschreibung {$entry->title}">
<tr> <td width="160"><img src="{$entry->file_location}/{$entry->foto}" alt="{$entry->title}" width="150" height="101" />


</td>
<td>




<strong>{$entry->title}</strong><br />
{$entry->adresse_telefon}<br />
<a href="mailto:{$entry->mail}">{$entry->mail}</a><br />
<a href="{$entry->internet}" target="_blank">Homepage</a><br />
<a href="{$entry->googlemap}" target="_blank" >Googlemap</a><br />

</td></tr>
<tr><td colspan="2">
{if $entry->summary}

                <p>{eval var=$entry->summary}</p>


        <!-- <div class="NewsSummaryMorelink">
                [{$entry->morelink}]
        </div> -->

{else if $entry->content}


                <p><strong>Kurzbeschreibung</strong><br />{eval var=$entry->content}</p>

{/if}
<p><strong>Vorteile der Hausmarke</strong>
 <br />{$entry->vorteile_der_hausmarke}</p>



</td></tr></table><br />

{/foreach}
<!-- End News Display Template -->
Last edited by antibart on Tue Mar 31, 2009 3:12 pm, edited 1 time in total.
NaN

Re: Extrafelder im News Template

Post by NaN »

Gut, wenn man die Felder so direkt ansprechen kann, braucht man natürlich die Foreach-Schleife nicht.
(Hab die Felder noch nie verwendet)
Aber Du prüfst nie, ob das Feld überhaupt existiert und ob es denn auch einen Inhalt hat.

Z.B.

{if isset($entry->mail) && $entry->mail!=''}
    mail}">{$field->mail}

{/if}

Einfach nur isset($entry->mail) zu prüfen reicht nicht aus, da, sofern dieses Extra-Feld öffentlich ist und dem News-Artikel zur Verfügung steht, die Variable für das Feld "mail" immer existieren wird.
Jedoch kann es durchaus leer sein.
Dadurch würde im HTML-Code dann folgendes stehen:

Code: Select all


<a href=""></a><br />

Sehen tust Du nur den Zeilenumbruch. Daher die "Lücken" die da entstehen können.
Also immer bevor Du ein Feld im News-Template platzieren möchtest, prüfen ob dieses Feld existiert (wie Du ja im ersten Post schon geschrieben hast) und zusätzlich noch, ob dort etwas drin steht.

Falls man die Felder doch nicht so einfach mit $entry->feldname ausgeben kann, dann versuch es doch mit dem capture-assign Zeugs via Smarty.
Also einfach in der Foreach-Schleife alle Felder durchgehen und auf typ/name und inhalt prüfen und dann so dem template als weitere Variable zuweisen:

Code: Select all


{if isset($entry->fields)}
   {foreach from=$entry->fields item='field'}
        {if $field->name == 'mail' && $field->value!=''}
            {capture assign='mail'}{$field->value}{/capture} 
        {/if}
    {/foreach}
{/if}

Somit steht für den Rest des Templates eine Variable namens {$mail} zur Verfügung, die Du dann irgendwo platzieren kannst.
Aber auch da müsstest Du vor der Ausgabe prüfen, ob sie überhaupt existiert. ( {if isset($mail)}...{/if} )
Der Vorteil hier wäre, dass Du die Foreach-Schleife nur einmal durchlaufen lassen müsstest und trotzdem für den Rest des Templates alle Variablen zur Verfügung hast und sie platzieren kannst wo Du willst.
antibart
Power Poster
Power Poster
Posts: 1162
Joined: Sun Aug 17, 2008 9:29 am

Re: Extrafelder im News Template

Post by antibart »

Vielen, heißen Dank ...

Zwar wurde {$field->mail} nicht ausgegeben, obwohl Feld gesetzt und ausgefüllt ... aber das macht nichts, denn innerhalb der if-Bedingungen kann ich auch Normaltext benutzen, der dann ja bei nicht ausgefülltem Text auch nicht erscheint.. auch das
ist dann ja nur Teil der Bedingungen. Das klappt vorzüglich.

INsofern: Gelöst
Post Reply

Return to “Layout und Design”