ฉันจะลบรายการออกจากรายการค่าที่อนุญาตของฟิลด์เลือกที่มีข้อมูลสำหรับค่าได้อย่างไร


16

ฉันสร้างประเภทเนื้อหาที่มีฟิลด์รายการ / เลือกตัวเลือกแล้วฉันได้ป้อนคู่คีย์ | ค่าตามที่จำเป็นเพื่อให้รายการเลือกทำงาน

มีการป้อนข้อมูลและมีการตัดสินใจว่าจะไม่ใช้ข้อกำหนดบางอย่างอีกต่อไปและควรลบทิ้ง

อย่างไรก็ตามเมื่อพยายามลบคำดังกล่าวฉันได้รับข้อผิดพลาดต่อไปนี้:

Allowed values list: some values are being removed while currently in use.

เห็นได้ชัดว่าในชีวิตของโครงการค่าจะเปลี่ยนไป การลบไอเท็มในทางปฏิบัติเมื่อโหนดเชื่อมโยงกับข้อกำหนดที่ระบุไว้คืออะไร

นี่เป็นเรื่องที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้:

https://drupal.org/node/1653012

มันอ้างอิงปลั๊กอิน d6 และแพทช์ที่มีเล่ห์เหลี่ยมบางอย่างที่ฉันไม่ต้องการใช้ หากในที่สุดฉันต้องใช้แพทช์เพื่อลบการตรวจสอบความถูกต้องในฟิลด์นั้นในที่สุดจะมีอันตรายในการทิ้งรายการเหล่านั้นไว้บนโหนดที่พวกเขาเกี่ยวข้องหรือไม่

อัปเดตฉันพบปัญหานี้อีกครั้งกับลูกค้ารัฐบาลซึ่งในช่วง 7 ปีที่ผ่านมาที่มีเว็บไซต์ Drupal นั้นมี 50 รัฐและดินแดนในรายการที่เลือก ตอนนี้นโยบายมีการเปลี่ยนแปลงและไม่จำเป็นต้องรวมดินแดนอีกต่อไป ความสามารถในการลบรายการออกจากรายการที่เลือกมีความสำคัญและทำให้ฉันได้รับรางวัล

ฉันกำลังมองหาโซลูชันที่ปลอดภัยเพื่อให้สามารถลบรายการออกจากรายการที่เลือก สิ่งที่ฉันไม่รู้คือถ้าโซลูชันนั้นควรอัปเดตโหนดใด ๆ เนื่องจากฉันไม่แน่ใจว่าวิธีการเก็บค่าฟิลด์ที่สัมพันธ์กับเนื้อหาทั้งหมดของโหนด

ฉันมีความสุขกับการแก้ปัญหา SQL บริสุทธิ์เพื่อให้ทำงานใน MySQL; หรือฉันกำลังมองหาโมดูล


3
เห็นได้ชัดว่าในชีวิตของโครงการค่าจะเปลี่ยนไป ฉันจะโต้แย้งว่า - ค่าสำหรับรายการเลือกแบบคงที่ควรกำหนดไว้ในช่วงเริ่มต้นของโครงการ หากคุณต้องการให้ยืดหยุ่นคุณควรใช้การอ้างอิงคำศัพท์แทนรายการคงที่ รายการคงที่มีไว้สำหรับสิ่งต่าง ๆ เช่นเพศ (ชาย / หญิง) ซึ่งนอกจากเราจะมีการเปลี่ยนแปลงอย่างรุนแรงในสิ่งต่าง ๆ ไม่น่าจะเปลี่ยนแปลงได้ตลอดเวลาในไม่ช้า และถ้าไม่ก็จะมีการเพิ่มการไม่เอาออก เมื่อใดก็ตามที่ฉันทำสิ่งนี้ 'ผิดพลาด' ฉันพบวิธีที่ดีที่สุดในการสำรองข้อมูลอยู่เสมอคือเรียกใช้ข้อความค้นหาด้วยตนเองบนข้อมูล
Clive

1
คุณต้องการทำให้รายการนี้เป็นแบบไดนามิกหรือไม่ เป็นแบบไดนามิกในการสร้างและการลบ
M ama D

1
ใช่ฉันเดาว่าแค่ลงความเห็นผู้ผลิตรถยนต์จะเป็นประเภทโหนดหรือคำศัพท์สำหรับเว็บไซต์ใด ๆ ที่ฉันจะสร้าง เนื่องจากผู้ผลิตเป็นหมวดหมู่ของรถยนต์ (หรือหมวดหมู่ของรถยนต์ที่มีคนซ่อม) จึงเหมาะสมกับฉันมากกว่าประเภทเนื้อหา แต่ฉันรู้ว่ามันไม่ได้ช่วย ... ฉันจะระวังการทิ้งข้อมูลเด็กกำพร้าไว้ในฐานข้อมูลมันยากมากที่จะพูดว่าเอฟเฟกต์ที่อาจมีโดยไม่รู้ว่าสิ่งที่ติดตั้งบนไซต์ของคุณและวิธีการกำหนดค่า
Clive

1
เกิดอะไรขึ้นกับ views_bulk_operations
donquixote

1
เฮ้ไม่มีคำตอบใด ๆ ที่มี upvotes เลย: /
tenken

คำตอบ:


7

ฉันทำอะไรแบบนี้เมื่อเร็ว ๆ นี้ด้วยวิธีการดังต่อไปนี้

  1. เพิ่มค่าใหม่ที่อนุญาต
  2. เพิ่มการตั้งค่าเพื่อกำหนดค่า "ใช้งานอยู่"
  3. กรองค่า "ไม่ใช้งาน" จากการแสดงบนแบบฟอร์ม

เช่น:

/**
 * Admin settings form
 */
function MODULE_admin_settings(){

  $form = array();

  // Select active preferences for display
  $field = field_info_field('field_preferences');
  $preferences = list_allowed_values($field);
  $form['field_preferences_active'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Active preferences'),
    '#options' => $preferences,
    '#description' => t('Select the preferences available for user selection.'),
    '#default_value' => variable_get('field_preferences_active', array()),
  );

  return system_settings_form($form);

}

/**
 * Implements hook_field_attach_form
 */
function MODULE_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {

  // Filter out inactive preferences
  if(isset($form['field_preferences'])){
    $preferences = variable_get('field_preferences_active', array());
    foreach($preferences as $key => $preference){
      // If this preference isn't checked, but is set in the field values, unset it.
      if(empty($preference) && isset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key])){
        unset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key]);
      }
    }
  }

}

วิธีนี้ข้อมูลดั้งเดิมจะถูกเก็บไว้เพื่อการอ้างอิงแบบฟอร์มตรวจสอบความถูกต้องและความสมบูรณ์ของข้อมูลยังคงเหมือนเดิม


1
ตัวเลือกนี้ไม่ใช่การทำลายโครงสร้าง (กล่าวคือซ่อนเนื้อหามากกว่าลบ) และอาจเป็นจุดเริ่มต้นที่ดีที่สุดจนกว่าคุณจะสามารถกำหนดแนวทางปฏิบัติที่ดีที่สุดสำหรับวิธีจัดการกับเอนทิตีที่มีตัวเลือกที่ล้าสมัย
mpdonadio

3

อย่างที่ฉันทราบข้อมูลของฟิลด์ทั้งหมดจะถูกเก็บไว้ใน 2 ตาราง: field_data_field_FIELDNAME และ field_revision_field_FIELDNAME และฉันพบการยืนยันความคิดของฉันที่นี่: /programming//a/7773117/1300562

ดังนั้นเพื่อลบค่าฟิลด์ที่ไม่จำเป็นคุณต้องลบค่าเหล่านี้ออกจากตารางที่กล่าวถึงข้างต้นแล้วลบออกจากรายการค่าที่อนุญาต

ขั้นตอนที่ 1.

$values_to_remove = array('value1', 'value2'); // an array of unnecessary values
$fieldname = 'FIELDNAME'; // name of your field. For example,
                          // 'territory' for field with machine name 'field_territory'
$entity_type = 'node'; // it's 'node' in your case, but it can be 'taxonomy_term' or something else

db_delete('field_data_field_' . $fieldname)
  ->condition('entity_type', $entity_type)
  ->condition('field_' . $fieldname . '_value', $values_to_remove)
  ->execute();

db_delete('field_revision_field_' . $fieldname)
  ->condition('entity_type', $entity_type)
  ->condition('field_' . $fieldname . '_value', $values_to_remove)
  ->execute();

ขั้นตอนที่ 2
ลบคู่คีย์ | ค่าที่ไม่จำเป็นในหน้าการตั้งค่าฟิลด์และส่งแบบฟอร์มเพื่อบันทึกการเปลี่ยนแปลง
ควรล้างแคชโดยอัตโนมัติหลังจากนั้น แต่ถ้าคุณยังสามารถเห็นค่าของฟิลด์ที่ถูกลบบนหน้าโหนดให้ล้างแคชด้วยตนเอง

ป.ล. เมื่อเร็ว ๆ นี้ฉันประสบปัญหาที่คล้ายกันและตอนนี้ฉันชอบที่จะใช้ฟิลด์ประเภท "การอ้างอิงคำศัพท์" หรือ (ดียิ่งขึ้น) "การอ้างอิงเอนทิตี" แทนที่จะเป็นรายการค่าข้อความ เมื่อใช้ฟิลด์อ้างอิงคุณสามารถสร้างคำศัพท์แยกต่างหากสำหรับแต่ละฟิลด์และเพียงสร้าง / แก้ไข / ลบคำศัพท์ได้ตลอดเวลา


ถ้าเขตข้อมูลนั้นถูกทำซ้ำแบบสอบถามเหล่านั้นจะไม่ปรับเดลตาสำหรับข้อมูลที่เหลือ
mpdonadio

1

ก่อนอื่นให้ตรวจสอบว่าคุณมีค่าที่อนุญาตในฟิลด์หรือไม่? หากคุณเลือกตัวเลือกอื่นจะไม่ได้รับการตรวจสอบ ดังนั้นลองลบค่าออกจากแท็บการตั้งค่าฟิลด์ก่อน

อีกทางเลือกหนึ่งคุณมี 2 ตัวเลือก:


1

ลบค่าทั้งหมดที่คุณใส่ไว้ในรายการค่าที่อนุญาตที่ใช้งานโดยบัญชีผู้ใช้ ตัวอย่างเช่นคุณสามารถเรียกใช้แบบสอบถาม SQL เพื่อค้นหาสิ่งเหล่านี้:

SELECT * FROM field_data_field_MYFIELDNAME WHERE entity_type = 'user' and value = 'MY VALUE'

หรือสร้างมุมมองผู้ใช้ที่แสดงให้คุณเห็นว่าบัญชีผู้ใช้ใดมีค่าที่คุณต้องการลบออกจากรายการค่าที่อนุญาต


2

หากคุณไม่ต้องการลบค่าออกจากเขตข้อมูลการแฮ็คสามารถทำได้

คำเตือนนี่ไม่ใช่วิธีแก้ปัญหาที่แนะนำสำหรับการผลิตและคุณควรรู้ว่าคุณกำลังทำอะไร!

  1. ค้นหาและแก้ไขโมดูล / field / field.module
  2. ค้นหาฟังก์ชัน field_has_data () และเพิ่มreturn TRUE;ในบรรทัดแรกของฟังก์ชัน

    function field_has_data($field) {
      return FALSE; // HACK !!!
      $query = new EntityFieldQuery();
  3. บันทึกฟิลด์อีกครั้งด้วยค่าที่คุณต้องการ
  4. ลบแฮ็คทันทีที่คุณทำ

0

ฉันคิดว่าคุณสามารถทำได้โดยใช้โมดูลการดำเนินการจำนวนมากของ Views

  1. เพิ่มตัวเลือกใหม่ในฟิลด์ที่คุณต้องการแทนที่ ตัวอย่างเช่น: na | NA
  2. สร้างโหนดมุมมองเพื่อแสดงรายการที่มีฟิลด์นั้น
  3. เพิ่มฟิลด์ "การทำงานเป็นกลุ่ม: เนื้อหา" ในมุมมองนั้น
  4. ทำเครื่องหมาย "แก้ไขค่าเอนทิตี" และ "แสดงโทเค็น avaiable" (เลือกทั้งหมดในค่าที่แสดง)
  5. เพิ่มฟิลด์ที่คุณต้องการเปลี่ยนในตัวกรองเกณฑ์และ "เปิดเผย" ที่ตัวกรอง
  6. กำหนด url Path บนมุมมองนั้น
  7. ไปที่หน้ามุมมองนั้นและเปลี่ยน
  8. ตอนนี้ใช้คุณสมบัติการเปิดเผยและการดำเนินงานเพื่อเปลี่ยนตัวเลือกฟิลด์
  9. เสร็จสิ้น

0

นี่คือการปรับปรุงคำตอบ HL ที่ฉันคิดว่าดีที่สุด:

ในการสรุปคุณต้องกำหนดค่าใหม่ให้กับเนื้อหาที่มีค่า "เก่า" กำหนดไว้สำหรับฟิลด์ที่คุณเลือก

นอกเหนือจากการดำเนินการเป็นกลุ่ม Viewsคุณจะต้องติดตั้งและเปิดใช้งานมุมมองการดูแลระบบโมดูลด้วยโมดูลนี้คุณจะได้รับมุมมองแบบทันทีที่เปิดใช้งานการดำเนินการเป็นกลุ่ม (ดูผู้ดูแลระบบ / เนื้อหาเมื่อเปิดใช้งาน) แล้ว:

1) ไปที่ผู้ดูแลระบบ / โครงสร้าง / มุมมองมุมมอง "การดูแลระบบ: โหนด" แก้ไข

2) เพิ่มการแสดงหน้าใหม่สำหรับมุมมองโดยใช้ปุ่ม "เพิ่ม -> หน้า" ด้านบน

3) กำหนดเส้นทางไปยังจอแสดงผลใหม่: ตัวอย่างผู้ดูแลระบบ / เนื้อหา / กำหนดเอง

4) เพิ่มตัวกรองใหม่สำหรับฟิลด์ที่คุณเลือก: ตัวดำเนินการเลือก "เป็นหนึ่งใน" จากนั้นเลือกตัวเลือกทั้งหมดที่คุณต้องการลบ

5) บันทึกมุมมอง

6) ไปที่ผู้ดูแลระบบ / เนื้อหา / กำหนดเองตอนนี้คุณเห็นเนื้อหาทั้งหมดที่คุณต้องการแก้ไขเป็นกลุ่ม (เปลี่ยนค่าสำหรับฟิลด์ที่คุณเลือก)

7) เลือกแถวทั้งหมดโดยคลิกช่องทำเครื่องหมายแรกที่ด้านซ้ายของตาราง (หากมีมากกว่าหนึ่งหน้าให้เลือกปุ่มที่จะพูดว่า "เลือกแถว X ทั้งหมดในมุมมองนี้")

8) เลือกการทำงาน "เปลี่ยนค่า" และกด "ดำเนินการ"

9) สำหรับฟิลด์ที่คุณเลือกให้เลือกค่าใหม่เพื่อเขียนทับฟิลด์ที่คุณต้องการลบ

10) เลือกช่องทำเครื่องหมายสำหรับฟิลด์ที่เลือก

11) คลิกถัดไปและคุณทำเสร็จแล้ว


0

ดูเหมือนว่าปัญหา Drupal ของคุณขึ้นอยู่กับปัญหาข้อมูลที่ลึกกว่า: เกิดอะไรขึ้นกับเอนทิตีที่กำลังใช้ค่ารายการที่เสื่อมค่า คำถามนี้อยู่ที่รากของข้อความแสดงข้อผิดพลาดที่ Drupal ส่งถึงคุณ

ให้ดูตัวอย่างรัฐ / เขตของคุณอย่างละเอียดยิ่งขึ้น ลูกค้าของคุณใช้ระบบที่ปฏิบัติต่อรัฐและดินแดนในลักษณะเดียวกันมานานหลายปีและได้สร้างกลุ่มโหนดจำนวนมากที่มีทั้งรัฐและดินแดน จากนั้นวันหนึ่งอำนาจที่ตัดสินใจว่าดินแดนจะต้องได้รับการจัดการแตกต่างกันและแบบเลื่อนลงสำหรับการกำหนดภูมิภาคไม่ควรมีดินแดนอีกต่อไป ยิ่งใหญ่ เพียงสร้างมุมมองที่ใช้ตัวกรองมาตรฐานเพื่อแสดงรายการของโหนดอาณาเขตทั้งหมดและใช้การดำเนินการจำนวนมากของ Views เพื่อเปลี่ยนค่าภูมิภาคทั้งหมดเป็น ... อะไร ... บางรัฐที่ 51 เรียกว่าบางที ชะตากรรมของดินแดนเป็นคำถามที่ร้ายแรงมาก โซลูชันของคุณต้องมีวิธีการรักษาหรือย้ายสถานะอาณาเขต คุณอาจต้องสร้างฟิลด์รายการใหม่ที่เรียกว่า 'อาณาเขต'

คุณจะต้องใช้กฎกับการดูจำนวนมากเพื่อดำเนินการเปลี่ยนแปลงเหล่านี้ หากคุณไม่รู้จักกฎมากนักโปรดใช้เวลาสักครู่เพื่อเรียนรู้วิธีการใช้งาน กฎให้ความสามารถในการจัดการข้อมูลตามทริกเกอร์เงื่อนไขและการกระทำ หลังจากเรียนรู้เกี่ยวกับกฎคุณอาจพบว่าคำตอบที่คุณมองหาจะนำเสนอตัวเองอย่างสังหรณ์ใจ โดยทั่วไปคุณจะต้องสร้างกฎซึ่งจะถูกเรียกใช้โดยการดำเนินการจำนวนมากซึ่งจะกำหนดเป้าหมายพื้นที่ทั้งหมดและลบกำหนดใหม่เปลี่ยนชื่อหรือแยกพวกเขาออกจากเนื้อหาหลัก กฎจะต้องสามารถเก็บสถานะดินแดนในบางวิธีในขณะเดียวกันในเวลาเดียวกันให้ตั้งค่าสถานะแบบเลื่อนลงของสถานะเป็น 'อื่น ๆ ' หรือ 'N / A' นี่อาจเป็นสิ่งที่จำเป็นทั้งหมด มิฉะนั้น...

หลังจากการมอบหมายใหม่เสร็จสิ้นควรดำเนินการอย่างง่าย ๆ เพื่อแก้ไขฟิลด์รายการดั้งเดิมและลบชื่ออาณาเขต อย่างไรก็ตามหากระบบยังไม่อนุญาตให้คุณเปลี่ยนแปลงรายการคุณอาจต้องสร้างฟิลด์รายการใหม่จากนั้นใช้การดำเนินการและการใช้งานจำนวนมากของมุมมองเพื่อตรวจสอบค่าสถานะปัจจุบันทั้งหมดและกำหนดใหม่ให้กับรายการใหม่ กฎสามารถทำงานกับ Views Bulk Operations เพื่อกำหนดเป้าหมายโหนดที่เกี่ยวข้องทั้งหมดและดำเนินการตามค่าฟิลด์ การตั้งค่าของฟิลด์รายการใหม่ตามค่าของฟิลด์รายการที่มีอยู่สำหรับกลุ่มของโหนดนั้นง่ายเมื่อคุณใช้กฎ

โปรดจำไว้ว่าถ้า Drupal ให้ปัญหากับการดำเนินการให้ล้างแคชเสมอก่อนที่จะพิจารณาทางเลือกที่ยาก


0

ฉันจะสมมติว่าลูกค้าของคุณต้องการให้เนื้อหาดั้งเดิมเป็นค่าดั้งเดิมซึ่งหมายถึงการเปลี่ยนรายการที่เลือกจะทำลายข้อมูลก่อนหน้าได้อย่างมีประสิทธิภาพ หากนั่นไม่ใช่ข้อกังวลคำตอบอื่นใดก็น่าจะใช้ได้ อย่างไรก็ตามหากเป็นเช่นนั้นคุณจะไม่สามารถเปลี่ยนรายการที่เลือกได้โดยไม่สูญเสียประวัติข้อมูล ฉันอาจใช้วิธีที่ง่ายกว่านี้มากเพื่ออนุญาตให้มีข้อมูลประวัติในขณะที่ทำให้ไซต์เป็นหลักฐานในอนาคตอีกเล็กน้อย - ฉันขอแนะนำให้ใช้การอนุญาตในฟิลด์:

* ตั้งค่าฟิลด์ใหม่สำหรับรายการที่เลือกโดยใช้ taxonomy แทนข้อมูลสแตติก

* ตั้งค่าการอนุญาตฟิลด์สำหรับรายการเลือกที่มีอยู่เป็น VIEW แต่ไม่แก้ไขโดยทุกคนยกเว้นผู้ดูแลระบบ

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

ฉันแนะนำสิ่งนี้ (ยุ่งอย่างที่มันอาจจะฟัง) เพราะการลบข้อมูลลบประวัติและนั่นอาจเป็นการทำลายล้างในระยะยาว คุณสามารถใช้ css เพื่อซ่อนฟิลด์เก่าในโหนดแก้ไขและขอเพื่อซ่อนมันสำหรับเนื้อหาใหม่ (ที่มันไม่มีชุดค่า) ด้วยวิธีนี้มันจะแสดงเฉพาะเนื้อหาดั้งเดิมเท่านั้น

แน่นอนว่าคุณสามารถทำขั้นตอนต่อไปด้วยโมดูล one-off ที่กำหนดเองเพื่อคัดลอกข้อมูลจากรายการเลือกเก่าไปยังอนุกรมวิธานใหม่


0

สคริปต์ที่ง่ายต่อการช่วยเหลือ! เราอัปเดตข้อมูลภาคสนามและตารางการแก้ไขภาคสนามและแทนที่ค่าเก่าด้วยรายการใหม่ก่อนที่จะเปลี่ยนการตั้งค่าฟิลด์ด้วยตนเอง

หากเรามีบางอย่างเช่นนี้ในการตั้งค่าฟิลด์ปัจจุบัน:

&date=today|today
&date=last2days|last2days

และต้องการแทนที่ด้วยสิ่งต่อไปนี้:

date=today|today
date=last2days|last2days

เราเรียกใช้สคริปต์ drush ก่อนแล้วเปลี่ยนการตั้งค่าฟิลด์ใน UI ของผู้ดูแลระบบ

หมายเหตุ:field_foo_barรหัสนี้สำหรับข้อมูลที่มีชื่อเครื่อง

    $field_name = 'foo_bar';

    print "for {$field_name}...\n";

    replace_field("&date=today", "date=today", $field_name);

    replace_field("&date=last2days", "date=last2days", $field_name);

    function replace_field($old_value, $new_value, $field_name, $entity_type='node') {
      print "Replacing {$old_value} with {$new_value}...\n";
      $data_count = replace_options_data_field($field_name, $entity_type, $old_value, $new_value);
      $revision_count = replace_options_revision_field($field_name, $entity_type, $old_value, $new_value);
      print $data_count + $revision_count . " entries replaced.\n";
    }

    function replace_options_data_field($field_name, $entity_type, $old_value, $new_value) {
      $num_updated = db_update('field_data_field_' . $field_name)
        ->fields(array(
                   'field_' . $field_name . '_value' => $new_value,
                 ))
        ->condition('entity_type', $entity_type)
        ->condition('field_' . $field_name . '_value', $old_value)
        ->execute();
      return $num_updated;
    }

function replace_options_revision_field($field_name, $entity_type, $old_value, $new_value) {
  $num_updated = db_update('field_revision_field_' . $field_name)
    ->fields(array(
               'field_' . $field_name . '_value' => $new_value,
             ))
    ->condition('entity_type', $entity_type)
    ->condition('field_' . $field_name . '_value', $old_value)
    ->execute();
  return $num_updated;
}

0

ฉันใช้คำแนะนำที่ 2 ของ kenorb และมันทำงานเพื่ออัพเดทรายการของค่าในฟิลด์ Drupal 7.52, Profile2 7.x-1.3 ดังนั้นหากคุณได้รับคำเตือนของ drupal:“ รายการค่าที่อนุญาต: บางค่าจะถูกลบออกในขณะที่กำลังใช้งานอยู่” ต่อไปนี้อนุญาตให้ฉันลบค่าออกจากฟิลด์ (profile2) โดยไม่ต้องลบหรือแทนที่ในฐานข้อมูล

ในไดเรกทอรีรากของ Drupal core มีโฟลเดอร์ชื่อโมดูลและไฟล์ที่จะแก้ไขจะอยู่ที่: modules / field / field.module นี่คือไฟล์สำคัญคุณต้องย้อนกลับการเปลี่ยนแปลงของคุณเมื่อทำการอัพเดทค่า ฉันเอาไซต์ออฟไลน์มาแทนที่บล็อกโค้ดต่อไปนี้ชั่วคราว (รูท drupal) / โมดูล / ฟิลด์ / field.module

function field_has_data($field) {
  $query = new EntityFieldQuery();
  $query = $query->fieldCondition($field)
    ->range(0, 1)
    ->count()
    // Neutralize the 'entity_field_access' query tag added by
    // field_sql_storage_field_storage_query(). The result cannot depend on the
    // access grants of the current user.
    ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT');

  return (bool) $query
    ->execute() || (bool) $query
    ->age(FIELD_LOAD_REVISION)
    ->execute();
}

ด้วยความแน่นอน

function field_has_data($field) { 
    return FALSE; // hack 
    $query = new EntityFieldQuery();
}

และ drupal หยุดบ่นและฉันก็สามารถแก้ไขรายการได้ (ในกรณีของฉันมันเป็นคณาจารย์ในรายการค่านิยมที่ออกจากมหาวิทยาลัย แต่ยังคงเกี่ยวข้องกับบันทึกของนักเรียนในฐานะที่ปรึกษาอาจารย์ที่ปรึกษา ฯลฯ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.