За последние 24 часа нас посетили 72882 программиста и 10233 робота. Сейчас ищут 2802 программиста ...

Плагин WP-Shop для Word-Press - Помогите изменить функцию

Тема в разделе "PHP для новичков", создана пользователем SacredSinner, 28 сен 2016.

  1. SacredSinner

    SacredSinner Новичок

    С нами с:
    28 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    Доброго дня всем!
    Существует плагин для WP под названием WP-Shop для создания интернет-магазина. Вопрос, наверное, поймут только те, кто имел с ним дело.
    Так вот. Товары в нем забиваются как записи. У записей есть доп. поля. Для обозначения модификаций товара и цен на них используются поля name_N и cost_N, где N - номер поля от 1 и до... (не знаю до скольки))).
    Так вот, есть там функция вывода этих товаров на витрину. Дело в том, что на витрину выводятся все модификации и цены, а нужно выводить лишь только name_1 и cost_1. То есть работает какой-то цикл, который перебирает массив. А мне бы от цикла избавиться и выводить только первые элеменыты. Я вот ни разу не программист и своими силами мне это победить не удалось.
    Насколько я понял, функция вывода этих данных такая:
    Код (Text):
    1. public function GetGoodWidget($post = null, $class = "", array $columns = array('name'=>true,'cost'=>true))
    2.     {
    3.         if ($post == null)
    4.         {
    5.             global $post;
    6.         }
    7.         $cost = false;
    8.         $cost0 = array();
    9.         $name0 = array();
    10.         $sklad0 = array();
    11.         $sklad = array();
    12.         $count0 = array();
    13.         $count = array();
    14.         $meta = get_post_custom($post->ID);
    15.         $sort_type = get_option('wpshop.sort_price');
    16.     $price_trim = get_option('wpshop.price_trim');
    17.         //Properties of good
    18.         //$meta_properties = '';
    19.         if($meta){
    20.         foreach ($meta as $key => $val)
    21.         {
    22.             if ( preg_match('/^cost_(\d+)/i', $key, $m) )
    23.             {
    24.                 $cost0[$m[1]] = $val[0];
    25.             }
    26.             if ( preg_match('/^name_(\d+)/i', $key, $m) )
    27.             {
    28.                 $name0[$m[1]] = $val[0];
    29.             }
    30.             if ( preg_match('/^sklad_(\d+)/i', $key, $m) )
    31.             {
    32.                 $sklad0[$m[1]] = $val[0];
    33.             }
    34.       if ( preg_match('/^count_(\d+)/i', $key, $m) )
    35.             {
    36.                 $count0[$m[1]] = $val[0];
    37.             }
    38.         }}
    39.    
    40.         if (count($cost0) > 1){
    41.             $cost = array();
    42.             ksort($cost0);
    43.             foreach ($cost0 as $key => $val1){
    44.         if (isset($name0[$key])){
    45.           $val = $name0[$key];
    46.         }else{
    47.           $val = $key;
    48.         }
    49.         if($price_trim) {
    50.           $cost[$val] = round($cost0[$key],2);
    51.         }else {
    52.           $cost[$val] = $cost0[$key];
    53.         }              
    54.  
    55.         if (isset($sklad0[$key])){
    56.           $sklad[$val] = $sklad0[$key];
    57.         }
    58.        
    59.         if (isset($count0[$key])){
    60.           $count[$val] = $count0[$key];
    61.         }
    62.       }
    63.      
    64.             if ($sort_type==1){
    65.                 asort($cost);
    66.             }
    67.             if ($sort_type==2){
    68.                 arsort($cost);
    69.             }
    70.         }else if(count($cost0) > 0) {
    71.       $cost = array();
    72.             ksort($cost0);
    73.             foreach ($cost0 as $key => $val1){
    74.         if (isset($name0[$key])){
    75.           $val = $name0[$key];
    76.         }else{
    77.           $val = '';
    78.         }
    79.         if($price_trim) {
    80.           $cost[$val] = round($cost0[$key],2);
    81.         }else {
    82.           $cost[$val] = $cost0[$key];
    83.         }  
    84.          
    85.         if (isset($sklad0[$key])){
    86.           $sklad[$val] = $sklad0[$key];
    87.         }
    88.        
    89.         if (isset($count0[$key])){
    90.           $count[$val] = $count0[$key];
    91.         }
    92.       }
    93.     }
    94.        
    95.         if ($cost)
    96.         {
    97.             if ($sort_type==1){
    98.                 asort($cost);
    99.             }
    100.             if ($sort_type==2){
    101.                 arsort($cost);
    102.             }
    103.             ob_start();
    104.             $this->view->class = $class;
    105.             $this->view->cost = $cost;
    106.             $this->view->sklad = $sklad;
    107.       $this->view->count = $count;
    108.             $this->view->columns = $columns;
    109.             $this->view->post = $post;
    110.             $this->view->render("good.widget.inc.php");
    111.             return ob_get_clean();
    112.         }
    113.         return "";
    114.     }
    Может кто-то мне подскажет что тут надо подправить? Не пинайте сильно, очень надо. Если нужны еще какие-то данные, с удовольствием предоставлю. Премного благодарен.
     
  2. Device64

    Device64 Новичок

    С нами с:
    29 сен 2016
    Сообщения:
    5
    Симпатии:
    0
    возможно цикл находится именно в файле good.widget.inc.php там его и надо прерывать.
     
  3. SacredSinner

    SacredSinner Новичок

    С нами с:
    28 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    Да. Сам уже понял, что он там, но вот как его изменить я не понял. Может поможет кто?
    Код (Text):
    1. <div class="wpshop_bag <?php  echo $this->class;?>">
    2. <input type='hidden' name="wpshop-good-title-<?php  echo $this->post->ID;?>" value='<?php  echo htmlspecialchars($this->post->post_title,ENT_QUOTES);?>'/>
    3.     <div class="wpshop_buy">
    4.         <table cellpadding="5" cellspacing="0" border="0" width="100%">
    5.         <?php
    6.         $i = 0;
    7.         foreach ($this->cost as $key => $val)
    8.         {
    9.             $i++;
    10.             if (!isset($this->sklad[$key])||(isset($this->sklad[$key])&&($this->sklad[$key] > 0||$this->sklad[$key] == "" )))
    11.             {
    12.                 if(isset($this->sklad[$key])) {
    13.                     $sklad_value = $this->sklad[$key];
    14.                 }else {
    15.                     $sklad_value = '';
    16.                 }
    17.                 $yandex_num = get_option("wpshop.yandex_metrika");
    18.                 if($yandex_num){$addClick = "addtocart('{$this->post->ID}', '{$key}', '".get_permalink($this->post->ID)."', '{$val}', document.getElementById('goods_count_{$this->post->ID}_{$i}').value, '{$i}','{$sklad_value}'); yaCounter{$yandex_num}.reachGoal('wpshop_click',{id:'{$this->post->ID}'}); return false;";}else{
    19.                 $addClick = "addtocart('{$this->post->ID}', '{$key}', '".get_permalink($this->post->ID)."', '{$val}', document.getElementById('goods_count_{$this->post->ID}_{$i}').value, '{$i}','{$sklad_value}'); return false;";}
    20.              
    21.                 ?>
    22.                 <tr class="line_<?php print $i; ?>">
    23.                     <?php  if (isset($this->columns['name'])){?>
    24.                     <td class="wpshop_caption">
    25.                         <a style="cursor: pointer" href="#" onclick="javascript:<?php  echo $addClick; ?>;" style="font-weight:bold;"><?php print $key; ?></a>
    26.                     </td>
    27.                     <?php  } ?>
    28.                     <?php  if (isset($this->columns['cost'])) { ?>
    29.                     <td class="wpshop_price">
    30.                         <?php  echo ($val . ' ' .CURR); ?>
    31.                     </td>
    32.                     <?php  } ?>
    33.        
    34.                     <td class="wpshop_count">
    35.                         <input maxlength='4' type='text'  <?php if (isset($this->count[$key])&&$this->count[$key]>0){ echo "value='".$this->count[$key]."'";}else{echo "value='1'";}?> name='goods_count_<?php  echo "{$this->post->ID}_{$i}";?>' id='goods_count_<?php  echo "{$this->post->ID}_{$i}";?>' size='3' />
    36.                     </td>
    37.                     <td class="wpshop_button">
    38.                         <a href="#" onclick="<?php  echo $addClick; ?>" class="arrow_button" alt="<?php  echo __('Add', 'wp-shop'); /*Добавить*/ ?>" title="<?php  echo __('Order', 'wp-shop'); /*Заказать*/ ?>"></a>
    39.                     </td>
    40.                 </tr>
    41.                 <?php  if (isset($this->sklad[$key])&&$this->sklad[$key] > 0){?>
    42.                     <tr class="sklad">
    43.                         <td colspan="4">
    44.                         <?php
    45.                             echo __('In stock ', 'wp-shop');
    46.                             echo ' '.$this->sklad[$key];
    47.                             echo __(' pcs.', 'wp-shop');
    48.                         ?>
    49.                         </td>
    50.                     </tr>
    51.                 <?php }    ?>
    52.         <?php
    53.             }
    54.             else
    55.             {
    56.                 echo "<div class='empty_".$i." empty_shop'>";
    57.                 echo get_option("wpshop.good.noText");
    58.                 echo "</div>";
    59.             }
    60.         }
    61.         ?>
    62.         </table>
    63.     </div>
    64. </div>
    То есть надо вывести ключ и значение только первого элемента массива.


    Затупил. Просто поставил break в конце и все заработало, как надо. Всем спасибо!
     
    #3 SacredSinner, 30 сен 2016
    Последнее редактирование: 30 сен 2016
  4. Device64

    Device64 Новичок

    С нами с:
    29 сен 2016
    Сообщения:
    5
    Симпатии:
    0
    пробуй перед последней скобкой цикла на строке 60 поставить break; тогда цикл прервется после первой итерации.
    Возможно, такой вариант подойдет, но будет не верным, ибо следует изменять содержимое массива перебора перед подачей в цикл, а не прерывать работу самого цикла.