Drupal 7에서 프로그래밍 방식으로 사용자를 그룹에 추가하는 방법


10

프로그래밍 방식으로 그룹 노드를 만들고 Drupal 7에서 해당 그룹에 사용자를 추가하려고합니다. 그룹 노드가 제대로 생성되었지만 사용자가 그룹에 추가되지 않아 오류가 발생하지 않습니다. og_group 함수를 잘못 사용하고 있다고 생각하지만 확실하지 않습니다. 내가 무엇을 잘못하고 있지?

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"));
}

안녕 최대-당신은 좋은 질문을 제기했습니다. thx 많은
0시

답변:


13

나는 그것을 알아. 그룹 ID가 해당 유기 그룹의 노드 ID와 같지 않기 때문에 작동하지 않았습니다. 작동하는 버전은 다음과 같습니다.

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

OG7-2.x 노드 ID == 그룹 ID이므로 og_get_group ()을 사용할 필요가 없습니다. 그리고 og_group () 및 og_role_grant ()에서 그룹 유형이 첫 번째 인수입니다. 여기 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"));

}


이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 .
Chapabu

2
내가 잘못했다면 죄송합니다. 나는 검색 엔진을 통해 여기에 와서 7.x-2.x를 사용하는 사람들에게 답을 제공한다고 생각합니다. 여기에 글이 나타나지 않으면 전체 게시물을 삭제할 수 있습니다.
Capono

귀하의 답변은 좋은 출발이지만, 질문에서 잘못된 것을 지적하는 것만으로는 이것이 답변으로 간주되기에 충분하지 않습니다. 사람들에게 og_get_group을 사용하는 대신해야 할 일을 말함으로써보다 유용한 텍스트를 수정하십시오. :)
Letharion

좋아, 내 게시물을 편집했습니다. 나는 이것이 당신이 의미하는 것 같아요?
Capono

1
이것은 7.2.x와 잘 작동합니다. 언급 한 바와 같이 7.1.x에는이 og_get_group 함수가 있지만 7.2.x에서 제거되었습니다. 나중에 찾는 분은 이것을 사용하십시오.
검투사

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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.