Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Сортировка массива в обратном порядке (Цена)

  • 23 марта, понедельник
  • Здравствуйте. Уважаемые мастера подскажите. Я не очень силен в php.
    Есть select box с зависимой ценой. При покупке 1 шт 400р, 2-3 шт 400р, от 4-9 шт 340р, от 10 и выше 315р.
    Изначально стоит от 10 и выше 315р. А нужно что бы по дефолту стояла 1 шт 400р.

    То есть нужно сделать обратную сортировку массива. Подскажите где копать. А лучше если не сложно какой нибудь код.

    Что нашел (после этого кода и нужна вставлять только не знаю куда и что)
    custom/my/modules/shop/views/shop.view.options.php
    $result["row"]["price_arr"]


    Вот сам код
    if ($result['row']['price_arr'])
    {
    echo '<ul class="'.($isProduct ? 'shop-product__options' : 'shop-item-product__options').'">';
    foreach ($result['result']['depends_param'] as $param)
    {
    if(! empty($result['row']['param_multiple'][$param['id']]))
    {
    echo
    '<li class="shop-product__option js_shop_form_param">
    <div class="control">';

    if(count($result['row']['param_multiple'][$param['id']]) == 1) {
    foreach ($result['row']['param_multiple'][$param['id']] as $value => $depend) {
    rsort($param['id']);
    echo '<input type="hidden" name="param'.$param['id'].'" value="'.$value.'"'.($depend == 'depend' ? ' class="depend_param js_shop_depend_param"' : '').'>';
    }
    }
    else
    {
    $select = '';

    foreach ($param['values'] as $value)
    {
    if(! empty($result['row']['param_multiple'][$param['id']][$value['id']]))
    {
    if(! $select) {
    $select =
    '<label class="label">'.$param['name'].':</label>
    <select name="param'.$param["id"].'" class="'.($result['row']['param_multiple'][$param['id']][$value['id']] == 'depend' ? 'js_shop_depend_param' : '').'">';
    }
    $select .= '<option value="'.$value['id'].'"'.(! empty($value['selected']) ? ' class="js_form_option_selected" selected' : '').'>'.$value['name'].'</option>';
    }
    }

    if($select) {
    echo $select.'</select> ';
    }
    }

    echo
    '<div>
    </li>';
    }
    }
    echo '</ul>';
    }
    • 23 марта, понедельник , редакция: 23 марта, понедельник
    • Массив форсируется в модельку, там да, там принцип сортировки - вывести первой подешевле.
      В модельку лучше не лезть, чтобы обновления не убить.
      А лучше прям в Вашей вьюхе пересортировать массив $param['values'] по ключу цены. Или да, перевернуть просто, функцией, типа
      https://www.php.net/manual/ru/function.array-reverse.php
      Перед циклом пропускаете массив через неё и всё
  • 24 марта, вторник
  • Благодарю, 5+))) Я не программист. А после какого кода нужно сортировать массив? Сейчас по мануалам буду искать как написать код правильно)
    • 24 марта, вторник
    • Цитата
      5+)))
      Это ёрничание?

      Цитата
      А после какого кода нужно сортировать массив?

      Не после, а до.
      Вот цикл вывода выпадалки, она берет массив и поочередно его шурупит.
      Код
      foreach ($param['values'] as $value)
      {

      Вот перед ним массив и переворачиваете
      Код
      $param['values'] = array_reverse($param['values']);
      • 24 марта, вторник
      • Работает, но меняется когда я нажимаю на селект бокс. А хотелось бы что бы изначально была выбрано 1 шт, а сейчас изначально выбрано 10шт. То есть не список селекта реверс, а лишь по дефолту что изначально выбрано.
        • 24 марта, вторник
        • Ну это надо массив вывести, потестировать, покрутить так и эдак. Вслепую сложно точно сказать. Работы на 10 минут опытному, коих тут немало. Предложите кому-нибудь несколько сотен и он сделает под ключ
        • 24 марта, вторник

        • Откройте
          shop.view.numbers.php

          Найдите
          Код
          foreach (($result['row']['price_arr']) as $price)

          замените на
          Код
          foreach (array_reverse($result['row']['price_arr']) as $price)



    • 27 марта, пятница
    • Зря угараете, я на базе Diafan осваивал PHP - структура кода очень простая, понятная и легкая в восприятии.

Новости

Блоги

  • 16.11.2019
  • Достаточно широкой проблемой, которая вызывает множество вопросов, обращений в тех.поддержку и тем на форуме, является обновление, а именно ошибки, с ним связанные. Корни проблем, возникающих при этом, совершенно различны, но наиболее часто причина в кастомизации. И хоть определение это слишком широкое, всё же процедура выявления проблемы вполне стандартизована и проста. Об этом и пойдёт речь в статье.