2009-11-05 7 views
5

Tôi muốn tạo biểu mẫu đầu vào cho người dùng đã đăng ký, được tách riêng khỏi biểu mẫu tạo nội dung của quản trị viên. Mỗi lần gửi sẽ tạo nhiều nút. Để minh họa trường hợp, tôi sẽ sử dụng loại nội dung Dự ánĐánh giá.Biểu mẫu Nút tùy chỉnh Drupal

Dự án: Tiêu đề, Mô tả, Chủ, Đánh giá.

xét: Tiêu đề, Reviewer, Dự án, Khó

tôi đã thiết lập các loại nội dung cùng với các lĩnh vực của họ sử dụng module CCK. Tôi muốn tạo một biểu mẫu đầu vào để hiển thị cho các thành viên đã đăng ký (không phải quản trị viên). lĩnh vực của mình bao gồm Project Name, Mô tả, Chủ, Đánh giá, xét, Khó.

Khi biểu mẫu được gửi, Project Name, Mô tả, Chủ, và Đánh giá giá trị đi vào mới Dự án nút, nơi còn lại đi vào xét mới nút.

Một tùy biến mà tôi muốn làm là cho Đánh giáKhó trường nhập để sử dụng star rating input.

Cách tốt nhất để thực hiện điều này là gì? Tôi có nên tạo mô-đun tùy chỉnh và biểu mẫu tùy chỉnh (Mọi người có thể chỉ cho tôi cách thực hiện việc này) không? Hoặc là có bất kỳ mô-đun tôi có thể sử dụng?

Cảm ơn

Trả lời

8

Có một số cách để làm điều này:

  1. làm tất cả mọi thứ từ đầu: Đây là những gì theunravelers suggestion (+1) sôi xuống - xây dựng dưới hình thức bản thân, thêm xác nhận của riêng bạn và nộp xử lý và trên gửi, xây dựng hai đối tượng nút và lưu chúng.Bạn sẽ có toàn quyền kiểm soát/tính linh hoạt, nhưng nó hoàn toàn là một số công việc và bạn cần phải có một sự hiểu biết tốt về các hoạt động bên trong Drupals để làm cho nó đúng.

  2. 'Quá tải' một trong các loại nội dung của bạn với các trường cần thiết của người khác và tinh chỉnh các loại nội dung 'quá tải' gửi (và chỉnh sửa/hiển thị) logic để tạo loại nội dung khác từ các trường bổ sung, trong khi ẩn chúng trên 'quá tải' trên màn hình và chỉnh sửa. Bạn có thể find an article describing this approach here. Đây là một cách tiếp cận dễ dàng hơn đáng kể so với # 1, nhưng tôi cho rằng đó là một chút 'hack', vì định nghĩa kiểu nội dung so với hiển thị không phù hợp.

  3. Biến thể ít 'hack' của # 2 sẽ là thiết lập loại nội dung của bạn bình thường và chỉ thao tác chỉnh sửa và gửi quy trình qua hook_form_alter(). Bạn sẽ làm nhiều hơn hoặc ít hơn giống như cách tiếp cận # 2, nhưng thay vì 'quá tải' một nút với các trường bổ sung trả trước, bạn chỉ cần đưa chúng vào biểu mẫu chỉnh sửa trực tiếp trên hook_form_alter (hoặc từ đầu hoặc bằng cách tải chỉnh sửa biểu mẫu của nút khác trong nền và sao chép các định nghĩa trường có liên quan từ đó). Khi gửi biểu mẫu, bạn xóa các trường bổ sung đó trong khi sử dụng chúng để tạo nút khác của bạn. Điều này đòi hỏi một chút công việc và kiến ​​thức hơn # 2, nhưng nên ổn định hơn một chút và dễ dàng điều chỉnh/duy trì hơn thế, vì bạn không phải đối phó với định nghĩa kiểu nội dung so với hiển thị không phù hợp.

Ngoài ra, bạn không chỉ định cách bạn muốn xử lý chỉnh sửa các nút hiện có - Tôi khuyên bạn nên thêm một chú ý vào một trong các nút để theo dõi liên kết của chúng. Bằng cách đó, bạn cũng có thể thêm logic để chỉnh sửa cả hai nút từ một biểu mẫu, cũng như xóa đồng bộ, nếu muốn.

+0

Tôi thích số 2 rất nhiều, nhưng có thể nói để tạo loại nội dung thứ ba về cơ bản là sự hợp nhất của hai loại nội dung đó. Bất cứ khi nào bạn muốn chỉnh sửa cả hai, bạn chỉ cần chỉnh sửa thứ ba và các thay đổi được truyền đi. Điều đó có thể dễ dàng như # 2, nhưng hơi khó hiểu hơn một chút. – theunraveler

4

Điều đó nghe giống như một công việc tùy chỉnh với tôi. Bạn có thể sử dụng Form API trong mô-đun của mình để tạo biểu mẫu. Nhìn vào khá nhiều mô-đun khác để xem ví dụ về cách hoạt động của API biểu mẫu. Sau đó, bạn sẽ muốn tạo một đối tượng $ node từ tất cả các giá trị của các trường đó và sử dụng node_submit()node_save() để thực sự tạo các nút khác nhau.

Tôi khuyên bạn nên xem xét mô-đun Biểu mẫu web để sử dụng API biểu mẫu và chiếm đoạt quy trình gửi để làm cho nó tạo hai loại nút đó.

2

Tùy chọn # 3, sử dụng một trong các giải pháp trẻ trong việc tạo trường chú ý CCK có thể trỏ đến một nút không tồn tại và tạo nó khi gửi.

Node Reference Create trông giống như một trong những dự án này ổn định hơn.

Node Reference Auto-createNode Reference Field dường như có thêm giá trị gia tăng để xác định giá trị trong nút mới.

Điều này có lợi thế thứ hai trong việc xây dựng một sự chú ý giữa các mô-đun, mà bạn có thể sử dụng để tích hợp các nút khi được hiển thị, tạo Chế độ xem và hơn thế nữa.