2017-01-01 9 views
1

С Новым годом всем! Вот мои коды. Есть ли способ сократить код с помощью цикла? В цикле первое поле отображается один раз, а соответствующее подполе отображает 5 элементов. Например: первое поле: Web-браузер элементы подполей: FireFox, Chrome, IE, Opera, MaxthonСократите код php по петле

<div class="row"> 
<?php 
$sort=get_field('category'); 
     echo "<div class='bor'></div> 
       <h3 style='text-align:center'>".$sort[ 0 ]['fenlei']." 
       <a id='browser'></a></h3> 
       <div class='bor'></div>"; 
$websites = get_field('classification'); 
$row_count = count($websites); 
    for ($i = 0; $i <= 4; $i++){ 
     include(get_stylesheet_directory() . '/template.php'); 
     } 



?> 

     </div> 
     <!--end row1--> 
<div class="row"> 
<?php 
$sort=get_field('category'); 
     echo "<div class='bor'></div> 
       <h3 style='text-align:center'>".$sort[ 1 ]['fenlei']." 
       <a id='browser'></a></h3> 
       <div class='bor'></div>"; 
$websites = get_field('classification'); 
$row_count = count($websites); 
    for ($i = 5; $i <= 9; $i++){ 
     include(get_stylesheet_directory() . '/template.php'); 
     } 



?> 

     </div> 
     <!--end row2--> 
<div class="row"> 
<?php 
$sort=get_field('category'); 
     echo "<div class='bor'></div> 
       <h3 style='text-align:center'>".$sort[ 2 ]['fenlei']." 
       <a id='browser'></a></h3> 
       <div class='bor'></div>"; 
$websites = get_field('classification'); 
$row_count = count($websites); 
    for ($i = 10; $i <= 14; $i++){ 
     include(get_stylesheet_directory() . '/template.php'); 
     } 



?> 

     </div> 
     <!--end row3-->  

содержание template.php

<div class="col-lg-2dot4"> 
     <div class="thumbnail" style="height: 360px;"> 
     <a href="<?php echo $websites[ $i ]['link']; ?>" title=<?php echo $websites[ $i ]['name']; ?> target="_blank"> 
      <img src="<?php echo $websites[ $i ]['icon']; ?>" width="194" height="97" /> 
     </a> 
     <div class="caption"> 
      <h3> 
      <a href="<?php echo $websites[ $i ]['link']; ?>" title="Firefox" target="_blank"><?php echo $websites[ $i ]['name']; ?></a> 
      </h3> 
      <p><?php echo $websites[ $i ]['description'];; ?></p> 
     </div> 
     <ul class="list-inline text-center"> 
      <li style="list-style: none">Download:</li> 
      <li> 
      <a href="<?php echo $websites[ $i ]['download']; ?>" target="_blank">32Bit</a> 
      </li> 
     </ul> 

     </div> 
    </div>  

ответ

0
<?php 

function print_row($sort, $websites) { 
    return function($limit_offset, $i) use($sort, $websites) { 
    $start = $limit_offset[0]; 
    $end = $limit_offset[0] + $limit_offset[1]; 
    return "<div class='bor'></div> 
      <h3 style='text-align:center'>" 
     . $sort[$i]['fenlei'] 
     . "<a id='browser'></a></h3> 
     <div class='bor'></div>" 
     . implode('', array_map(range($start, $end), row_template($websites))); 
    }; 
    } 

    function row_template($websites) { 
    return function($i) use($websites) { 
     ob_start(); 
     include(get_stylesheet_directory() . '/template.php'); 
     return ob_get_contents(); 
    }; 
    } 

    $sort = get_field('category'); 
    $websites = get_field('classification'); 
    $offsets = [[0, 4], [5, 4], [10, 4]]; 
    $results = array_map($offsets, print_row($sort, $websites)); 

    print implode('', $results); 
+0

Спасибо за ваши коды. –

1

Вероятно, не осмысленно, но есть функция:

function echoCode($sortIndex,$start,$stop) { 
    $sort=get_field('category'); 
    echo "<div class='bor'></div> 
     <h3 style='text-align:center'>".$sort[$sortIndex]['fenlei']." 
     <a id='browser'></a></h3> 
     <div class='bor'></div>"; 
    $websites = get_field('classification'); 
    $row_count = count($websites); 
    for ($i = $start; $i <= $stop; $i++) 
     include(get_stylesheet_directory() . '/template.php'); 
} 

затем просто позвоните дважды (0,0,4) и (1,5,9).

+0

Это было опубликовано до редактирования, и я понял, что вы хотите сократить верхний фрагмент кода. Если это не так, дайте мне знать. – kabanus

+0

Спасибо за ответ kabanus.Я просто хочу укоротить верхний код петлей. –

+0

Как я уже сказал, неясно, как здесь поможет цикл. Функция сокращает ваш код наполовину - как вы предлагаете резки больше? Даже если вы настаиваете, это будет цикл, который запускается дважды и выводит этот div посередине, проверяя номер запуска. – kabanus

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

  • Нет связанных вопросов^_^