Score:1

เหตุใดเงื่อนไขที่กำหนดเองจึงไม่มีเอนทิตีหลัก

ธง us

ฉันกำลังใช้:

  • ดรูพัล 9.1.7
  • การค้า 2.24

ฉันกำลังพยายามสร้างเงื่อนไขที่กำหนดเอง (อิงจาก https://docs.drupalcommerce.org/commerce2/developer-guide/core/conditions). อย่างไรก็ตาม เอนทิตีหลักจะเป็นค่า NULL เสมอ ดูเหมือนว่าเอนทิตีหลักจะทำงานเมื่อฉันระบุเท่านั้น commerce_order เช่น เอนทิตี_ประเภท เท่านั้น แต่ฉันต้องการ commerce_order_item. ParentEntityAwareอินเทอร์เฟซ และ ParentEntityAwareTrait กำลังใช้งานอยู่ การดีบักแสดงว่า:

  ฟังก์ชันสาธารณะประเมิน (EntityInterface $entity) {
    $this->assertEntity($entity);
    /** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item */
    $order_item = $เอนทิตี;
    /** @var \Drupal\commerce_promotion\Entity\PromotionInterface $promotion */
    $promotion = $this->parentEntity;
    // การส่งเสริมการขาย $ เป็นโมฆะ
    // โค้ดที่เหลือ
  }

โปรโมชั่น $ เป็นโมฆะเสมอ

คำอธิบายประกอบ:

 * @CommerceCondition(
 * id = "myproj_product_condition",
 * label = @Translation("ตัวเลือกสินค้า"),
 * หมวดหมู่ = @Translation("ตัวเลือกสินค้า"),
 *entity_type = "commerce_order_item",
 * parent_entity_type = "commerce_promotion",
 * น้ำหนัก = 9,
 * )
apaderno avatar
us flag
ฉันดูรหัสที่ใช้โดยโมดูล *Commerce Core* ฉันไม่สามารถบอกได้ว่าทำไม `$this->parentEntity` จึงเป็น `NULL` แต่คำอธิบายอาจอยู่ใน [`Promotion::getConditions()`](https://git.drupalcode.org/project/commerce/-/ blob/8.x-2.x/modules/promotion/src/Entity/Promotion.php#L271), [`โปรโมชั่น::สมัคร()`](https://git.drupalcode.org/project/commerce/ -/blob/8.x-2.x/modules/promotion/src/Entity/Promotion.php#L590) และ [`Promotion::applies()`](https://git.drupalcode.org/project /commerce/-/blob/8.x-2.x/modules/promotion/src/Entity/Promotion.php#L554).
apaderno avatar
us flag
ดูความคิดเห็นเกี่ยวกับ `Promotion::applies()`: *กรองเงื่อนไขในกรณีที่มี **เงื่อนไขรายการสั่งซื้อ** เหลืออยู่ (ซึ่งได้ย้ายไปอยู่ในเงื่อนไขข้อเสนอ)* (เน้นเป็นของฉัน)
Codium avatar
us flag
@apaderno ฉันกำลังแก้ไขข้อบกพร่องและแสดงว่าเงื่อนไขของฉัน `evaluate()` วิธีการทำงานก่อน `\Drupal\commerce\Plugin\Commerce\Condition\ParentEntityAwareTrait::setParentEntity` ดังนั้นนั่นคือสาเหตุที่พาเรนต์เอนทิตีเป็น NULL แปลก.
apaderno avatar
us flag
`setParentEntity()` ไม่ได้ถูกเรียกใช้เสมอไป สำหรับสิ่งที่ฉันเห็น การอ่านโค้ด คลาสเดียวที่เรียกใช้เมธอดนั้นคือ 'Promotion' แต่สำหรับเงื่อนไข *commerce_order* และ 'PaymentGateway'
apaderno avatar
us flag
ฉันไม่เข้าใจว่า *ซึ่งถูกย้ายไปยังเงื่อนไขข้อเสนอ* หมายถึงอะไรในความคิดเห็นโค้ดที่ฉันยกมาก่อนหน้านี้ จะเกิดอะไรขึ้นเมื่อโมดูลใช้เงื่อนไขที่เกี่ยวข้องกับคลาส 'Promotion' แต่ขอให้ได้รับอินสแตนซ์ 'OrderItem' เป็นอาร์กิวเมนต์ มีรหัสที่กำหนดเงื่อนไขเหล่านั้นให้กับอินสแตนซ์ของคลาส 'OfferItem' หรือ 'Offer' แทนที่จะเป็นคลาส 'Promotion' ตามที่คำอธิบายประกอบของคลาสกล่าวหรือไม่
apaderno avatar
us flag
นั่นเป็นเหตุผลว่าทำไมฉันถึงไม่โพสต์คำตอบ: ฉันไม่ชัดเจนสำหรับฉันว่ารหัส Commerce Core กำลังทำอะไร ไม่ใช่จุดที่จะแสดงว่ารหัสใดกำลังกำหนดเงื่อนไขให้กับอินสแตนซ์ของคลาสที่แตกต่างจากที่ร้องขอ ในคำอธิบายประกอบ
Score:0
ธง in

เอกสารระบุสิ่งนี้:

(หากคุณต้องการให้เงื่อนไขมีผลกับเอนทิตีระดับบนหลายประเภท คุณสามารถปล่อยให้คุณสมบัตินี้ไม่มีการตั้งค่า อย่างไรก็ตาม คุณจะต้องระมัดระวังในการปรับใช้เมธอด evaluation() เพื่อตรวจสอบประเภทของเอนทิตีระดับบนก่อนที่จะเข้าถึงพาเรนต์ใด ๆ วิธีการของกิจการ)

ดูเหมือนว่าคำอธิบายประกอบจะเป็น:

 * @CommerceCondition(
 * id = "myproj_product_condition",
 * label = @Translation("ตัวเลือกสินค้า"),
 * หมวดหมู่ = @Translation("ตัวเลือกสินค้า"),
 *entity_type = "commerce_order_item",
 * น้ำหนัก = 9,
 * )

และยืนยันว่า:

$promotion = $this->parentEntity;

ถ้า (ตรวจสอบ $promotion เป็นเอนทิตีบางประเภท) {
 ...
}

ล้างแคชของคุณหลังจากอัปเดตคำอธิบายประกอบ (และอาจต้องสร้างกฎใหม่หรือไม่ ไม่แน่ใจว่าจะมีผลหรือไม่) นอกเหนือจากนั้นอาจเป็นข้อผิดพลาดใน Drupal Commerce

apaderno avatar
us flag
คำอธิบายประกอบที่ใช้จาก OP นั้นไม่ผิด เป็นคำอธิบายประกอบแบบเดียวกับที่ใช้โดย /OrderItemQuantity.php#L29) ซึ่งใช้ `$promotion = $this->parentEntity;` ใน [`evaluate()`](https://git.drupalcode.org/project/commerce/-/blob /8.x-2.x/modules/promotion/src/Plugin/Commerce/Condition/OrderItemQuantity.php#L81) วิธีการ ข้อผิดพลาดไม่ได้ตั้งค่าทั้ง *entity_type* และ *parent_entity_type*; ถ้ามีอะไรผิดพลาด ก็เป็นอย่างอื่น
Kevin avatar
in flag
ประเภทเอนทิตีในตัวอย่างนั้นแตกต่างกันหรือไม่ `commerce_order` เทียบกับ `commerce_order_item`?
apaderno avatar
us flag
ฉันหมายความว่าปัญหานี้ควรได้รับการตรวจสอบเพิ่มเติม เพื่อทำความเข้าใจว่าสามารถใช้ `$this->parentEntity` ได้ตลอดเวลาหรือไม่ และมีทางเลือกอื่นหรือไม่
Codium avatar
us flag
@apaderno ฉันเห็นเพียงตัวอย่างของ commerce_order + commerce_promotion แต่เงื่อนไขสามารถทำงานร่วมกับ commerce_order_item ได้เช่นกัน ตามเอกสาร
apaderno avatar
us flag
@Codium ทำได้ แต่ในกรณีนั้น เงื่อนไขไม่ได้ถูกตั้งค่าเป็น `parentEntity` ฉันคิดว่าฉันเข้าใจว่าทำไมมันถึงเกิดขึ้น เมื่อดูวิธีการที่ฉันเชื่อมโยงไว้ในความคิดเห็นอื่นที่ฉันโพสต์ แต่ฉันก็ยังพบบางสิ่งที่ไม่ชัดเจน
Codium avatar
us flag
@apaderno ฉันกำลังตรวจสอบเพิ่มเติม ขอบคุณสำหรับความช่วยเหลือของคุณ

โพสต์คำตอบ

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