[Помогите] Как продублировать сортировку и количество товаров внизу

Тема в разделе "OpenCart", создана пользователем Serkist, 21 апр 2013.

  1. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    350
    Симпатии:
    72
    Проблема в том, что если прописать верхний код:

    <div class="product-filter">
    <div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?> <b>/</b> <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
    <div class="product-compare">Сравнение: <a href="<?php echo $compare; ?>" id="compare-total"><?php echo $text_compare; ?></a></div>
    <div class="limit"><b><?php echo $text_limit; ?></b>
    <select onchange="location = this.value;">
    <?php foreach ($limits as $limits) { ?>
    <?php if ($limits['value'] == $limit) { ?>
    <option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
    <?php } else { ?>
    <option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
    <?php } ?>
    <?php } ?>
    </select>
    </div>
    <div class="sort"><b><?php echo $text_sort; ?></b>
    <select onchange="location = this.value;">
    <?php foreach ($sorts as $sorts) { ?>
    <?php if ($sorts['value'] == $sort . '-' . $order) { ?>
    <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
    <?php } else { ?>
    <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
    <?php } ?>
    <?php } ?>
    </select>
    </div>
    </div>


    то снизу вылезает косяк (см. скрин)
    [​IMG]
    100 на скрине - это я вручную пробовал прописывать.
    страница категорий - http://verose.ru/dlya_zhenschin/zerkala
    сейчас код нижней панели убран из-за неработоспособности

    Как я понимаю, косяк из-за того, что переменные, связанные с лимитами и сортировкой, и выборка для них прописывается еще раз?

    Можно это как то исправить, чтобы параметры выбирались и сверху страницы, с внизу.
     
  2. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    как то уж очень смущает foreach ($limits as $limits)
    оба исправь по принципу

    <?php foreach ($limits as $lmt) { ?>
    <?php if ($lmt['value'] == $limit) { ?>
    <option value="<?php echo $lmt['href']; ?>" selected="selected"><?php echo $lmt['text']; ?></option>
    <?php } else { ?>
    <option value="<?php echo $lmt['href']; ?>"><?php echo $lmt['text']; ?></option>
    <?php } ?>
    <?php } ?>
     
  3. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    350
    Симпатии:
    72
    прописал - не помогло, ничего не изменилось((
     
  4. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    ты понимаешь что по принципу, сделать и с
    $limits as $limits
    и с $sorts as $sorts
    и в верхнем блоке сортировки и в нижнем.
    у меня всё заработало, хотя в первый раз при простом копировании блока всё было так же как на скриншоте
    PHP:
    <div class="product-filter">
        <div class="display"><b><?php echo $text_display?></b>
            <?php echo $text_list?> <b>/</b>  <a onclick="display('grid');"><?php echo $text_grid?></a>
        </div>
        <div class="product-compare">Сравнение: <a href="<?php echo $compare?>" id="compare-total"><?php echo $text_compare?></a>
        </div>
        <div class="limit"><b><?php echo $text_limit?></b>
     
            <select onchange="location = this.value;">
                <?php foreach ($limits as $lmt) { ?>
                <?php if ($lmt['value']==$ limit) { ?>
                <option value="<?php echo $lmt['href']; ?>" selected="selected">
                    <?php echo $lmt['text']; ?>
                </option>
                <?php } else { ?>
                <option value="<?php echo $lmt['href']; ?>">
                    <?php echo $lmt['text']; ?>
                </option>
                <?php ?>
                <?php ?>
            </select>
        </div>
        <div class="sort"><b><?php echo $text_sort?></b>
     
            <select onchange="location = this.value;">
                <?php foreach ($sorts as $srt) { ?>
                <?php if ($srt['value']==$sort '-' $order) { ?>
                <option value="<?php echo $srt['href']; ?>" selected="selected">
                    <?php echo $srt['text']; ?>
                </option>
                <?php } else { ?>
                <option value="<?php echo $srt['href']; ?>">
                    <?php echo $srt['text']; ?>
                </option>
                <?php ?>
                <?php ?>
            </select>
        </div>
    </div>
     
    Serkist нравится это.
  5. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    350
    Симпатии:
    72
    прописал, заработало - ошибкой было то, что прописывал новые переменные только в нижней панели.
    А можешь объяснить (на будущее мне), почему замена переменных повлияла на результат, ведь все равно одни и теже используются и вверху, и внизу?
    --- добавлено: Apr 21, 2013 8:03 PM ---
    косяк только появился:
    1. При добавлении товара в сравнение обновляется только в верхнем меню их количество в сравнении
    2. Дупликация ID "compare-total"
    3. Попытка заменить ID на CLASS или другой ID ведет к тому, что при добавлении товара в сравнении поля не обновляются на обеих панелях.
     
  6. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    194
    не силен в теории, в смысле как там в компиляторе происходит, но дело в том что foreach ($x as $x)
    после прохода по всему массиву $x оставляет после себя $x с закрепленным за ней посдним значением из foreach
    грубый пример
    $x = array("foo", "bar", "hallo", "world");
    print_r($x); //пропишет весь массив
    foreach ($x as $x) {
    echo "";
    };
    print_r($x); //выдаст последнее присвоенное значение для $x из foreach - world

    во втором блоке смени id у compare-total например на compare-total2
    в common.js найди функцию addToCompare
    там есть строчка
    $('#compare-total').html(json['total']);
    после добавь
    $('#compare-total2').html(json['total']);
     
    Serkist нравится это.