Cách lập trình thêm người dùng vào một nhóm trong Drupal 7


10

Tôi đang cố gắng lập trình tạo một nút nhóm và thêm người dùng vào nhóm đó trong Drupal 7. Nút nhóm đang được tạo tốt nhưng người dùng không được thêm vào nhóm và tôi không gặp bất kỳ lỗi nào. Tôi đoán rằng tôi đang sử dụng hàm og_group không chính xác nhưng tôi không chắc chắn. Tôi đang làm gì sai?

function MYMODULE_form_submit($form_id, $form_values) {
    global $user;

    $node = new stdClass();

    $node->type     = "group";
    $node->uid      = $user->uid;
    $node->title        = t("Group Node Title");
    $node->body     = t("Group Node Body");
    $node->status       = 1;
    $node->promote      = 0;
    $node->comment      = 1;

    $node->og_description   = t("OG Description");
    $node->og_register  = 0;
    $node->og_directory = 0;
    $node->og_private   = 1;
    $node->og_selective = 3;

    $node = node_submit($node);
    node_save($node);

    $account = user_load(2);

    og_group($node->nid, array(
                "entity type"       => "user",
                "entity"        => $account,
                "membership type"   => "OG_MEMBERSHIP_TYPE_DEFAULT",
            ));

    drupal_set_message(t("Finished"));
}

chào max - bạn đưa ra một câu hỏi hay. thx rất nhiều
zero

Câu trả lời:


13

Tôi đã hiểu rồi. Nó đã kết thúc không hoạt động vì ID nhóm KHÔNG giống với ID nút cho nhóm hữu cơ đó. Đây là phiên bản làm việc:

function MYMODULE_page_form_submit($form_id, $form_values) {
    global $user;

    $node = new stdClass();

    $node->type     = "group";
    $node->uid      = $user->uid;
    $node->title        = t("Group Node Title");
    $node->body     = t("Group Node Body");
    $node->status       = 1; //(1 or 0): published or not
    $node->promote      = 0; //(1 or 0): promoted to front page
    $node->comment      = 1; //2 = comments on, 1 = comments off

    $node->og_description   = t("OD Description");
    $node->og_register  = 0;
    $node->og_directory = 0;
    $node->og_private   = 1;
    $node->og_selective = 3;

    $node = node_submit($node);
    node_save($node);

    // Get the group ID from the node ID
    $group = og_get_group("node", $node->nid);

    // Load the user we want to add to the group (ID #2 was my test user)
    $account = user_load(2);

    // Add the user to the group
    og_group($group->gid, array(
                "entity type"       => "user",
                "entity"        => $account,
                "membership type"   => OG_MEMBERSHIP_TYPE_DEFAULT,
            ));

    // Changes the users role in the group (1 = non-member, 2 = member, 3 = administrator member)
    og_role_grant($group->gid, $account->uid, 3);

    drupal_set_message(t("Finished"));
}

13

Vì OG7-2.x ID nút == ID nhóm, không cần sử dụng og_get_group (). Và trong og_group () và og_role_grant () loại nhóm của bạn là đối số đầu tiên. Vì vậy, đây là cùng một mã cho OG 7.x-2.x

function MYMODULE_page_form_submit($form_id, $form_values) {
global $user;

$node = new stdClass();

$node->type     = "group";
$node->uid      = $user->uid;
$node->title        = t("Group Node Title");
$node->body     = t("Group Node Body");
$node->status       = 1; //(1 or 0): published or not
$node->promote      = 0; //(1 or 0): promoted to front page
$node->comment      = 1; //2 = comments on, 1 = comments off

$node->og_description   = t("OD Description");
$node->og_register  = 0;
$node->og_directory = 0;
$node->og_private   = 1;
$node->og_selective = 3;

$node = node_submit($node);
node_save($node);

// Load the user we want to add to the group (ID #2 was my test user)
$account = user_load(2);

// Add the user to the group
og_group('node', $node->nid, array(
            "entity type"       => "user",
            "entity"        => $account,
            "membership type"   => OG_MEMBERSHIP_TYPE_DEFAULT,
        ));

// Changes the users role in the group (1 = non-member, 2 = member, 3 = administrator member)
og_role_grant('node', $node->nid, $account->uid, 3);

drupal_set_message(t("Finished"));

}


Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào .
Chapabu

2
Xin lỗi nếu tôi làm sai. Tôi tin rằng tôi cung cấp câu trả lời cho những người đến đây thông qua một công cụ tìm kiếm và đang sử dụng 7.x-2.x. Bạn có thể xóa toàn bộ bài viết nếu nó không xuất hiện ở đây.
Capono

Câu trả lời của bạn là một khởi đầu tốt, nhưng chỉ ra những gì sai trong câu hỏi không đủ để điều này được coi là một câu trả lời. Vui lòng sửa lại văn bản để hữu ích hơn bằng cách cho mọi người biết phải làm gì thay vì sử dụng og_get_group và các downvote có thể sẽ được chuyển đổi thành phiếu bầu thay thế. :)
Letharion

Ok, tôi đã chỉnh sửa bài viết của mình. Tôi đoán đây là những gì bạn có ý nghĩa?
Capono

1
Điều này hoạt động tốt với 7.2.x. Như đã đề cập, 7.1.x có chức năng og_get_group này nhưng đã bị xóa trong 7.2.x. Vì vậy, đối với những người tìm kiếm sau này, xin vui lòng sử dụng này.
Đấu sĩ

1
Adding programmatically Group  content:
$node->type     = "group_post";
$node->uid      = $user->uid;
$node->title        = t("Group postNode Title");
$node->body     = t("Group Node Body");
$node->status       = 1; //(1 or 0): published or not
$node->promote      = 0; //(1 or 0): promoted to front page
$node->comment      = 1; //2 = comments on, 1 = comments off

$node->og_group_ref['und'][] = array('target_id' => $gid);

$node = node_submit($node);
node_save($node);
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.