Копирование итерации над собой в цикле - PullRequest
0 голосов
/ 28 июня 2018

Я использую функцию ACF update_sub_field для добавления содержимого из цикла в дочернее поле повторителя.

Я дошел до того, что данные добавляются в дочерний ретранслятор, но сам перезаписывается. Он обновляет только первую строку дочернего повторителя, поэтому я вижу только последний цикл до конца.

Я повторяю родительский повторитель, используя $counter, но когда я пытаюсь добавить итерацию к дочернему повторителю, это нарушает функцию. Вот так:

update_sub_field( array($field_key, $counter, $sub_field_key, $rowcount), $value, $post_id );

Я пробовал другую функцию add_sub_row ... которая добавляет правильное количество строк к дочернему повторителю, но не добавляет данные.

Вот мой полный код:

<code>// Product Code Titles
$rows = $html->find('div[class=product-table]', 0)->find('tr');
$field_key = "field_5ae0882f9d6f9";
$sub_field_key = "field_5ae088999d6fb";

if(empty($rows)){
    die("Empty array");
}

$titles = array(); // aka your $data

// here we fetch the first row and iterate to get titles
$row = current($rows);
foreach ($row->find('td') as $cell) {
    $titles[] = array("column_title" => strip_tags($cell->innertext));
}
update_field( $field_key, $titles, $post_id );

// here we continue iteration starting from second row
$value = array();
$rowcount = 1;
while($row = next($rows)){

    $cells = $row->find('td');
    $columnsCount = count($cells);
    $counter = 1;
    foreach ($cells as $cell) {
      $value[] = array("text" => strip_tags($cell->innertext));
      update_sub_field( array($field_key, $counter, $sub_field_key), $value, $post_id );
      echo '<pre>'; print_r($value); echo '
'; $ value = array (); $ Счетчика ++; } $ ROWCOUNT ++; }

Просто чтобы дать некоторый контекст, я воссоздаю эту таблицу с данными ячейки, помещаемыми в дочернее поле повторителя.

enter image description here

1 Ответ

0 голосов
/ 28 июня 2018

На эту тему не так много, поэтому надеюсь, что это поможет кому-то еще.

Я остановил добавление к массиву $value, изменил функцию на update_sub_row и добавил счетчик для итерации строк дочернего повторителя.

Вот полный код:

<code>// Product Code Titles
$rows = $html->find('div[class=product-table]', 0)->find('tr');
$field_key = "field_5ae0882f9d6f9";
$sub_field_key = "field_5ae088999d6fb";

if(empty($rows)){
    die("Empty array");
}

$titles = array(); // aka your $data

// here we fetch the first row and iterate to get titles
$row = current($rows);
foreach ($row->find('td') as $cell) {
    $titles[] = array("column_title" => strip_tags($cell->innertext));
}
update_field( $field_key, $titles, $post_id );

// here we continue iteration starting from second row
$value = array();
$rowcount = 1;
while($row = next($rows)){

    $cells = $row->find('td');
    $columnsCount = count($cells);
    $counter = 1;
    foreach ($cells as $cell) {
      $value = array("field_5ae088b79d6fc" => strip_tags($cell->innertext));
      update_sub_row( array($field_key, $counter, $sub_field_key), $rowcount, $value, $post_id );
      echo '<pre>'; print_r($value); echo '
'; $ value = array (); $ Счетчика ++; } $ ROWCOUNT ++; }
...