วิธีการเพิ่มผู้ใช้ไปยังกลุ่มใน 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"));
}

สวัสดีคุณถามคำถามที่ดี ขอบคุณมาก
ศูนย์

คำตอบ:


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 และ downvotes นั้นน่าจะถูกเปลี่ยนเป็นโหวตมากขึ้นแทน :)
Letharion

ตกลงฉันแก้ไขโพสต์ของฉัน ฉันเดาว่านี่คือสิ่งที่คุณหมายถึงอะไร
Capono

1
มันใช้งานได้ดีกับ 7.2.x ดังที่กล่าวถึง 7.1.x มีฟังก์ชัน og_get_group นี้ แต่ถูกลบออกใน 7.2.x ดังนั้นสำหรับผู้ที่มองหาในภายหลังโปรดใช้สิ่งนี้
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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.