วิธีการเปลี่ยนค่าฟิลด์ที่กำหนดเองเดียวในมุมมอง?


11

ฉันมีมุมมองกับฟิลด์ทั่วโลก: ข้อความที่กำหนดเองซึ่งได้รับการแก้ไขเป็นลิงก์ ฉันต้องการเปลี่ยนโทเค็นการแทนที่เพื่อสร้างลิงก์นี้ขึ้นอยู่กับค่าของฟิลด์อื่น

พยายามแก้ไขสิ่งนี้ใน hook_views_pre_render แต่ฉันไม่สามารถหาวิธีการได้

ใน hook_views_post_render มีสองอาร์เรย์:

$view->style_plugin->render_tokens
$view->style_plugin->row_tokens

ซึ่งมีลิงก์ที่สร้างขึ้นสำหรับทุกแถว แต่ไม่มีอยู่ใน pre_render และการเปลี่ยนใน post_render ไม่ทำงาน

ฉันได้ลองทำเช่นนั้นใน template_preprocess_views_view_fields แต่สำหรับมุมมองนั้นฟังก์ชั่นนี้จะไม่ทำการยิง (สำหรับมุมมองอื่น ๆ ที่ทำได้) และฉันไม่รู้ว่าทำไม

คำตอบ:


16
function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
      //  override the global custom text field value
      $view->field['nothing']->options['alter']['text'] = 'My custom text';
    break;
  }
}

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

เพิ่ม nid เป็นฟิลด์ในมุมมองและใช้ฟิลด์นั้นสำหรับเงื่อนไขคุณสามารถเพิ่มเงื่อนไขได้ดังนี้: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

วิธีง่ายๆคือการสร้างฟิลด์ใหม่ field_waga ซึ่งจะมี field_waga_1 เป็นชื่อใหม่หากคุณเช็คอินในมุมมองจากนั้นคุณสามารถเปลี่ยนป้ายกำกับและแทนที่ฟิลด์นั้นด้วยค่าที่กำหนดเองของคุณ

if($view->result[0]->field_waga[0]['raw']['value'] == '10') {
//here you can create the field to act as custom text field and enter the custom //value
$view->result[0]->field_waga_1[0]['#markup'] = 'alter';
}

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

คุณสามารถเพิ่มเงื่อนไขดังนี้: ถ้า ($ nid == '124') {$ view-> field ['nothing'] -> ตัวเลือก ['แก้ไข'] ['ข้อความ'] = $ nid}
harshal

ตรวจสอบคำตอบที่อัปเดต
harshal

เพิ่มเงื่อนไขด้วยวิธีนี้: ถ้า ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > options ['alter'] ['text'] = 'ALTER'; } ถ้า a มีค่า '10' ในแถวแรกมากกว่าทุกฟิลด์ 'nothing' มีค่า 'ALTER' ไม่เพียง แต่ก่อน แต่น่าเสียดายที่แถวทั้งหมด ฉันคิดว่ามันเป็นการเปลี่ยนแปลงระดับโลกและไม่สามารถใช้กับแถวที่เลือกได้
dmk.it

1
ไม่เพียงแค่เพิ่ม field_waga ที่คุณมีอีกครั้งโดยใช้ฟิลด์เพิ่มแล้วใช้ฟิลด์นั้นเป็นฟิลด์ที่กำหนดเองเพื่อป้อนค่าที่กำหนดเองของคุณ
harshal

0

จากการอัปเดตของคำตอบข้างต้นฉันต้องตั้งค่า 'alter_text' เป็น TRUE เพื่อให้สิ่งนี้ทำงานเช่น:

function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
    //  override the global custom text field value
    $view->field['nothing']->options['alter']['text'] = 'My custom text';
    $view->field['nothing']->options['alter']['alter_text'] = TRUE;

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