Page 1 of 1

[Solved] FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 12:23 pm
by Masweb
Ik gebruik CGUserDirectory om gegevens uit FrontEndUser te tonen.

In FEU gebruik ik 3 verschillende multiselect lijstjes.

Om één bepaalde eigenschap te tonen gebruik ik bijvoorbeeld

{$oneuser.properties.naam}

Als je dat doet voor multiselect worden de waarde achter elkaar opgesomd gescheiden door een comma.

Vandaar dat ik gebruik maak van een stukje code uit het samenvattingssjabloon.

Code: Select all

{assign var='tmp' value=','|explode:$onepropvalue}
        {$feu_smarty->get_multiselect_text($propname,$onepropvalue,'values')}
        {cgud_getpropertysummary_url prop="$propname" propval="$onepropvalue" assign='urls'}
        <ul>
        {foreach from=$values name='multi' item='one'}
          <li>
            {assign var='i' value=$smarty.foreach.multi.index}
            {$one}
          </li>
        {/foreach}
        </ul>
Dit geeft echter alle 3 de multiselect lijstjes onder elkaar.

Hoe kan ik hierin één van de lijstje weergeven??

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 4:24 pm
by Jos
Masweb wrote:Als je dat doet voor multiselect worden de waarde achter elkaar opgesomd gescheiden door een comma.
....
Hoe kan ik hierin één van de lijstje weergeven??
Ik begrijp de vraag niet zo goed.
Je wilt de inhoud van een variabele tonen. Die variabele is gevuld dmv een multiselect veld. Als er meerdere opties zijn gekozen, dan wordt de inhoud komma-gescheiden weergegeven, begrijp ik uit je verhaal. Op welke manier zou je het dan graag willen tonen?

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 4:36 pm
by Masweb
Ik heb 3 multiselect lijstjes.

Bijvoorbeeld:

lijst 1
item 1
item 2
item 3
item 4

lijst 2
item 1
item 2
item 3
item 4

lijst 3
item 1
item 2
item 3
item 4

Ondertussen ben ik zover dat ik ze kan weergeven als 3 afzonderlijke lijstjes, maar ik wil graag zelf bepalen welke ik wil zien. Dus bijvoorbeeld alleen lijst 2.

Ik ben tot zover gekomen:

Code: Select all

<div id="bijzonderheden-wrapper">
{foreach from=$oneuser.properties item='onepropvalue' key='propname'}

 {if $properties.$propname.type == 5}
<div id="{$properties.$propname.prompt}-specs">
<div id="{$properties.$propname.prompt}">{$properties.$propname.prompt}:</div>
{assign var='tmp' value=','|explode:$onepropvalue}
        {$feu_smarty->get_multiselect_text($propname,$onepropvalue,'values')}
        {cgud_getpropertysummary_url prop="$propname" propval="$onepropvalue" assign='urls'}
        <ul>
        {foreach from=$values name='multi' item='one'}
          <li>
            {assign var='i' value=$smarty.foreach.multi.index}
            {$one}
          </li>
        {/foreach}
        </ul>
		</div>{/if}
		{/foreach}
        </div>

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 4:46 pm
by Jos
Sorry ik begrijp het nog steeds niet.

Je zegt zelf dat je een waarde van een veld kunt tonen met {$oneuser.properties.naam} waarbij ik aanneem dat het in dit voorbeeld gaat om het veld genaamd "naam". Klopt dat?

{$oneuser.properties.mijnmultiselectveld} geeft dan niet de waarde van het gewenste multiselectveld weer?

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 4:55 pm
by Masweb
Als ik dit doe:

{$oneuser.properties.naam}

Krijg ik:

Lijst1:item1,item2,item3

Ik wil juist:

lijst 1
item 1
item 2
item 3
item 4

Dat doe ik dus met deze code

Code: Select all

<div id="bijzonderheden-wrapper">
{foreach from=$oneuser.properties item='onepropvalue' key='propname'}

 {if $properties.$propname.type == 5}
<div id="{$properties.$propname.prompt}-specs">
<div id="{$properties.$propname.prompt}">{$properties.$propname.prompt}:</div>
{assign var='tmp' value=','|explode:$onepropvalue}
        {$feu_smarty->get_multiselect_text($propname,$onepropvalue,'values')}
        {cgud_getpropertysummary_url prop="$propname" propval="$onepropvalue" assign='urls'}
        <ul>
        {foreach from=$values name='multi' item='one'}
          <li>
            {assign var='i' value=$smarty.foreach.multi.index}
            {$one}
          </li>
        {/foreach}
        </ul>
      </div>{/if}
      {/foreach}
        </div>
Omdat er 3 van dat soort lijstje zijn worden ze alle drie weergegeven.
Ik wil eigenlijk de keuze hebben om maar één van die lijstjes te zien

veldnaam is inderdaad "naam"

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 5:04 pm
by Jos
Je code ziet er ingewikkeld uit voor zo iets (op het eerste gezicht) simpels

Vraag:
Geeft {$oneuser.properties.naam.prompt} toevallig alleen de veldnaam, in jouw voorbeeld dus "Lijst1"?

en geeft {$oneuser.properties.naam.value} dan toevallig de inhoud van dat veld? Misschien als array, of misschien ook komma gescheiden?
In geval van array, probeer dan {$oneuser.properties.naam.value|print_r}

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 5:23 pm
by Masweb
Al is dit doe {$oneuser.properties.naam.prompt}
Krijg ik alleen:

A

Als ik dit doe {$oneuser.properties.naam.value}

A

Als ik dit doe

{$oneuser.properties.naam}

Krijg ik alle value's

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 5:42 pm
by Jos
Oke, jammer dus... misschien kun je met {get_template_vars} nog wat op het spoor komen?

Anders voorbordurend op jouw code, dan kun je de buitenste foreach weglaten en overal waar je $propname ziet vervangen door de naam van je veld? Al begrijp ik zelf niet waar de variabele $properties vandaan komt, maar dat zal dan wel elders in je code of module geregeld zijn...

Zoiets dus?
<div id="bijzonderheden-wrapper">
<div id="{$properties.naam.prompt}-specs">
<div id="{$properties.naam.prompt}">{$properties.naam.prompt}:</div>
{assign var='tmp' value=','|explode:$oneuser.properties.naam}
{$feu_smarty->get_multiselect_text('naam',$oneuser.properties.naam,'values')}
{cgud_getpropertysummary_url prop="naam" propval="$oneuser.properties.naam" assign='urls'}
<ul>
{foreach from=$values name='multi' item='one'}
<li>
{assign var='i' value=$smarty.foreach.multi.index}
{$one}
</li>
{/foreach}
</ul>
</div>
Wel erg veel div's trouwens en volgens mij kan de regel {cgud_getpropertysummary_url prop="naam" propval="$oneuser.properties.naam" assign='urls'} er ook geheel uit... ik zie tenminste nergens de variabele $urls terugkomen.

Re: FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 5:54 pm
by Masweb
Jos,

Helemaal geweldig! Hier was ik zelf nooit uitgekomen. Dit werkt!

Dank je!

Re: [Solved] FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 5:55 pm
by Jos
Hoe is het mogelijk ;D

trouwens... de regel {assign var='i' value=$smarty.foreach.multi.index} kun je ook nog weglaten. De variabele $i wordt ook nergens meer gebruikt

[edit]
En deze regel kan ook weg:
{assign var='tmp' value=','|explode:$oneuser.properties.naam}
$tmp zie ik namelijk ook nergens meer terug

Re: [Solved] FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 6:11 pm
by Masweb
Klopt zelfde resultaat!

Ik maak nu misschien wat misbruik van de situatie, maar is er ook een manier om te bladeren tussen gebruikers?

Dus als je een gebruiker in beeld hebt om naar de volgende of vorige te gaan?

Of zal ik hier maar even een nieuw topic van maken?

Re: [Solved] FrontEndUsers en CGUserDirectory multiselect

Posted: Mon May 13, 2013 6:38 pm
by Jos
Met CMSms is alles mogelijk, dus dat ook... het is alleen de vraag hoe :D
Kon nog best ingewikkeld worden om voor elkaar te krijgen. Ligt er ten eerste aan welke variabelen je beschikbaar hebt in de module {get_template_vars}

Voor zover die niet toereikend zijn kun je altijd nog terug grijpen op de lijstweergave in plaats van de detailweergave. Met een foreach alle items doorlopen totdat je het item tegenkomt die je wilt tonen. Bij elke loop het id van het voorgaande item onthouden tbv de link terug, en het volgende item komt ook vanzelf langs, die ook onthouden endaarmee zul je vast de links vorige en volgende kunnen reconstrueren... Zo even simpel gezegd... om het uit te voeren zal wel wat tijd vergen...