Bagaimana secara pemrograman menambahkan pengguna ke grup di Drupal 7


10

Saya mencoba secara terprogram membuat simpul grup dan menambahkan pengguna ke grup itu di Drupal 7. Node grup dibuat dengan baik tetapi pengguna tidak ditambahkan ke grup dan saya tidak mendapatkan kesalahan. Saya kira saya menggunakan fungsi og_group secara tidak benar tetapi saya tidak yakin. Apa yang saya lakukan salah?

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

hai max - Anda mengajukan pertanyaan yang bagus. thx alot
nol

Jawaban:


13

Saya menemukan jawabannya. Itu akhirnya tidak berfungsi karena ID grup TIDAK sama dengan ID simpul untuk grup organik itu. Ini versi kerjanya:

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

Karena OG7-2.x ID simpul == ID grup, tidak perlu menggunakan og_get_group (). Dan di og_group () dan og_role_grant () tipe grup Anda adalah argumen pertama. Jadi di sini adalah kode yang sama untuk 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"));

}


Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan setelah Anda memiliki reputasi yang cukup, Anda akan dapat mengomentari posting apa pun .
Chapabu

2
Maaf jika saya melakukan sesuatu yang salah. Saya percaya saya memberikan jawaban untuk orang-orang yang datang ke sini melalui mesin pencari dan menggunakan 7.x-2.x. Anda dapat menghapus seluruh posting jika tidak masuk akal di sini.
Capono

Jawaban Anda adalah awal yang baik, tetapi menunjukkan apa yang salah dalam pertanyaan tidak cukup untuk dianggap sebagai jawaban. Harap revisi teks agar lebih membantu dengan memberi tahu orang-orang apa yang harus dilakukan daripada menggunakan og_get_group, dan downvotes kemungkinan akan dikonversi menjadi suara-up sebagai gantinya. :)
Letharion

Oke, saya mengedit posting saya. Saya kira ini yang Anda maksud?
Capono

1
Ini bekerja dengan baik dengan 7.2.x. Seperti disebutkan, 7.1.x memiliki fungsi og_get_group ini tetapi telah dihapus pada 7.2.x. Jadi bagi mereka yang mencari nanti, silakan gunakan ini.
Gladiator

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.