2012-06-01 39 views
10

Nó đã xảy ra với tôi rằng một phần lớn công việc của tôi thực sự chỉ là xây dựng những điều tương tự hơn và hơn nữa.Làm cách nào để mô hình hóa các biểu mẫu nhiều trang phức tạp với các nhánh có điều kiện?

Đây là các dạng đa dạng cơ bản phức tạp, ví dụ: các đơn xin thế chấp, bảo hiểm, vv

Có một mô hình phổ biến/được sử dụng cho những thứ như vậy không? Tôi không quan tâm ngôn ngữ/công nghệ nào được sử dụng. Tôi nghĩ XML/ngôn ngữ trung lập lý tưởng.

+1

Cảm ơn tất cả vì nỗ lực nhưng câu hỏi của tôi không thực sự được trả lời. Rất ít các giải pháp được cho phép cho một mô hình logic cơ bản cần thiết nhưng đúng hơn là các nhà xây dựng biểu mẫu - và sau đó logic được thêm vào. Tôi muốn một mô hình tất cả trong một. – Jonno

+0

Bạn có thể hưởng lợi từ https://tallyfy.com - đó là công cụ xử lý dựa trên biểu mẫu duy nhất có phân nhánh có điều kiện mạnh mẽ cho các quy trình, được thực hiện lặp đi lặp lại. –

Trả lời

0

Các dự án PFBC (PHP Form Builder Class) được phát triển với mục tiêu sau đây trong tâm trí:

  • Thúc đẩy sự phát triển nhanh chóng của các hình thức thông qua một cấu trúc PHP hướng đối tượng.
  • Loại bỏ công việc grunt/lặp đi lặp lại của việc viết html và xác thực khi tạo biểu mẫu. lỗi của con người bằng cách sử dụng một tiện ích phù hợp/thử nghiệm.

Một mẫu mã sẽ là:

<?php 
//PFBC 2.x PHP 5 >= 5.3 
session_start(); 
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php"); 
$form = new PFBC\Form("GettingStarted", 300); 
$form->addElement(new PFBC\Element\Textbox("My Textbox:", "MyTextbox")); 
$form->addElement(new PFBC\Element\Select("My Select:", "MySelect", array(
    "Option #1", 
    "Option #2", 
    "Option #3" 
))); 
$form->addElement(new PFBC\Element\Button); 
$form->render(); 

//PFBC 2.x PHP 5 
session_start(); 
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php"); 
$form = new Form("GettingStarted", 300); 
$form->addElement(new Element_Textbox("My Textbox:", "MyTextbox")); 
$form->addElement(new Element_Select("My Select:", "MySelect", array(
    "Option #1", 
    "Option #2", 
    "Option #3" 
))); 
$form->addElement(new Element_Button); 
$form->render(); 
?> 

Check-out PHP Form Builder Class Project. Hy vọng điều này sẽ giúp ... :)

0

Tôi sẽ không cố gắng trở thành ngôn ngữ trung lập. Tập trung vào một ngôn ngữ như CFML hoặc PHP làm điều này rất tốt. Ví dụ.

<input type="radio" name="type" value='mortgage' onmouseup='updateForm(this)'> Mortgage 
<input type="radio" name="type" value='loan' onmouseup='updateForm(this)'> Loan 

<cfif form.type eq 'loan'> 
    <input name="income" type="text"> 
</cfif> 

Ví dụ rất đơn giản. Bạn cũng có thể sử dụng logic dựa trên các chi tiết đăng nhập, các giá trị cơ sở dữ liệu, các biểu mẫu trước đó, vv. CFML cũng cung cấp các thẻ biểu mẫu nâng cao (ví dụ: cfinput) có thể xử lý một số chi tiết lộn xộn của các biểu mẫu động cho bạn.

+1

Xin đừng bao giờ đề nghị ColdFusion cho bất cứ ai, bao giờ hết. – styler1972

+0

@Styler: Tôi không đề xuất "Coldfusion" (sản phẩm Adobe). Tôi đã đề nghị CFML (ngôn ngữ). Tôi sử dụng và giới thiệu Railo (miễn phí, mã nguồn mở) để thực sự chạy CFML (http://getrailo.org). – SpliFF

0

Vâng, nếu bạn không nhớ mà ngôn ngữ được sử dụng, và quan tâm đến việc học ROR, thì đây là một phong nha complex forms tutorial, mặc dù bạn sẽ cần một số quen thuộc với khuôn khổ để thực hiện công việc này

lẽ this answer sẽ giúp bạn tìm cách tiếp cận theo định hướng jquery đơn giản hơn, có thể hơi cũ

Hãy xem this jQuery multi-step form tutorial quá, nhưng có vẻ như tôi sẽ đọc trong giờ ăn trưa sau này vì tôi quan tâm tự làm như vậy

Có ràng buộc với b e một plugin idiot-proof ra có quá

1

Bạn cũng có thể sử dụng http://www.springsource.org/spring-web-flow:

Spring Web Flow là một phần mở rộng Spring MVC mà cho phép thực hiện "dòng chảy" của một ứng dụng web. Một luồng bao gồm một chuỗi các bước hướng dẫn người dùng thông qua việc thực hiện một số nhiệm vụ kinh doanh. Nó trải rộng nhiều yêu cầu HTTP, có trạng thái, giao dịch với dữ liệu giao dịch, có thể sử dụng lại và có thể là động và dài hạn trong tự nhiên.

Nó cũng được tích hợp hoàn hảo trong Groovy & Grails (Webflow Doc). Groovy là một phần mở rộng giống như kịch bản của Java, trong khi Grails là webframework sử dụng trong số những thứ khác Spring, Hibernate ...

+0

Âm thanh đầy hứa hẹn, sẽ có nội dung đọc. – Jonno

1

Cá nhân tôi sử dụng Django để tạo biểu mẫu của mình. Tôi đã thực hiện các hình thức đa bước phức tạp, nơi có điều kiện bước bằng django.contrib.formtools.FormWizard và sử dụng một factoryfunction để tạo ra các lớp Mẫu cho bước như thế này:

class SomeWizard(FormWizard): 
    def process_step(self, request, form, step): 
     if form.is_valid() and step == 0: 
      #compute step 2 
      Step2 = second_step_factory(form) 
      self.form_list[1] = Step2 

Và bước nó với một placeholder khi instantiating Đối tượng thuật sĩ:

def some_form_view(request): 
    Step1 = first_step_factory(request) 
    placeholder = second_step_factory() 
    return SomeWizard([Step1, placeholder])(request) 

Trong Django 1.4 FormWizard đã được replaced bằng cách triển khai khác, tôi chưa xem xét điều đó.

Nếu bạn muốn ngôn ngữ trung lập, có nhiều tùy chọn khai báo hơn, bạn có thể xem XForms. Hỗ trợ trình duyệt có vẻ hơi bị bỏ rơi, nhưng có XSLTs that will transform your XForms into HTML.

+1

Tôi đồng ý, thỏa thuận django tuyệt vời với sự phức tạp sau vài quy tắc đơn giản - https://docs.djangoproject.com/en/dev/misc/design-philosophies – Marek

0

Tôi giả định rằng bạn đang sử dụng một số loại DB để tạo dữ liệu. và những gì bạn muốn làm là điền vào một số dữ liệu trên trang biểu mẫu một, gửi biểu mẫu nhận trang thứ hai và cứ tiếp tục như vậy.

Tùy chọn 1 - Sử dụng khung công tác PHP Yii. Nó có một số được xây dựng trong CRUD (hình thức) hỗ trợ thế hệ và nó có thể tạo ra các hình thức đơn giản tự động. Những gì bạn cần làm là tùy chỉnh hành động để chuyển hướng bạn trên biểu mẫu tiếp theo (trang thứ hai) và trên biểu mẫu cuối cùng lưu tất cả dữ liệu. Nó cũng có xác nhận dựa trên ajax tốt.
Tất cả những gì bạn cần làm là kết nối ứng dụng của bạn với db chọn một bảng tạo mô hình sau đó tạo CRUD. tối đa này là một nhiệm vụ 5-10 phút. Sau đó, bạn cần tùy chỉnh các biểu mẫu xác định các kịch bản để xác thực và sửa đổi các hành động đã được xác định để hỗ trợ các thay đổi.
Bạn có thể thử sample app Yii Blog của chúng. Nó có thể giải thích quá trình một cách chi tiết.

Tùy chọn 2 - SỬ DỤNG JavaScript. Tạo các biểu mẫu html đơn giản theo yêu cầu của bạn. Sau đó, khi gửi mỗi trang, hãy gọi JavaScript (sự kiện onClick của nút gửi) để xác nhận biểu mẫu và lưu trữ dữ liệu biểu mẫu trong đối tượng JSON/XML. Bạn có thể tuần tự hóa hoặc giữ nó trong phiên. Khi gửi trang cuối cùng, hãy gửi toàn bộ dữ liệu JSON/XML (bao gồm cả dữ liệu trên trang cuối cùng) đến tập lệnh xử lý biểu mẫu/URL của bạn trong thẻ hành động.

+0

Đồng thời thử liên kết này. Các biểu mẫu đa cấp dựa trên jQuery http://www.jqueryrain.com/?vxVbfKIv –

+2

Khi bạn nói 'ajax based validation' và 'JavaScript validates', bạn cũng nên nói rằng việc xác thực nên được thực hiện * lần nữa * khi nhận được yêu cầu trên máy chủ. Người mới bắt đầu đọc này nên được dạy không tin tưởng phía khách hàng và bất kỳ JavaScript chạy ở đó. Theo nghĩa đó, Ajax là cơ sở * để xác thực âm thanh lừa dối và thiếu sót. Nó có thể cung cấp giao diện người dùng tốt đẹp, nhưng không sử dụng nó như một biện pháp an toàn. –

+1

@ChrisWesseling, Có chứ. Xác nhận dựa trên ajax của Yii sẽ nhận dữ liệu của bạn được xác thực từ máy chủ và xác thực lại dữ liệu trên máy chủ trước khi lưu. –

Các vấn đề liên quan