@AndTheEnd

Как прервать foreach и вывести один div?

$output .= '<div class="floor">';
		foreach($myPosts as $newPosts){
		
			$newText = $newPosts->post_title;
			$post_id = $newPosts->ID;
			$permalink = get_permalink($post_id);
			$thumb = get_the_post_thumbnail_url( $post_id, 'medium' );
			$meta_values = get_post_meta( $post_id, 'floor', true );
			$string = '';

			$test = get_the_category( $post_id );

			if($prev != $meta_values){
				$prev = $meta_values;
				
				$output .= '<span class="name">'.$string.'</span>';
			}	
			
		$output .= '<div class="category">';
		
			$output .= '<span class="shop" data-section="'.$meta_values.'" data-shop="'.$post_id.'" data-name="'.$newText.'" data-link="'.$permalink.'" data-newlink="'.$new_links.'" data-cat="<span>'.$name.'</span>"><span>'.$newText.'</span>';
				

	   $output .= '</div>';
	}	
$output .= '</div>';


Проблема в том, что у меня каждый элемент оборачивается в <div class="category">, а обертка должна быть одна на все <span class="shop">
Вынести ее за цикл невозможно, потому что в этом цикле есть еще элементы, которые не дожны попадать в <div class="category"> (вот это например <span class="name">)
Я не знаю, что делать. Я уже неделю сижу, мучаюсь, мне надо прервать цикл, вывести <div class="category"> со всеми элементами,
а потом когда эленменты закончатся этот div закрыть и продолжать итерации.
Что можно сделать, подскажите, пожалуйста.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@alexalexes
Все, что требует вставки после постобработки списка должно копиться в отдельной переменной $output2. Таких переменных для постобработки может быть несколько, если глубина вложенности большая, или нужно сгенерировать html в разных областях до/после списка.
$output .= '<div class="floor">';
  $output .= '<div class="category">';
  $output2 = ''; // тут будем копить html, необходимый для вставки после обработки списка
  foreach($myPosts as $newPosts)
  {
      $newText = $newPosts->post_title;
      $post_id = $newPosts->ID;
      $permalink = get_permalink($post_id);
      $thumb = get_the_post_thumbnail_url( $post_id, 'medium' );
      $meta_values = get_post_meta( $post_id, 'floor', true );
      $string = '';
      $test = get_the_category( $post_id );
      if($prev != $meta_values && $output2 == '') // какое-то условие сработало на определенном проходе списка, и его еще не обрабатывали
      {
        $prev = $meta_values;
        $output2 .= '<span class="name">'.$string.'</span>'; // записываем вывод обработки отдельно
      }	
      $output .= '<span class="shop" data-section="'.$meta_values.'" data-shop="'.$post_id.'" data-name="'.$newText.'" data-link="'.$permalink.'" data-newlink="'.$new_links.'" data-cat="<span>'.$name.'</span>"><span>'.$newText.'</span>';
  }
  $output .= '</div>';
  $output = $output2.$output; // доставляем перед списком некие элементы, которые можно получить только после обработки списка.	
  $output .= '</div>';
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
e_svirsky
@e_svirsky
Web Developer
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы