2016-02-29 2 views
1

Это, вероятно, будет легко для кого-то, но я не получаю это правильно. Я создаю счет-фактуру PDF с использованием fpdf и хочу, чтобы определенное количество строк отображалось, даже если некоторые из них пустые. Вот что я до сих пор имею в соответствующей части:Использование для внутренних задач

$rows = 12; 
$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true); 
    if ($repeatable_fields) { 
     foreach ($repeatable_fields as $field) { 
      $pdf->Cell(96, 15, esc_attr($field['order_sku']), 'L,R,B', 0, 'L'); 
      $pdf->Cell(258, 15, esc_attr($field['order_item']), 'R,B', 0, 'L'); 
      $pdf->Cell(30, 15, esc_attr($field['order_qty']), 'R,B', 0, 'C'); 
      $pdf->Cell(96, 15, esc_attr($field['order_price']), 'R,B', 0, 'R'); 
      $pdf->Cell(96, 15, esc_attr($field['order_subtotal']), 'R,B', 1, 'R'); 
      $counter++;  
     } 
     for ($counter = 0 ; $counter < $rows; $counter++){ 
      $pdf->Cell(96, 15, '', 'L,R,B', 0, 'L'); 
      $pdf->Cell(258, 15, '', 'R,B', 0, 'L'); 
      $pdf->Cell(30, 15, '', 'R,B', 0, 'C'); 
      $pdf->Cell(96, 15, '', 'R,B', 0, 'R'); 
      $pdf->Cell(96, 15, '', 'R,B', 1, 'R'); 
     } 
    } 

Это работает (несколько). Он создает 12 новых строк ниже цикла. Я хочу в общей сложности 12, включая зацикленный ответ. Я пробовал несколько разных вариантов, но не могу получить код для создания правильного количества строк.

ответ

1

Причина, по которой вы не работаете так, как вы ожидаете, заключается в том, что вы возвращаете $counter в ноль в определении для цикла for. Он должен работать с одним небольшим изменением. Вместо приращения $counter, декремент $rows. Затем, когда вы дойдете до цикла for, он будет просто подсчитывать до тех пор, пока осталось много строк.

$rows = 12; 
$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true); 
    if ($repeatable_fields) { 
     foreach ($repeatable_fields as $field) { 
      $pdf->Cell(96, 15, esc_attr($field['order_sku']), 'L,R,B', 0, 'L'); 
      $pdf->Cell(258, 15, esc_attr($field['order_item']), 'R,B', 0, 'L'); 
      $pdf->Cell(30, 15, esc_attr($field['order_qty']), 'R,B', 0, 'C'); 
      $pdf->Cell(96, 15, esc_attr($field['order_price']), 'R,B', 0, 'R'); 
      $pdf->Cell(96, 15, esc_attr($field['order_subtotal']), 'R,B', 1, 'R'); 

      $rows--; // <-------- change this 

     } 
     for ($counter = 0 ; $counter < $rows; $counter++){ 
      $pdf->Cell(96, 15, '', 'L,R,B', 0, 'L'); 
      $pdf->Cell(258, 15, '', 'R,B', 0, 'L'); 
      $pdf->Cell(30, 15, '', 'R,B', 0, 'C'); 
      $pdf->Cell(96, 15, '', 'R,B', 0, 'R'); 
      $pdf->Cell(96, 15, '', 'R,B', 1, 'R'); 
     } 
    } 
0

Если цель состоит в том, чтобы иметь 12 строк, даже если у вас меньше, чем 12 точек данных, я думаю, что это может сделать это:

$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true); 

$rows = 12; 

//Loop 12 times 
for ($i = 0; $i < $rows; $i++) { 
    if (!empty($repeatable_fields[$i])) { 
     //Since we have an entry for this row number, we'll use it 
     $pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_sku']), 'L,R,B', 0, 'L'); 
     $pdf->Cell(258, 15, esc_attr($repeatable_fields[$i]['order_item']), 'R,B', 0, 'L'); 
     $pdf->Cell(30, 15, esc_attr($repeatable_fields[$i]['order_qty']), 'R,B', 0, 'C'); 
     $pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_price']), 'R,B', 0, 'R'); 
     $pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_subtotal']), 'R,B', 1, 'R'); 
    } else { 
     //No entry for this row number, print a blank row 
     $pdf->Cell(96, 15, '', 'L,R,B', 0, 'L'); 
     $pdf->Cell(258, 15, '', 'R,B', 0, 'L'); 
     $pdf->Cell(30, 15, '', 'R,B', 0, 'C'); 
     $pdf->Cell(96, 15, '', 'R,B', 0, 'R'); 
     $pdf->Cell(96, 15, '', 'R,B', 1, 'R'); 
    } 
} 

Это проверялось, но при условии, $repeatable_fields индексируется численно начиная с 0 без перерывов, должен делать то, что я думаю, что вы ищете.

Edit 1

Если мое предположение, что $repeatable_fields численно индексируется, начиная с нуля не так, вы можете использовать array_values, чтобы преобразовать его в этот формат.

+0

У меня не было возможности попробовать это, потому что ответ выше использовал наименьшие изменения, но спасибо за советы! – RiotAct

+0

Не беспокойтесь, пока у вас есть то, что вам нужно. – stratedge

Смежные вопросы