02-28-2011, 08:10 AM
Requirements:
This is an idea for creating a step by step form (Form Wizard).
The basic idea is, we hide some custom thread fields, and display it in some certain conditions.
For this example, we will use this conditions:
[attachment=449]
More info about this conditions:
http://mybbhacks.zingaburga.com/showthread.php?tid=740
Custom Thread Fields Settings:
Custom Template:
Additional Info:
Well, that is the idea. Not quite sure whether this idea is OK or not
Live Demo:
http://www.14.mynie.co.cc/newthread.php?fid=49
We can't submit the form in the demo forum, because I've removed the Captcha from the template. But we can preview it.
This is an idea for creating a step by step form (Form Wizard).
The basic idea is, we hide some custom thread fields, and display it in some certain conditions.
For this example, we will use this conditions:
[attachment=449]
More info about this conditions:
http://mybbhacks.zingaburga.com/showthread.php?tid=740
Custom Thread Fields Settings:
- Attending - Ceremony
- Title: Attending - Ceremony
Modify it as our needs. We use variable in Display Format. So, if we change the title here, the title in Display Format will be updated automatically. - Key: att1
- Description: If you will be attending ceremony, please choose Yes. Otherwise, please choose No.
Modify it as our needs. - Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:Yes No
- Editable by / Required Field?: Everyone
Although it is not a required fields, we will try to "force" user to choose the options before continuing to the next question. - Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['att1']['title']}: {VALUE}</div>
Like said above, we use variable for the fields title. I don't know what is the shortcut for this in Display Format.
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
We will use conditional for displaying this field in newthread template.
- Title: Attending - Ceremony
- # of Guests - Ceremony
- Title: # of Guests - Ceremony
- Key: fw_g1
- Description: Please select the number of guests from the option list.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:1 2
Modify it as our needs.
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['fw_g1']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
- Attending - Lunch
- Title: Attending - Ceremony
- Key: att2
- Description: If you will be joining us for lunch, please choose Yes. Otherwise, please choose No.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:Yes No
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['att2']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
- # of Guests - Lunch
- Title: # of Guests - Lunch
- Key: fw_g2
- Description: Please select the number of guests from the option list.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:1 2
Modify it as our needs.
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['fw_g2']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
- Special Diet
- Title: Special Diet
- Key: fw_d1
- Description: If you have a special dietary requirements, please choose Yes. Otherwise, please choose No.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:Yes No
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['fw_d1']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
- Diet Requirements
- Title: Diet Requirements
- Key: fw_d2
- Description: Please indicate what is your requirements are.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Multiline Textbox
- Editable by / Required Field?: Everyone
- Display Parsing: Plain text with newlines
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['fw_d2']['title']}:<div><div>{VALUE}</div>
- Hide Input Field: Yes
- Attending - Party
- Title: Attending - Party
- Key: att3
- Description: If you will be attending party, please select Yes. Otherwise, please select No.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:Yes No
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['att3']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
- # of Guests - Party
- Title: # of Guests - Party
- Key: fw_g3
- Description: Please select the number of guests from the option list.
- Applicable Forums: select in which forum this form should be applied.
- Input Field Type: Option Buttons
- Values List:
Code:1 2
Modify it as our needs.
- Editable by / Required Field?: Everyone
- Display Format:
HTML Code<div>{$GLOBALS['threadfields_x']['fw_g3']['title']}: {VALUE}</div>
- Settable Value Permissions:
- Value: leave it blank
- Editable by Groups: Administrators
Code:{|}4
- Hide Input Field: Yes
Custom Template:
- fw_newthread
HTML Code<html> <head> <title>{$lang->newthread_in}</title> {$headerinclude} <script type="text/javascript" src="jscripts/post.js?ver=1400"></script> </head> <body> {$header} <br class="clear" /> <if $mybb->input['message'] then> {$preview} </if> <div style="display: none;">{$thread_errors}</div> {$attacherror} <form action="newthread.php?fid={$fid}&processed=1" method="post" enctype="multipart/form-data" name="input"> <input type="hidden" name="my_post_key" value="{$mybb->post_code}" /> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-bottom: 0px;"> <tr> <td class="thead"><strong>{$lang->post_new_thread}</strong></td> </tr> </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $subject then> display: none;</if>"> <tr> <td class="trow2" width="20%"> <strong>{$lang->thread_subject}</strong> </td> <td class="trow2"> <input type="text" class="textbox" name="subject" size="40" maxlength="85" value="{$subject}" tabindex="1" /><small style="display: block;">Please fill the Subject</small> </td> </tr> </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if !$subject || $GLOBALS['threadfields']['att1'] then> display: none;</if>"> {$tfinputrow['att1']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_att1'] != 'Yes' || $mybb->input['xthreads_fw_g1'] then> display: none;</if>"> {$tfinputrow['fw_g1']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if ($mybb->input['xthreads_att1'] != 'No' && !$mybb->input['xthreads_fw_g1']) || $mybb->input['xthreads_att2'] then> display: none;</if>"> {$tfinputrow['att2']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_att2'] != 'Yes' || $mybb->input['xthreads_fw_g2'] then> display: none;</if>"> {$tfinputrow['fw_g2']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_att2'] == 'No' || !$mybb->input['xthreads_fw_g2'] || $mybb->input['xthreads_fw_d1'] then> display: none;</if>"> {$tfinputrow['fw_d1']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_fw_d1'] != 'Yes' || $mybb->input['xthreads_fw_d2'] then> display: none;</if>"> {$tfinputrow['fw_d2']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if ($mybb->input['xthreads_att2'] != 'No' && $mybb->input['xthreads_fw_d1'] != 'No' && !$mybb->input['xthreads_fw_d2']) || $mybb->input['xthreads_att3'] then> display: none;</if>"> {$tfinputrow['att3']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_att3'] != 'Yes' || $mybb->input['xthreads_fw_g3'] then> display: none;</if>"> {$tfinputrow['fw_g3']} </table> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="border-top: 0px;<if $mybb->input['xthreads_att3'] != 'No' && !$mybb->input['xthreads_fw_g3'] then> display: none;</if>"> {$extra_threadfields} <tr> <td class="trow2" valign="top" width="20%"><strong>{$lang->your_message}</strong>{$smilieinserter}</td> <td class="trow2"> <textarea name="message" id="message" rows="20" cols="70" tabindex="2">{$message}</textarea> {$codebuttons} {$multiquote_external} </td> </tr> </table> <br /> <div style="text-align:center"> <if $mybb->input['xthreads_att3'] != 'No' && !$mybb->input['xthreads_fw_g3'] then> <input type="submit" class="button" name="previewpost" value="Next" tabindex="5" /> <else> <input type="submit" class="button" name="submit" value="Submit" tabindex="4" accesskey="s" /> <input type="submit" class="button" name="previewpost" value="Preview" tabindex="5" /> </if> </div> <input type="hidden" name="action" value="do_newthread" /> <input type="hidden" name="posthash" value="{$posthash}" /> <input type="hidden" name="attachmentaid" value="" /> <input type="hidden" name="attachmentact" value="" /> <input type="hidden" name="quoted_ids" value="{$quoted_ids}" /> <input type="hidden" name="tid" value="{$tid}" /> {$editdraftpid} </form> {$forumrules} {$footer} </body> </html>
We use the Preview Post button for the Next button.
- fw_postbit_first
HTML Code{$ignore_bit} <a name="pid{$post['pid']}" id="pid{$post['pid']}"></a> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="{$post_extra_style} {$post_visibility}" id="post_{$post['pid']}"> <tbody> <tr> <td class="tcat"> <div class="float_left smalltext"> {$post['postdate']}, {$post['posttime']} <span id="edited_by_{$post['pid']}">{$post['editedmsg']}</span> </div> {$post['posturl']} </td> </tr> <tr> <td class="trow1 {$unapproved_shade}" > <table cellspacing="0" cellpadding="0" border="0" style="width: 100%;"> <tr> <td class="post_avatar" width="1" style="{$post['avatar_padding']}"> {$post['useravatar']} </td> <td class="post_author"> <strong><span class="largetext">{$post['profilelink']}</span></strong> {$post['onlinestatus']}<br /> <span class="smalltext"> {$post['usertitle']}<br /> {$post['userstars']} {$post['groupimage']} </span> </td> <td class="smalltext post_author_info" width="165"> {$post['user_details']} </td> </tr> </table> </td> </tr> <tr> <td class="trow2 post_content {$unapproved_shade}" > <span class="smalltext"><strong>{$post['icon']}{$post['subject']} {$post['subject_extra']}</strong></span> <div class="post_body" id="pid_{$post['pid']}"> <div><strong>Subject:</strong> {$post['subject']}</div> {$GLOBALS['threadfields']['att1']} {$GLOBALS['threadfields']['fw_g1']} {$GLOBALS['threadfields']['att2']} {$GLOBALS['threadfields']['fw_g2']} {$GLOBALS['threadfields']['fw_d1']} {$GLOBALS['threadfields']['fw_d2']} {$GLOBALS['threadfields']['att3']} {$GLOBALS['threadfields']['fw_g3']} {$post['message']} </div> {$post['attachments']} {$post['signature']} <div class="post_meta" id="post_meta_{$post['pid']}"> {$post['iplogged']} </div> </td> </tr> <tr> <td class="trow1 post_buttons {$unapproved_shade}" style=""> <div class="author_buttons float_left"> {$post['button_email']}{$post['button_pm']}{$post['button_www']}{$post['button_find']}{$post['button_rep']} </div> <div class="post_management_buttons float_right">{$post['button_edit']}{$post['button_quickdelete']}{$post['button_quote']}{$post['button_multiquote']}{$post['button_report']}{$post['button_warn']}{$post['button_reply_pm']}{$post['button_replyall_pm']}{$post['button_forward_pm']}{$post['button_delete_pm']} </div> </td> </tr> </tbody> </table>
- fw_editpost_first
HTML Code<html> <head> <title>{$mybb->settings['bbname']} - {$lang->edit_post}</title> {$headerinclude} <script type="text/javascript" src="jscripts/post.js?ver=1400"></script> </head> <body> {$header} {$preview} {$post_errors} {$attacherror} <form action="editpost.php" method="post" name="editpost"> <input type="hidden" name="my_post_key" value="{$mybb->post_code}" /> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <tr> <td class="thead" colspan="3"><strong>{$lang->delete_post}</strong></td> </tr> <tr> <td class="trow1" style="white-space: nowrap"><input type="checkbox" class="checkbox" name="delete" value="1" tabindex="9" /> <strong>{$lang->delete_q}</strong></td> <td class="trow1" width="100%">{$lang->delete_1}<br /><span class="smalltext">{$lang->delete_2}</span></td> <td class="trow1"><input type="submit" class="button" name="submit" value="{$lang->delete_now}" tabindex="10" /></td> </tr> </table> <input type="hidden" name="action" value="deletepost" /> <input type="hidden" name="pid" value="{$pid}" /> </form> <br /> <form action="editpost.php?pid={$pid}&processed=1" method="post" enctype="multipart/form-data" name="input"> <input type="hidden" name="my_post_key" value="{$mybb->post_code}" /> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <tr> <td class="thead" colspan="2"><strong>{$lang->edit_post}</strong></td> </tr> {$loginbox} <tr> <td class="trow2"><strong>{$lang->subject}</strong></td> <td class="trow2">{$prefixselect}<input type="text" class="textbox" name="subject" size="40" maxlength="85" value="{$subject}" tabindex="1" /></td> </tr> {$extra_threadfields} {$tfinputrow['att1']} {$tfinputrow['fw_g1']} {$tfinputrow['att2']} {$tfinputrow['fw_g2']} {$tfinputrow['fw_d1']} {$tfinputrow['fw_d2']} {$tfinputrow['att3']} {$tfinputrow['fw_g3']} {$posticons} <tr> <td class="trow2" valign="top"><strong>{$lang->your_message}:</strong><br /><div style="text-align: center;">{$smilieinserter}</div></td> <td class="trow2"> <textarea name="message" id="message" rows="20" cols="70" tabindex="3">{$message}</textarea> {$codebuttons} </td> </tr> <tr> <td class="trow1" valign="top"><strong>{$lang->post_options}</strong></td> <td class="trow1"><span class="smalltext"> <label><input type="checkbox" class="checkbox" name="postoptions[signature]" value="1" tabindex="6"{$postoptionschecked['signature']} /> {$lang->options_sig}</label> {$disablesmilies}</span> </td> </tr> {$subscriptionmethod} {$pollbox} </table> {$attachbox} <br /> <div align="center"><input type="submit" class="button" name="submit" value="{$lang->update_post}" tabindex="3" accesskey="s" /> <input type="submit" class="button" name="previewpost" value="{$lang->preview_post}" tabindex="4" /></div> <input type="hidden" name="action" value="do_editpost" /> <input type="hidden" name="posthash" value="{$posthash}" /> <input type="hidden" name="attachmentaid" value="" /> <input type="hidden" name="attachmentact" value="" /> </form> {$footer} </body> </html>
Additional Info:
- What conditionals we should use, depends on what conditions should be applied for each custom thread fields.
- This form wizard doesn't use Javascript.
- The step by step form works in newthread only.
- The step by step is "breakable" with direct URL.
Well, that is the idea. Not quite sure whether this idea is OK or not
Live Demo:
http://www.14.mynie.co.cc/newthread.php?fid=49
We can't submit the form in the demo forum, because I've removed the Captcha from the template. But we can preview it.