Lưu trữ tùy chọn người dùng trong Drupal


7

Gần đây tôi đã phát triển một mô-đun nơi tôi đã sử dụng function hook_form_user_profile_form_alter(&$form, &$form_state)để nắm bắt các tùy chọn của người dùng và lưu chúng bằng cách sử dụng function hook_user_presave(&$edit, $account, $category). Sau đó, tôi truy cập dữ liệu bằng $ user-> data ['field'] trong một mô-đun. Điều đó đã làm việc tốt.

Nhưng bây giờ tôi muốn lưu trữ các tùy chọn tương tự bằng cách sử dụng một biểu mẫu khác (không phải biểu mẫu hồ sơ người dùng). Vì vậy, có bất kỳ móc khác để lưu trữ chúng?

Tôi muốn cung cấp một liên kết cho mỗi người dùng đến trang (mẫu khác với hồ sơ người dùng) nơi anh ta có thể lưu trữ các tùy chọn của mình.

Cảm ơn trước.

Câu trả lời:


8

Bạn không cần sử dụng hook mà bạn cần để sử dụng chức năng API user_save(). Đó là một chức năng rất kỳ lạ bởi vì không giống như tất cả các chức năng lưu khác, nó có một đối số riêng cho những điều bạn muốn thay đổi.

Một cái gì đó như thế này sẽ hoạt động, trong cuộc gọi lại gửi của bạn:

<?php
// Make sure you are working with the fully loaded user object.
$account = user_load($GLOBALS['user']->uid);
$edit['data']['your_stuff'] = $whatever;
user_save($account, $edit);
?>

FYI: user_save () không còn nữa trong Drupal 8 và thay vào đó hoạt động giống như tất cả các hàm / phương thức lưu thực thể khác trong 8.x, bằng cách gọi $ account-> save () sau khi thay đổi tài khoản $. Xem bản ghi thay đổi sau để biết chi tiết: http://drupal.org/node/1554986


1
Ngoài ra, bạn có thể muốn xem xét việc lưu thông tin của mình vào một bảng riêng tham chiếu uid. Nhược điểm là thông tin không được tải theo mặc định nhưng mặt tích cực là nó không phải tải mọi lúc và bạn có thể truy vấn trực tiếp (ví dụ: kiểm tra cài đặt của người dùng dựa trên uid mà không phải tải toàn bộ đối tượng).
Berdir

Cảm ơn rất nhiều . mã của bạn đã làm việc Tôi sẽ sử dụng một bảng riêng nếu không có tùy chọn nào của người dùng nhiều hơn :)
Sandesh Yadav

1
chắc chắn tôi sẽ Nhưng hiện tại tôi chỉ có 8 danh tiếng và 15 là cần thiết cho upvote. Tôi sẽ nâng cấp sau khi tôi đạt được 15 :)
Sandesh Yadav

0

Vâng, bạn luôn có thể tạo biểu mẫu của riêng mình bằng API Mẫu với chức năng xác thực và gửi và lưu dữ liệu bất cứ nơi nào bạn muốn. Đó cũng có thể là trong mảng dữ liệu người dùng, vì nó có vẻ là nơi hoàn hảo cho dữ liệu liên quan đến người dùng. Bạn cũng có thể tạo bảng của riêng mình với API Schema. Tôi nghĩ rằng chức năng "gửi" cho biểu mẫu là "cái móc" mà bạn đang tìm kiếm.

API biểu mẫu: http://api.drupal.org/api/drupal/includes%21form.inc/group/form_api/7

API lược đồ: http://api.drupal.org/api/drupal/includes%21database%21schema.inc/group/schemaapi/7


Tôi thoải mái tạo mẫu. Nhưng tôi không thể lưu nó trong dữ liệu người dùng. Trong mẫu nộp tôi nên làm gì để đạt được điều này? Tôi tin rằng một cái gì đó với user_presave nhưng tôi không biết cách sử dụng nó trong bối cảnh này.
Sandesh Yadav
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.