Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

SooR

Користувачі
  • Публікації

    1 508
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем SooR

  1. лучше думаю было бы сделать кнопочку "фильтр" , то есть, чтобы поставить галочками нужные опции и кнопочку "фильтр". а то как-то нехорошо когда после каждого выбора опции страница перегружаеться. Это только моя мысль

    Просто человек может выбрать так, что к его фильтру не найдется товаров. А если каждый раз обновлять количество товаров для критерии, то можно ограничить от этого.
  2. Цитирую

    Внимание: проверено на последней версии OpenStore v1.4.9.4 (March 19, 2011) с офф. сайта

    Т.е. поставил двиг, поверх модуль. Тогда все ок. Остальные нужно смотреть.

    lampard что именно не работает? Я зашел, все ок..

  3. Там нет никакого AJAX.

    В файле

    catalog\controller\product\product.php

    Замените

    'price' => (float)$option_value['price'] ? $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))) : FALSE,

    на

    'price'           => (float)$option_value['price'] ? $this->currency->format($this->tax->calculate((($option_value['prefix'] == '+') ? ($product_info['price'] + $option_value['price']) : ($product_info['price'] - $option_value['price'])), $product_info['tax_class_id'], $this->config->get('config_tax'))) : FALSE,

    Это и есть одна строка.

    Только теперь надо с шаблона убрать вывод префикса

    catalog\view\theme\default\template\product\product.tpl

    <?php echo $option_value['prefix']; ?>
  4. Ну тут несколько причин:

    Как уже говорилось, LIKE здесь неуместен, как и выборка по символьным вхождениям.

    Всегда быстрее делать что-либо с целыми числами, поэтому вместо поиска символьных значений, нужно было присвоить каждому значению свой идентификатор, так, например, ваши критерии выглядели бы:

    ...
    <td>Увлечения
    <ul><li><input type="radio" name="hobbies" value="10">Футбол</li>
    <li><input type="radio" name="hobbies" value="11">Спорт</li>
    <li><input type="radio" name="hobbies" value="12">Атлетика</li>
    <li><input type="radio" name="hobbies" value="13">Прогулки</li>
    <li><input type="radio" name="hobbies" value="14">Книги</li>
    <li><input type="radio" name="hobbies" value="15">Диско</li>
    </ul></td></tr></tbody></table>
    ...
    

    тогда запрос выглядел бы:

    SELECT * FROM `girls` WHERE ... `color_eye` = `3` AND `hobbies` = `15` ...

    Второе, не следовало вставлять проверку на существование POST переменной прямо в запрос

    (isset($_POST['figure']) ? $_POST['figure'] : '%' )

    Это не критично, но и нежелательно.

    Вполне приемлемый вариант имеет вид:

    if (isset($_POST['color_hair'])) {
      $sql .= " AND `color_hair` LIKE '%" . mysql_real_escape_string($_POST['color_hair']) . "%'";
    }

    Третье, если уж вы решили искать по символьным выражениям, не мешало бы пропустить их через функцию mysql_real_escape_string($string), не боясь о недопустимых символах в строке.

    Посему желаю не сдаваться и немного почитать про оптимизацию MySQL запросов.

    P.S. Я, когда-то пытаясь устроиться, тоже получил подобное задание, неуверенность в своих знаниях отбило желание даже пытаться решить задачу, а вы, вот, попробовали, зато теперь знаете. Удачи!

  5. Интересно, спасибо за вариант замены стандартного. Давно подумываю это сделать, написал более быстрый способ мультизагрузки изображений, отдельно можно прикрутить гулялку по папкам. Если будет время, займусь.

  6. Делаем следующее:

    CSS: добавляем в конец

    /*=Category view*/
    .view-buttons{float:left;margin-top: 7px;}
    .view-buttons a{display:inline-block;height:16px;width:16px;margin-left:7px;}
    .view-buttons a#grid{background:url('../image/view-table.png') no-repeat 0 0;}
    .view-buttons a#list{background:url('../image/view-list.png') no-repeat 0 0;}
    .view-buttons a.onpress{background-position:0 -16px!important;}
    
    .grid{list-style-type:none;margin:5px 0;padding:0;text-align: center;}
    .grid li{float: left;height: 215px;width: 25%;/*width: 32%;*/}
    .grid .right{min-height: 50px;}
    .grid .title{display:block; margin: 3px 0;}
    
    .list{list-style-type:none;margin:5px 0;padding:0;overflow:hidden;}
    .list li{clear:both;float:none;overflow:hidden;padding:20px;}
    .list li + li{border-top:1px dotted #999999;}
    .list .title{display:block;margin:0 0 10px;}
    .list .main{float:left;}
    .list .main .left{float:left;}
    .list .main .left a{display:block;text-decoration:none;}
    .list .main .right{float:right;margin: 0 20px;padding-top: 10px;}
    .list .main .right .model{display:block;}
    .list .other{float:right; padding-top: 10px;}
    .list .other img{display:block;margin: 3px 0;}
    /*=End category view */
    

    HTML: в category.tpl заменяем

    <table class="list">
          <?php for ($i = 0; $i < sizeof($products); $i = $i + 4) { ?>
          <tr>
            <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
            <td width="25%"><?php if (isset($products[$j])) { ?>
              <a href="<?php echo $products[$j]['href']; ?>"><img src="<?php echo $products[$j]['thumb']; ?>" title="<?php echo $products[$j]['name']; ?>" alt="<?php echo $products[$j]['name']; ?>" /></a><br />
              <a href="<?php echo $products[$j]['href']; ?>"><?php echo $products[$j]['name']; ?></a><br />
              <span style="color: #999; font-size: 11px;"><?php echo $products[$j]['model']; ?></span><br />
              <?php if ($display_price) { ?>
              <?php if (!$products[$j]['special']) { ?>
              <span style="color: #900; font-weight: bold;"><?php echo $products[$j]['price']; ?></span>
              <?php } else { ?>
              <span style="color: #900; font-weight: bold; text-decoration: line-through;"><?php echo $products[$j]['price']; ?></span> <span style="color: #F00;"><?php echo $products[$j]['special']; ?></span>
              <?php } ?>
              <a class="button_add_small" href="<?php echo $products[$j]['add']; ?>" title="<?php echo $button_add_to_cart; ?>" > </a>
    		  <?php } ?>
              <br />
              <?php if ($products[$j]['rating']) { ?>
              <img src="catalog/view/theme/default/image/stars_<?php echo $products[$j]['rating'] . '.png'; ?>" alt="<?php echo $products[$j]['stars']; ?>" />
              <?php } ?>
              <?php } ?></td>
            <?php } ?>
          </tr>
          <?php } ?>
        </table>
    

    на

    <ul class="<?php echo $view_mode; ?>" id="view">
          <?php foreach ($products as $product) { ?>
            <li>
              <div class="main">
                <div class="left">
                  <a href="<?php echo $product['href']; ?>" class="thumb" rel="<?php echo $product['compare_thumb']; ?>">
                    <img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>"  id="image-<?php echo $product['product_id']; ?>" />
                  </a>
                </div>
                <div class="right">
                  <a href="<?php echo $product['href']; ?>" class="title"><?php echo $product['name']; ?></a>
                  <span class="model"><?php echo $product['model']; ?></span>
                </div>
              </div>
              <div class="other">
                <?php if ($display_price) { ?>
                <?php if (!$product['special']) { ?>
                <span style="color: #900; font-weight: bold;"><?php echo $product['price']; ?></span>
                <?php } else { ?>
                <span style="color: #900; font-weight: bold; text-decoration: line-through;"><?php echo $product['price']; ?></span> <span style="color: #F00;"><?php echo $product['special']; ?></span>
                <?php } ?>
                <a class="button_add_small" href="<?php echo $product['add']; ?>" title="<?php echo $button_add_to_cart; ?>" > </a>
      		      <?php } ?>
                <br />
                <?php if ($product['rating']) { ?>
                <img src="catalog/view/theme/default/image/stars_<?php echo $product['rating'] . '.png'; ?>" alt="<?php echo $product['stars']; ?>" />
                <?php } ?>
              </div>
            </li>
          <?php } ?>
        </ul>

    заменяем

    <div class="sort">
          <div class="div1">
            <select name="sort" onchange="location = this.value">
              <?php foreach ($sorts as $sorts) { ?>
              <?php if (($sort . '-' . $order) == $sorts['value']) { ?>
              <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 class="div2"><?php echo $text_sort; ?></div>
        </div>
    

    на

    <div class="sort">
          <div class="view-buttons">
            <a id="grid" class="change-view<?php echo ($view_mode == 'grid' ? ' onpress' : ''); ?>"></a>
            <a id="list" class="change-view<?php echo ($view_mode == 'list' ? ' onpress' : ''); ?>"></a>
          </div>
          <div class="div1">
            <select name="sort" onchange="location = this.value">
              <?php foreach ($sorts as $sorts) { ?>
              <?php if (($sort . '-' . $order) == $sorts['value']) { ?>
              <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 class="div2"><?php echo $text_sort; ?></div>
        </div>
    

    перед

    <?php echo $footer; ?>

    вставляем

    <script type="text/javascript"><!--
      $('.change-view').click(function(){
        $('#view').removeClass().addClass($(this).attr('id'));
        $('.change-view').removeClass('onpress');
        $(this).addClass('onpress');
        $.post('<?php echo $view_action; ?>', 'view=' + $(this).attr('id'));
      });
    //--></script>
    

    PHP: в category.php, после

    $this->data['button_add_to_cart'] = $this->language->get('button_add_to_cart');
    добавляем

    $this->data['view_action'] = HTTP_SERVER . 'index.php?route=product/category/view';
    $this->data['view_mode'] = (isset($this->session->data['view_mode']) ? $this->session->data['view_mode'] : 'grid');

    В конец файла перед закрытием класса вставляем метод

    public function view() {
        if ($this->request->server['REQUEST_METHOD'] == 'POST' && isset($this->request->post['view'])) {
          $this->session->data['view_mode'] = $this->request->post['view'];
        }
      }
    

    Иконки видов: кидаем в папку с изображениями вашего шаблона

    view_icons.zip

    Собственно и всё.

    Временную демку можно глянуть тут

    • +1 6
  7. AlexFisher, спасибо. Да уже почти с месяцок работаю над ним, прикрутил RSS фиды, переключалку вида таблица-список с запоминанием, осталось написать модуль "Просмотренные товары", CSV импорт <-> экспорт и сравнение товаров методом исключения одинаковых параметров.
  8. Возврат изначально был реализован на fullAJAX библиотеке, но только из-за этого использовать целый фреймворк было не рационально, поэтому пользовался штатным функционалом jQuery.

    Исключение AJAX внушает стабильность и кроссбраузерность.

    • +1 3
  9. Доделываю модуль. С нуля.

    Ориентир на розетка.ком.юа (лат), оптимальный вариант фильтра.

    Самое сложное позади (: - формирование правильной ссылки с GET запросом и в зависимости от неё логика запроса в базу.

    Посмотреть фронт можно здесь http://dataplustest.ua.swteh.ru/index.php?route=product/category&path=20

    Правильным будет

    • +1 1
  10. Vetal на http://svobodamusic.net/music там даже не модуль, а рекодинг многих файлов, как бы заказ специфический был. Надо унифицировать и слайдеры, и текстовые поля для модуля.

    Цены относятся к отдельному полю таблицы product, поэтому если и делать, то в виде отдельной статичной опции в блоке "Фильтр" с включением из админки.

    На счет http://notik.if.ua/, здесь не ajax, там просто загружается сразу весь ассортимент продукции, а когда мы выбираем критерии, то просто лишняя скрывается с помощью CSS и идет перераспределение блоков. Плюс в том, что быстро. Минус - если много товаров, то первая загрузка будет долговато.

    По этому принципу лучше делать сортировку одностраничной таблицы. Как сделал здесь http://svobodamusic.net/music, или таблицы незначительных данных, деленной на несколько страниц.

  11. afwollis хорошее решение логики И-И для выборки по одному полю (value_id).

    Но столкнулся с проблемой.

    GROUP_CONCAT(DISTINCT value_id SEPARATOR '') - здесь сортировка значений не всегда совпадает с $values_without_underline.

    Проблема возникает, если параметры фильтра выстроены не по порядку.

    В общем, с этим кодом

    if (isset($values) && $values != '') {
          
          $values_without_underline = "";
          $values_for_IN = "";
          $values_arr = explode('_', $values);
          asort($values_arr);
          reset($values_arr);
          foreach ($values_arr as $value_id) {
             if (empty($values_for_IN)) {
                $values_for_IN = "'" . $value_id . "'";
             } else {
                $values_for_IN .= ", '" . $value_id . "'";
             }
             $values_without_underline .= $value_id;
          }
          
          $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id ORDER BY value_id ASC SEPARATOR '') FROM " . DB_PREFIX . "product_to_value WHERE product_id = p.product_id AND value_id IN (" . $values_for_IN . ")) = '" . $values_without_underline . "'";
        }
    
    Всё работает безошибочно.

    Сортировал массив и получение value_id.

  12. SooR, так и думал =)

    но вернемся к нашим "баранам" - проблема с фильтром в IE.

    не работает ни в одной версии из тех, что я проверял

    ( ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7780)

    похоже IE напрочь не понимает вот этого:

    $('#filters input, #filters select').live('change', function() {
      effects('', 'jump', 'icon', 200);
      //effects('in', 'fade', 'load', 300);
    	alert("IE test _live change_"); // нет этого сообщения в IE
    	loadContent();
    });

    Можно было просто заменить строку с 'live' на

    $('#filters input, #filters select').change(function() {

    в VI-м IE работает. В остальных думаю тоже.

    Сделал инсталл таблиц с админки. Отсюда - пропадают проблемы с префиксами.

    • +1 1
  13. да у нас все отлично =)

    вы и так уже много сделали, отдав в паблик такой модуль.

    теперь можем "допиливать" его общими усилиями.

    имхо: не обязательно делать установку таблиц через админку.

    ...Сейчас разбираюсь с софтом в связи с заменой ос...

    что на что сменили, если не секрет? :)
    Да на макось.

    Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению

  14. Error: Table 'oktclubru_bbs.product_to_value' doesn't exist
    Error No: 1146
    SELECT oc_p2v.value_id AS value_id FROM product_to_value p2v WHERE p2v.product_id = '658'

    В Редактирование товара выходят следующие ошибки.

    В запрос добавьте свой префикс oktclubru_bbs для каждой из таблиц

  15. Заметил еще одну багу с радиокнопками. Надо как-то разделить имена, потому что если в фильтре две опции с радиокнопками, то будет переключение между всеми, а не внутри опции.Пока пришло на ум разделение с помощью option_id. Делаю.

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.