Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 07. Mai 2015 12:17

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

formbuilder: Felder in zufälliger Reihenfolge darstellen

Hallo,

ist sowas möglich wie im Titel beschrieben? Dass bestimmte Felder in der Formularausgabe in zufälliger Reihenfolge ausgegeben werden. Also zB die Felder 4-12.

Offline

#2 07. Mai 2015 12:49

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Wie sieht denn dein Formular-Template aus?

Offline

#3 08. Mai 2015 06:06

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Das Formular besteht aus zwei Seiten. Seite 1 ist nicht betroffen und enthält normale Textfelder. Die betroffenen Felder sind allesamt Kontrollkästchen-Gruppen, betrifft also die numloop-Section in der multiple_parts-Bedingung im Template. Das könnte vielleicht nützlich sein.

[== smarty/html ==]
{* TABLE FORM LAYOUT / Field titles on Top *}
{* next line sets number of columns for things like checkbox groups *}
{assign var="cols" value="3"}
{literal}
<script type="text/javascript">
function fbht(htid)
	{
		var fbhtc=document.getElementById(htid);
		if (fbhtc)
			{
			if (fbhtc.style.display == 'none')
				{
				fbhtc.style.display = 'inline';
				}
			else
				{
				fbhtc.style.display = 'none';
				}
			}
}
</script>
{/literal}
{$fb_form_header}
{if $fb_form_done == 1}
	{* This first section is for displaying submission errors *}
	{if $fb_submission_error}
		<div class="error_message">{$fb_submission_error}</div>
		{if $fb_show_submission_errors}
			<table class="error">
			{foreach from=$fb_submission_error_list item=thisErr}
				<tr><td>{$thisErr}</td></tr>
			{/foreach}
			</table>
		{/if}
	{/if}
{else}
	{* this section is for displaying the form *}
	{* we start with validation errors *}
	{if $fb_form_has_validation_errors}
		<div class="error_message">
		<ul>
		{foreach from=$fb_form_validation_errors item=thisErr}
			<li>{$thisErr}</li>
		{/foreach}
		</ul>
		</div>
	{/if}
	{if $captcha_error}
		<div class="error_message">{$captcha_error}</div>
	{/if}

	{* and now the form itself *}
	{$fb_form_start}
	<div>{$fb_hidden}</div>

	<table{if $css_class != ''} class="{$css_class}"{/if}>
	{if $total_pages gt 1}<tr><td colspan="2">{$title_page_x_of_y}</td></tr>{/if}
	{foreach from=$fields item=entry}
		{if $entry->display == 1 &&
			$entry->type != '-Fieldset Start' &&
			$entry->type != '-Fieldset End' }
		<tr>
			{strip}
			<td valign="top"
			{if $entry->required == 1 || $entry->css_class != ''} class=" 
				{if $entry->required == 1}
					required
				{/if}
				{if $entry->required == 1 && $entry->css_class != ''} {/if}
				{if $entry->css_class != ''}
					{$entry->css_class}
				{/if}
				"
			{/if}
			>
			{if $entry->hide_name == 0}
				{$entry->name}
				{if $entry->required_symbol != ''}
					{$entry->required_symbol}
				{/if}
			{/if}
			</td></tr><tr><td align="left" valign="top"{if $entry->css_class != ''} class="{$entry->css_class}"{/if}>
			{if $entry->multiple_parts == 1}
			<table>
				<tr>
				{section name=numloop loop=$entry->input}
					<td valign="top">{$entry->input[numloop]->input}&nbsp;</td><td valign="top">{$entry->input[numloop]->name}{if $entry->input[numloop]->op}&nbsp;{$entry->input[numloop]->op}{/if}</td></tr><tr>
					{if not ($smarty.section.numloop.rownum mod $cols)}
						{if not $smarty.section.numloop.last}
				
						{/if}
					{/if}
					{if $smarty.section.numloop.last}
						{math equation = "n - a % n" n=$cols a=$entry->input|@count assign="cells"}
						{if $cells ne $cols}
							{section name=pad loop=$cells}
								<td>&nbsp;</td>
							{/section}
						{/if}
				</tr>
					{/if}
				{/section}
			</table>
			{else}
				{if $entry->smarty_eval == '1'}{eval var=$entry->input}{else}{$entry->input}{/if}
			{/if}
			{if $entry->valid == 0} &lt;--- {$entry->error}{/if}
			{if $entry->helptext != ''}&nbsp;<a href="javascript:fbht('{$entry->field_helptext_id}')"><img src="modules/FormBuilder/images/info-small.gif" alt="Help" /></a>
					<span id="{$entry->field_helptext_id}" style="display:none" class="fbr_helptext">{$entry->helptext}</span>{/if}
			
			</td></tr>
			{/strip}
		{/if}
	{/foreach}
	{if $has_captcha == 1}
	<tr><td>{$graphic_captcha}</td></tr><tr><td>{$input_captcha}<br />{$title_captcha}</td></tr>
	{/if}
	<tr><td>{$prev}</td></tr><tr><td>{$submit}</td></tr>
</table>
{$fb_form_end}
{/if}
{$fb_form_footer}

Beitrag geändert von antibart (08. Mai 2015 06:08)

Offline

#4 08. Mai 2015 09:22

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Du hast eine Variable namens {$fields}.
Das ist ein Array.
Die Reihenfolge der Elemente kannst Du vor der {foreach} Schleife mit {$fields|shuffle} auf eine zufällige Reihenfolge ändern.
Das betrifft aber dann alle Felder.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 08. Mai 2015 10:05

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Danke schonmal. Alle Felder wäre nicht so gut.

Offline

#6 08. Mai 2015 13:18

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Hmm, evtl so?

Zuerst die nicht zu mischenden Elemente manuell im Template aufrufen, diese Elemente dann aus $fields entfernen und dann den Rest shufflen (ungetestet)?

Offline

#7 08. Mai 2015 14:04

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

Re: formbuilder: Felder in zufälliger Reihenfolge darstellen

Das klingt doch schonmal gut. Danke.

Offline