Page 1 of 2
[opgelost] eenvoudige smarty
Posted: Thu Feb 03, 2011 7:14 am
by pedes
ik heb wat problemen om wat smarty code toe te voegen in een samenvattings-sjabloon van de nieuws module
uit de nieuwsberichten trek een lijstje die ik een tabel toon op de website, 1 van die velden is het veld 'link'.
deze bevat een url die op de site wordt getoond als een icoontje waar kan op geklikt worden om verder te surfen.
nu wordt deze url niet altijd direct ingevuld door de site-editor (mede doordat deze url soms nog niet actief is)
nu wil ik indien het 'link' veld leeg is icoontje-b tonen en anders icoontje-a
dit is mijn samenvatting-sjabloon (het rode deel is het iccontje en de link):
<table border="0" align="left" class="list">
{foreach from=$items item=entry}
<tbody>
<tr>
<td width="80px" class="list"><span class="datum">{$entry->postdate|cms_date_format}</span></td>
<td width="150px" class="list"><span class="titel"><a href="{foreach from=$entry->fields item='field'}
{if $field->name == 'link'} {$field->value} {/if} {/foreach}" title="{$entry->title|cms_escape:htmlall}" target="_blank">{$entry->title|cms_escape}</a></span></td>
<td width="150px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'werkgever'} {$field->value} {/if} {/foreach}</span> </td>
<td width="90px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'werkuren'} {$field->value|truncate:40:"...":true} {/if} {/foreach}</span> </td>
<td width="80px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'locatie'} {$field->value} {/if} {/foreach}</span> </td>
<td class="list"><span class="detaillink">
<a href="{foreach from=$entry->fields item='field'}
{if $field->name == 'link'} {$field->value} {/if} {/foreach}" title="naar vacature" target="_blank"><img src="http://mijnsite/icoontje-a.png" ></a> </span>
</td>
</tr>
{/foreach}
</table>
iemand een idee wat ik moet aanpassen, ik probeerde al om het de value van het 'link' veld in een var te stoppen ... maar zonder succes
Mvg
Peter
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 11:57 am
by Jos
Als je veld "link" heet, dan kan het zo:
Code: Select all
<td class="list"><span class="detaillink">
{if empty($entry->link)}
<img src="http://mijnsite/icoontje-b.png" alt="" />
{else}
<a href="{$entry->link}" title="naar vacature" target="_blank"><img src="http://mijnsite/icoontje-a.png" alt="" /></a>
{/if}
</span>
</td>
Al die andere foreach lussen op de extra velden kun je dus ook verwijderen en vervangen door een directe aanroep van de variabele.
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 4:42 pm
by pedes
Dank u voor uw reply Jos.
Maar het probleem is dat dit een extra veld is, aangemaakt als velddefinitie, er zijn dus meerdere velden van dit type.
het veld is dus niet {$link}, maar [foreach from=$entry->fields item='field'} {if $field->name == 'link'} {$field->value} {/if} {/foreach}
Ik controleer dus eerst of het veld de naam 'link' heeft en dan zet ik de inhoud van dit veld daar.
maar nu wil ik ook nog controleren of het leeg is !
Mvg,
Peter
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 4:46 pm
by Jos
In jouw code controleer je met {if $field->name == 'link'} of de naam gelijk is aan 'link'
Met mijn code roep ik dat extra veld direct aan.
Heb je het al uitgeprobeert??
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 4:57 pm
by pedes
Ja Jos ik heb dit uitgeprobeerd en het werkt niet.
het icoontje blijft altijd dezelfde en de link achter het icoontje is gewoon het detal van het nieuwsbericht en niet de inhoud van het veld 'link' (daar staat de url in die gebruikt moet worden)
Mvg,
Peter
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 5:11 pm
by Jos
Oke, sorry, ik had er overheen gelezen dat je dit in een summary template doet... In een detailtemplate werkt het wel volgens mij..
In jouw geval zou je dan dit kunnen proberen:
Code: Select all
<td class="list"><span class="detaillink">
{foreach from=$entry->fields item='field'}
{if $field->name == 'link'}
{if empty({$field->value})}
<img src="http://mijnsite/icoontje-b.png" alt="" />
{else}
<a href="{$field->value}" title="naar vacature" target="_blank"><img src="http://mijnsite/icoontje-a.png" alt="" /></a>
{/if}
{/if}
{/foreach}
</span>
</td>
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 5:31 pm
by pedes
Jos,
krijg een smarty error !
maar als ik het volgende ingeeft
<td class="list"><span class="detaillink">
{foreach from=$entry->fields item='field'}
{if $field->name == 'link'}
{if empty
($field->value)}
<img src="
http://mijnsite/icoontje-b.png" alt="" />
{else}
<a href="{$field->value}" title="naar vacature" target="_blank"><img src="
http://mijnsite/icoontje-a.png" alt="" /></a>
{/if}
{/if}
{/foreach}
</span>
</td>
als ik dus die { } weglaat krijg ik geen smarty error meer , maar bij de berichten waar het veld leeg is krijg ik geen icoontje , voor de berichten waar het veld niet leeg is is het ok
mvg,
Peter
Re: eenvoudige smarty
Posted: Thu Feb 03, 2011 10:07 pm
by Jos
Die haken die hoorden daar inderdaad niet, dus je verbetering is wel oke.
Het lijkt erop dat de code dan wel werkt.... staat de <img> tag ook niet in de html bron? Klopt het pad naar het icoontje wel?
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 7:36 am
by pedes
het pad naar het icoontje klopt en inderdaad in de bron zie ik ook de <img> tag niet bij de berichten waar het veld leeg is, bij de berichten waar het veld niet leeg is staat er wel een <img> tag (en werkt het dus)
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 8:36 am
by Jos
Dan denk ik dat het script in dat geval nooit een veld tegenkomt met de naam 'link'
Wat gebeurt er als je er een spatie in zet?
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 8:45 am
by pedes
het veld 'link' wordt volgens mij zeker gezien, want als het niet leeg is dan wordt de 'value' van het veld 'link' gebruikt als url achter het icoontje
en voor de berichten waar het veld niet leeg is wordt de bijhorende url uit het veld 'link' (voor ieder bericht een andere url) netjes overgenomen
als ik een spatie zet, dan wordt het veld link aanzien als niet leeg en dus dan verschijnt er het andere iccontje
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 8:49 am
by Jos
Precies, dan wordt het veld dus niet gezien als ie leeg is...
Probeer dan deze code eens:
Code: Select all
<td class="list"><span class="detaillink">
{foreach from=$entry->fields item='field'}
{if $field->name == 'link'}
{assign var='entry_field_link' value=$field->value}
{/if}
{/foreach}
{if empty($entry_field_link)}
<img src="http://mijnsite/icoontje-b.png" alt="" />
{else}
<a href="{$entry_field_link}" title="naar vacature" target="_blank"><img src="http://mijnsite/icoontje-a.png" alt="" /></a>
{/if}
</span>
</td>
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 9:16 am
by pedes
Jos,
dit levert geen oplossing ... er wordt een icoontje-a.png getoond (ipv. icoontje-b.png en er komt zelfs een url achter te liggen van het nieuwsbericht juist vóór dit nieuwsbericht
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 9:55 am
by Jos
Ik heb even getest, en bij mij werkt de laatste code wel...
Re: eenvoudige smarty
Posted: Fri Feb 04, 2011 1:43 pm
by pedes
Jos, begrijp het niet goed hoe het komt dat dit nu bij u wel werkt ...
misschien zie ik iets over het hoofd ??
dit is mijn samenvatting template:
<div id="nieuwslijst">
<div class="NewsSummaryLinklist">
<table border="0" align="left" class="list">
{foreach from=$items item=entry}
<tbody>
<tr>
<td width="80px" class="list"><span class="datum">{$entry->postdate|cms_date_format}</span></td>
<td width="150px" class="list"><span class="titel">{$entry->title|cms_escape}</span></td>
<td width="150px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'werkgever'} {$field->value} {/if} {/foreach}</span> </td>
<td width="90px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'werkuren'} {$field->value|truncate:40:"...":true} {/if} {/foreach}</span> </td>
<td width="80px" class="list"><span class="korte_omschrijving"> {foreach from=$entry->fields item='field'}
{if $field->name == 'locatie'} {$field->value} {/if} {/foreach}</span> </td>
<td class="list"><span class="detaillink">
{foreach from=$entry->fields item='field'}
{if $field->name == 'link'}
{assign var='entry_field_link' value=$field->value}
{/if}
{/foreach}
{if empty($entry_field_link)}
<img src="http://..mijnwebsite../uploads/images/layout/remove.png" alt="" />
{else}
<a href="{$entry_field_link}" title="naar vacature" target="_blank"><img src="http://..mijnwebsite../uploads/images/layout/next.png" alt="" /></a>
{/if}
</span>
</td>
</tr>
{/foreach}
</table>
</div>
</div>
<!-- End News Display Template -->
mvg
Peter