Score:0

จะเพิ่มย่อหน้าไปยังย่อหน้าอื่นโดยทางโปรแกรมได้อย่างไร

ธง in

ฉันมีโหนด (เช่น ธุรกิจ "บริษัท") ที่มีฟิลด์อ้างอิงย่อหน้า (สมมติว่าธุรกิจ "เซกเตอร์" ที่มีหลายฟิลด์) ย่อหน้านี้มีฟิลด์อ้างอิงถึงย่อหน้าอื่น (สมมติว่า "พนักงาน" มีหลายฟิลด์ หนึ่งในนี้คือการอ้างอิงถึงคำศัพท์อนุกรมวิธาน) ใน hook_form_submit(), กับ $รูปแบบ และ FormStateInterface $form_state ในฐานะพารามิเตอร์ ฉันต้องเชื่อมโยงย่อหน้าพนักงานหลายย่อหน้ากับย่อหน้าภาคโดยทางโปรแกรม

...
$node = โหนด::load($id);
$sector = ย่อหน้า::load($node->get('field_sector')->target_id);

/**
 * รายการคำศัพท์อนุกรมวิธานโหลดที่อื่น
 * ฉันได้เพิ่มองค์ประกอบที่กำหนดเองในการเลือกกับพนักงาน "_all"
 * เพื่อเชื่อมโยงพนักงานทั้งหมดโดยทางโปรแกรมกับ $sector
 * 
 * @var array $employees
 */
foreach ($ พนักงานเป็น $ พนักงาน) {
    $paragraph = ย่อหน้า::create([
        'ประเภท' => 'พนักงาน',
    ]);
    $paragraph->set('field_name', $employee->get('field_name')->value);
    $paragraph->set('field_age', $employee->get('field_age')->value);
    ...
    $วรรค->บันทึก();

    $sector->set('field_employee', $paragraph); //ตรงนี้ไม่รู้จะต่อภาคยังไง
    $sector->save();
}

ฉันพยายามเชื่อมโยง $employee แต่ละคนกับ $sector แต่กับ $sector->set('field_employee', $paragraph); ไวยากรณ์หรือด้วย $sector->appendItem($ย่อหน้า)ที่ใช้ได้กับโหนด แต่ใช้ไม่ได้

มีวิธีเพิ่มย่อหน้าหนึ่งไปยังอีกย่อหน้าหนึ่งโดยทางโปรแกรมหรือไม่?

การแสดงคำถามในภาพด้านล่าง เมื่อฉันบันทึกเอนทิตีด้วยตัวเลือกที่กำหนดเอง "พนักงานทั้งหมด" (_ทั้งหมด) เลือก ฉันต้องการแนบพนักงานทั้ง 4 ย่อหน้าที่เกี่ยวข้องกับย่อหน้า "ภาคที่เลือก" (ลบ _ทั้งหมด).

ขอบคุณล่วงหน้า.

แก้ไข 1

ฉันเห็นคำตอบที่แนะนำ ต่อท้ายหลายย่อหน้าโดยทางโปรแกรมไปยังฟิลด์อ้างอิงเอนทิตีบนโหนด แต่จะแก้ไขวิธีแนบย่อหน้ากับ a $โหนดไม่ใช่ย่อหน้าไปยังย่อหน้าของ $โหนด.

ฉันได้ลองสิ่งนี้ด้วย:

$employee->setParentEntity($sector, 'field_of_reference');
$employee->save();

แต่ยังไม่ต่อท้าย $ลูกจ้าง ไปที่ $ภาค.

แก้ไข 2

ฉันพยายามทำตามโพสต์ที่แนะนำแล้ว แต่คิดไม่ออกว่าจะปรับโค้ดนั้นใน a hook_form_submit().

อย่างไรก็ตาม ขอบคุณทุกคน ฉันคิดว่ามันเป็นการสร้างโค้ดที่ไม่ดีในโค้ดของฉัน

นี่คือแบบฟอร์มเอนทิตีที่มีย่อหน้าอยู่ข้างใน

Lambic avatar
ph flag
คุณได้ลอง $sector->field_employee[] = $paragraph แล้วหรือยัง?
ru flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [เพิ่มหลายย่อหน้าลงในฟิลด์อ้างอิงเอนทิตีโดยทางโปรแกรมบนโหนด](https://drupal.stackexchange.com/questions/236544/programmatically-append-multiple-paragraphs-to-entity-reference-field-on-node)
ru flag
คุณได้พยายามไม่บันทึกเอนทิตีย่อย เฉพาะเอนทิตีหลักหรือไม่
leymannx avatar
ne flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [สร้างย่อหน้าที่ซ้อนกันโดยทางโปรแกรม](https://drupal.stackexchange.com/questions/292832/create-nested-paragraphs-programmatically)
in flag
จะลองทำตามกระทู้นี้ครับ บางทีคุณอาจพูดถูก มันเป็นปัญหาที่เกี่ยวข้องกับเอนทิตีที่จะต่อท้ายย่อหน้า ขอบคุณทุกคน
Score:1
ธง cn

ปัญหาเริ่มต้นจากวิธีที่คุณโหลดย่อหน้า คุณไม่สามารถโหลดได้เหมือนเอนทิตีแบบสแตนด์อโลน:

$sector = ย่อหน้า::load($node->get('field_sector')->target_id);

ให้โหลดผ่านฟิลด์อ้างอิงแทน:

$sector = $node->get('field_sector')->entity;

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

ดู สร้างย่อหน้าที่ซ้อนกันโดยทางโปรแกรม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา