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

afwollis

Ветеран спільноти
  • Публікації

    11 658
  • З нами

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

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

  1. ...ребят, предложение по улучшению функционала:

    сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара...

    спасибо Alexander Dorogikh и его теме "сложная(?) выборка" :(

    для себя я этот вопрос решил ;)

    если вкратце, то:

    catalog / model / catalog / product.php

    было

    if (isset($values) && $values != '') {
    			$data = array();
    			
    			foreach (explode('_', $values) as $value_id) {
    				$data[] = "value_id = '" . (int)$value_id . "'";
    			}
    			
    			$sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";
    		}
    стало

    /*
    		if (isset($values) && $values != '') {
    			$data = array();
    			
    			foreach (explode('_', $values) as $value_id) {
    				$data[] = "value_id = '" . (int)$value_id . "'";
    			}
    			
    			$sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";
    		}
    		*/
    		if (isset($values) && $values != '') {
    				$data = array();
    				
    				$values_without_underline = "";
    				$values_for_IN = "";
    				foreach (explode('_', $values) as $value_id) {
    					if (empty($values_for_IN)) {
    						$values_for_IN = "'".$value_id."'";
    					} else {
    						$values_for_IN .= ", '".$value_id."'";
    					}
    					$values_without_underline .= $value_id;
    				}
    				
    				// http://forums.mysql.com/read.php?78,354483,354598#msg-354598
    				//(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25';
    				$sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'";
    			}

    = = =

    доработок в движке и, собственно, в фильтре - масса.

    что / где / как отличается от того, что есть у вас - не знаю.

    поэтому за дополнительной информацией по конкретно вашему случаю прошу в ЛС.

    можно с альтернативными контактами - jabber / skype / icq

    а лучший вариант - дождитесь релиза от liftex

    я помогу ему впарить этот FIX в сборку, которую он уже выкладывал.

    а может и вовсе пересобрать её в истинно отдельный модуль.

    в этом случае будут кардинальные изменения на стороне catalog`a.

  2. Так, я уже запуталься...

    Значит что я делаю!

    Я беру viewtopic.php?f=21&t=876&start=10#p7565 вот отсюдова качаю архив с чистой установкой, после viewtopic.php?f=21&t=876&start=50#p7701 делаю как ты говорил, по идее должно всё работать?

    в ЛС я вам в общем-то ответил. если что - стучитесь по указанным контактам.

    лишь отмечу здесь, что я там где-то выше писал (возможно - позже того, как опубликовал тот свой fix) - работаю над вручную установленным (архив "Openstore_module_product_filter_1.0_(manual_install).rar") оригинальным модулем

  3. .

    Делаем возможность выбора из двух вариантов отображения товара: табличный или колоночный

    шаг #1: Делаем шаблоны

    копируем

    табличный шаблон

    catalog/view/theme/default/template/product/category.tpl

    в

    колоночный шаблон

    catalog/view/theme/default/template/product/category2.tpl

    чтобы убедиться во время теста/проверки, что все будет нормально работать, меняем в category2.tpl

    вывод категорий

    <?php for ($i = 0; $i < sizeof($categories); $i = $i + 4) { ?>
          <tr>
            <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
    на

    <?php for ($i = 0; $i < sizeof($categories); $i = $i + 2) { ?>
          <tr>
            <?php for ($j = $i; $j < ($i + 2); $j++) { ?>
    вывод товаров

    <?php for ($i = 0; $i < sizeof($products); $i = $i + 4) { ?>
          <tr>
            <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
    на

    <?php for ($i = 0; $i < sizeof($products); $i = $i + 2) { ?>
          <tr>
            <?php for ($j = $i; $j < ($i + 2); $j++) { ?>
    т.е. вместо вывода по 4 элемента в строке делаем вывод по 2 элемента.

    шаг #2: Добавляем в шаблоны возможность выбора варианта отображения товара

    в любое понравившееся вам место в обоих шаблонах вставляем что-то вроде:

    <!-- viewType addon - start -->
        <div>
        <a href="<?php echo $viewType_default_href; ?>&viewType=tbl" target="_self" title="tbl_View">viewType[tbl]</a>
        
    
        
    <a href="<?php echo $viewType_default_href; ?>&viewType=col" target="_self" title="col_View">viewType[col]</a>
        </div>
        
    
        <!-- viewType addon - end -->
    главное - воткнуть две ссылки:

    // ссылка для применения табличного шаблона
    <a href="<?php echo $viewType_default_href; ?>&viewType=tbl" target="_self" title="">text / image</a>
    
    // ссылка для применения колоночного шаблона
    <a href="<?php echo $viewType_default_href; ?>&viewType=col" target="_self" title="">text / image[col]</a>
    как вы их оформите, и куда вставите - дело ваше.

    я добавил предыдущий код после

      <div class="middle">
        <table style="padding-bottom:10px;">
    	  <tr>
    	    <?php if ($thumb) { ?>
    	        <td><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /></td>
    	    <?php } ?>
    	    <?php if ($description) { ?>
    	        <td><?php echo $description; ?></td>
    	    <?php } ?>
    	  </tr>
        </table>

    шаг #3: Правим файл catalog/controller/product/category.php

    а) перед

    $this->load->model('catalog/category');
    		$this->load->model('tool/seo_url');
    вставляем

    //=======
    		$viewType_tmpl["tbl"] = "category.tpl"; //это название табличного шаблона
    		$viewType_tmpl["col"] = "category2.tpl"; //это название колоночного шаблона
    		
    		$viewType = "";
    		if (isset($this->session->data['viewType'])) {
    			$viewType = $this->session->data['viewType'];
    		}
    		if (isset($this->request->get['viewType'])) {
    			$viewType = $this->request->get['viewType'];
    		}
    		
    			if ($viewType == "col") {
    				$viewType_tmpl["current"] = $viewType_tmpl["col"];
    				// пишем в сессию пользователя информацию о выбранном варианте отображения
    				// спасибо __alexjk__ за напоминание о том, что эту инфу можно и нужно где-то хранить ;)
    				$this->session->data['viewType'] = "col";
    			} else {
    				$viewType_tmpl["current"] = $viewType_tmpl["tbl"];
    				// пишем в сессию пользователя информацию о выбранном варианте отображения
    				// спасибо __alexjk__ за напоминание о том, что эту инфу можно и нужно где-то хранить :(
    				$this->session->data['viewType'] = "tbl";
    			}
    		//=======

    б) после

    $this->data['sorts'][] = array(
    					'text'  => $this->language->get('text_model_desc'),
    					'value' => 'p.model-DESC',
    					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=DESC')
    				);
    но до

    $url = '';
    вставляем

    // ======
    				$this->data['viewType_default_href'] = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . $url);
    				// ======

    в) меняем все вхождения

    '/template/product/category.tpl'
    на

    '/template/product/'.$viewType_tmpl["current"]

    = = = = = = = =

    пользуемся, пишем замечания, дополнения

  4. .

    http://lmgtfy.com/?q=imagejpeg()

    bool imagejpeg  ( resource $image  [, string $filename  [, int $quality  ]] )
    creates a JPEG file from the given image.

    http://php.net/manual/en/function.imagejpeg.php

    т.е. это создание новой jpeg-картинки из того, что у тебя в "буферной переменной", а не из существующего файла.

    файл, в котором возникает ошибка указан, строки в нем - тоже есть.

    смотри что там получается.

    + к этому кодировка на всем сайте меняется на крякозябры.

    логично. если вкратце, то:

    при выводе чего-либо (в данном случае - сообщений об ошибках) перед браузер пытается автоматически определить кодировку страницы.

    так как ошибки на английском - о русских символах в теле документа можно забыть.

    Значит дело в чем-то другом. В чем?

    вспомнилась одна цитатка, возможно есть/была на БАШе.

    цитировать я не стал... :(

  5. Я делал это действие, нечего не изменилось...

    wowkas, вот с этого и надо было начинать.

    Я вроде ничего больше не делал - теперь уже и не знаю =)

    Могу предложить два варианта:

    1) проверьте на всякий случай файл

    admin/view/template/catalog/get_ajax_options.tpl

    тут про checkbox`ы ...
          <?php } else if ($category_option['type'] == 1) { ?>
              <?php if ($category_option['category_option_values']) { ?>
                <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?>
                  <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?>
                  <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label>
                  <?php } else { ?>
                  <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label>
                  <?php } ?>
                <?php } ?>
              <?php } ?>
          <?php } else if ($category_option['type'] == 2) { ?>
              ... тут про select

    имя radio-input`a обязательно должно быть вида

    name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"
    именно благодаря

    <?php echo $category_option['option_id']; ?>
    имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.

    2) перекачать архив, поставить вручную и сделать FIX, который я предложил.

  6. можно так:

    0. делаешь backup базы + файлов магазина;

    1. ставишь такую же версию;

    2. заливаешь базу из backup`a;

    если делались изменения в файлах / ставились модули, плагины / еще что:

    3. копируешь создавшиеся конфиги в какую-нибудь папку у себя.

    4. заливаешь файлы из backup`a поверх с перезаписью;

    5. проставляешь заново права на папки/файлы (благо не так много и не в очень разных местах) (смотри install, если не помнишь, что где должно быть);

    6. заливаешь поверх сохраненные конфиги.

    ну или как-то так =)

    мож кому не понравится такой метод, и может он "малость не оптимален".

    я похожим способом клонирую сайты локально (когда есть необходимость).

  7. ...5. особенно необходимым является вот такого рода фильтр для разного рода товара...

    смотрим в сторону Нужен ли модуль "фильтр в категории" ?

    SooR проделал колоссальный труд и отдал почти шедевр в свободный доступ :roll:

  8. DEATH, можно пример проблемы посмотреть?

    вобще (тему полностью не читал) думаю, что можно сделать "второй файловый менеджер" для работы с файлами отличными от изображений. а тот, который по-умолчанию, оставить для загрузки исключительно фото :roll:

  9. ...А подскажи пожалуйста - как поставить новый jquery?...

    самому пришлось ставить последнюю доступную версию jQuery из-за необходимости использования jQuery-UI.

    изменения проводил только для каталога

    catalog/view/theme/default/template/common/header.tpl

    <!-- -->
    <!--link type="text/css" href="catalog/view/javascript/jquery/jquery-ui/css/ui-lightness/jquery-ui-1.8.6.custom.css" rel="stylesheet" /-->
    <link type="text/css" href="catalog/view/javascript/jquery/jquery-ui/css/custom-theme/jquery-ui-1.8.6.custom.css" rel="stylesheet" />
    <!-- -->
    <?php //<script type="text/javascript" src="catalog/view/javascript/jquery/jquery-1.3.2.min.js"></script> ?>
    <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-ui/js/jquery-1.4.3.min.js"></script>
    <script type="text/javascript" src="catalog/view/javascript/jquery/thickbox/thickbox-compressed.js"></script>
    <link rel="stylesheet" type="text/css" href="catalog/view/javascript/jquery/thickbox/thickbox.css" />
    <script type="text/javascript" src="catalog/view/javascript/jquery/tab.js"></script>
    
    <!-- -->
    <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-ui/js/jquery-ui-1.8.6.custom.min.js"></script>
    <!-- -->
    пока полет нормальный.
  10. ...но вернемся к нашим "баранам" - проблема с фильтром в IE.

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

    ( :roll: 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();
    });
    ...

    пересмотрел свою позицию насчет правки данного кода (:

    просто "разъединил" обработку действий

    $('#filters select').live('change', function() {
      effects('', 'jump', 'icon', 200);
      //effects('in', 'fade', 'load', 300);
    	loadContent();
    });
    $('#filters input').live('click', function() {
      effects('', 'jump', 'icon', 200);
      //effects('in', 'fade', 'load', 300);
    	loadContent();
    });
    обратите внимание на

    $('#filters input').live('click', function() {

    UPD

    вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом

    /*
    $('#filters select').live('change', function() {
      effects('', 'jump', 'icon', 200);
      //effects('in', 'fade', 'load', 300);
    	loadContent();
    });
    */
    поэтому я его закомментировал (у меня используются только checkbox`ы) :?

    = = =

    кто-нибудь думал над реализацией функционала, упомянутого в сообщении

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

  11. ...Если не сложно реализуйте пока НГ не наступил :roll:

    может кто и возьмется, но учитывая

    ...Начало бета-тестирования

    1 декабря 2010

    Рады сообщить о начале бета-тестирования нашего нового сервиса..

    я бы хорошо подумал, прежде чем ставить нечто подобное на "продакшн"

    P.S.

    ...Зная opencart думаю плагин написать дело 1 часа или того меньше...

    а вот такие "умные мысли" в 90% случаев отбивают напрочь желание хотя бы ознакомиться с предложением, не говоря уже о каком-либо сотрудничестве.
  12. Options Update BUG

    не знаю, почему не видел этот баг раньше, но вот столкнулся:

    исходные данные:

    - чистая установка OpenCart 1.4.9.1;

    - установленный вручную модуль.

    для дальнейшего усовершенствования модуля забиты такие опции:

    post-730-1293741792,217_thumb.png

    Действия:

    решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800".

    в итоге получил:

    Error: Duplicate entry '10' for key 1
    Error No: 1062
    INSERT INTO category_option_value SET option_id = '3', value_id = '10'
    на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.

    уже поковырялся и добавил в

    admin / model / catalog / filter.php / public function updateOption($option_id, $data) {}

    print "
        		<strong>public function updateOption($option_id, $data) {}</strong>
        		<pre>";
        print_r($data);
        print "</pre>";
    post-730-1293741792,2343_thumb.png

    в этой функции есть такой участок:

    $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'");
        $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'");
        
        if (isset($data['option_value'])) {
          foreach ($data['option_value'] as $value_id => $option_value) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");
            
            foreach ($option_value['language'] as $language_id => $language) {
    		$this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'");
    	}
          }
        }
    все, что находится здесь внутри условия

    if (isset($data['option_value'])) {
    и отдает нам указанную выше ошибку.

    однако корни проблемы растут малость из другого места... :?

    из строк

    <?php $option_value_row = 0; ?>
    ...
            <?php $option_value_row++; ?>
    ...
    
    <script type="text/javascript"><!--
    ...
    var option_value_row = <?php echo $option_value_row; ?>;
    
    function addValue() {
    	html  = '<tr id="option_value' + option_value_row + '" class="option">';
    	html  += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">';
    	<?php foreach ($languages as $language) { ?>
    	html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" />
    ';
    	<?php } ?>
    	html += '</td>';
    	html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>';
    	html += '</tr>';
    	
    	$('#block_option').append(html);
    	
    	option_value_row++;
    }
    ...
    //--></script>
    
    в файле admin / view / template / module / filter_form.tpl .

    = = =

    Options Update FIX

    для себя решил проблему следующим образом:

    1) файл admin / view / template / module / filter_form.tpl

    в функции function addValue() {} заменил строку

    html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" />
    ';
    на

    html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" />
    ';
    т.е. просто добавил "_new" в генерируемый для новых значений value_id

    2) файл admin / model / catalog / filter.php

    в функции public function updateOption($option_id, $data) {}

    заменил строку

    $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");
    на

    $new_value_pos = strpos($value_id, "new");
    				if ($new_value_pos !== false) {
    					$this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'");
    					
    					$value_id = $this->db->getLastId();
    				} else {
    					$this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");
    				}
    теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".

    и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения.

    иначе - используется существующий value_id, который, собсно, и был передан в функцию.

    post-730-1293741792,2895_thumb.png

    = = =

    у кого есть такая проблема - попробуйте пофиксить моим способом :roll:

    у кого была такая проблема - поделитесь, пожалуйста, своим решением ;)

    у кого нет и небыло - вам можно только позавидовать :D

    • +1 1
  13. эммм...

    вариант конечно правильный, если думать только о выводе информации.

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

    так что советую переработать вот этот участок кода:

    catalog / controller / product / category.php (строки ~45 - 68)

    $category_info = $this->model_catalog_category->getCategory($category_id);
    	
    		if ($category_info) {
    	  		$this->document->title = $category_info['name'];
    			
    			$this->document->keywords = $category_info['meta_keywords'];
    			
    			$this->document->description = $category_info['meta_description'];
    			
    			$this->data['heading_title'] = $category_info['name'];
    			
    			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
    			
    			$this->data['text_sort'] = $this->language->get('text_sort');
    			
    			$this->load->model('tool/image'); 
    			
    			if ($category_info['image']) {
    				$image = $category_info['image'];
    			} else {
    				$image = '';
    			}
    
    			$this->data['thumb'] = $this->model_tool_image->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
    и либо изменить функцию

    $this->model_catalog_category->getCategory($category_id);
    , либо написать другую, которая бы просто проверяла существование категории с заданным ID.

    и подставить ее вместо вышеуказанной

    $category_info = $this->model_catalog_category->getCategory($category_id);
    :roll:
  14. никто не запрещает вам исправить эту ситуацию =)

    однако позволю себе вкратце пройтись по вашим пунктам:

    1) 2) 4) 5)

    каждый делает так, как ему надо. "jQuery forms + validate" (или как там оно) или "jQuery + JS regExp"и вперед https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif

    3) + последнее, без номера)

    Вы меня конечно извините, но ёлки-моталки, вы ведь должны знать, что, разработкой движка, как такового, занимаются англоязычные разработчики.

    А из этого уже и вытекает расположение полей "ФИО" - оно просто-напросто не рассчитано на русскоязычных пользователей =)

    и добавлю от себя:

    ...поле Фамилия явл. наиболее важным...

    мне, например, важнее Имя и Отчество человека.

    а фамилия в общем-то чуть ли не побоку.

    хотя, если вы обращаетесь к своим клиентам "Уважаемый, ФАМИЛИЯ" вместо "Уважаемый, Имя Отчество", то тут я вам не советчик :o

  15. ребят, предложение по улучшению функционала:

    сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара.

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

    выбрать все продукты, у которых
    ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] )
    AND
    ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] )
    AND
    ( option_id_N [value_id = n OR value_id = n OR value_id = n] )
    UPD

    думаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o

    А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif

    мне кажется, что это будет очень полезной штукой

    над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал.
  16. А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...

    вот тут к сожалению помочь не могу :o

    ибо пиляю его под жесткие условия.

    ...Сам модуль пока у себя не активировал...

    значит не столкнулись еще с какими-либо сложностями.

    с чем я вас и могу поздравить :?

    все, нижеизложенное, является толстым "имхо`м"

    и не претендует на трактование оного, как единственно верного ответа

    лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно.

    если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала...

    до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif

  17. свой последний вопрос решил для себя таким образом:

    var $filter_options_fields = $("#filters input:checked").serializeArray();
    			jQuery.each($filter_options_fields, function(j, $filter_options_field){
    				if ($filter_options_field.name.match(/value_id[d*]/)) {
    				//alert($filter_options_field.name);
    					if (j == 0) {
    						$filter_options_values += $filter_options_field.value;
    					} else if ($filter_options_field.value == '') {
    						$filter_options_values += '';
    					} else {
    						if ($filter_options_values == '') {
    							$filter_options_values += $filter_options_field.value;
    						} else {
    							$filter_options_values += '_' + $filter_options_field.value;
    						}
    					}
    				}
    			});
    спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif )

    JavaScript Kit -> RegExp (regular expression) object

    http://www.javascriptkit.com/jsref/regexp.shtml

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

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

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

    ( https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif 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();
    });
    пойду потестирую еще.

    народ, кто пользуется фильтром, не проходите мимо проблемы :?

    UPD:

    пока писал сообщение - попутно тестил.

    вылечил проблему так:

    1. закомментировал приведенный выше код;

    2. добавил в вывод каждого элемента (у меня используются только checkbox`ы)

    onclick="markFilterOption();"
    в итоге получилось так:

    остатки оригинального кода

    <script type="text/javascript"><!--
    /*
    $('#filters input, #filters select').live('change', function() {
      effects('', 'jump', 'icon', 200);
    	loadContent();
    	alert("IE test _live change_");
    	markFilterOption();
    });
    */
    
    // Handling inputs in filter and getting results
    /*
    function loadContent() {
      var $values = '';
      var $fields = $("#filters input, #filters select").serializeArray();
      jQuery.each($fields, function(i, $field){
         if (i == 0) {
          $values += $field.value;
         } else if ($field.value == '') { 
          $values += '';
         } else {
          $values += '_' + $field.value;
         }
      });
    
      $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){
        if (status == "error") {
          error(xhr.status + " " + xhr.statusText);
        } else {
          //effects('out', 'fade', 'load', 200);
        }
      });
    }
    */
    
    // Preloader Effects
    function effects(way, type, el, dur) {
      el = $('#' + el);
      el.parent().css({'position' : 'relative'});
      
      if (type == 'fade') {
        if (way == 'in') {
          el.fadeIn(dur);
        } else {
          el.fadeOut(dur);
        }
      }
      
      if (type == 'jump') {
        el.css({'position' : 'relative'});
        el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur);
      }
    }
    // If jQuery didn't loaded something
    function error(mess) {
      var msg = "Error loading: ";
      $("#filters").prepend(msg + mess);
    }
    
    //--></script>

    собсно код, который сейчас отвечает за работу фильтра

    (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D )

    <script type="text/javascript" charset="utf-8">
    	// let's start the jQuery while I wait.
    	// step 1: onload - capture the submit event on the form.
    	//$(function() { // onload...do
    	
    	function markFilterOption() {
    		effects('', 'jump', 'icon', 200);
    		$('#filters').submit();
    	}
    	
    	$(document).ready(function () {
    		$('#filters').submit(function() {
    			// now we're going to capture *all* the fields in the
    			// form and submit it via ajax.
    			
    			// :input is a macro that grabs all input types, select boxes
    			// textarea, etc.  Then I'm using the context of the form from 
    			// the initial '#contactForm' to narrow down our selector
    			var $values = '';
    			var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray();
    			jQuery.each($fields, function(i, $field){
    				if (i == 0) {
    					$values += $field.value;
    				} else if ($field.value == '') {
    					$values += '';
    				} else {
    					$values += '_' + $field.value;
    				}
    			});
    			
    			// now if I join our inputs using '&' we'll have a query string
    			jQuery.ajax({
    				data: "",
    				url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values,
    				timeout: 2000,
    				error: function() {
    					alert("Failed to submit");
    				},
    				success: function(r) {
    					$('#content').html(r);
    				}
    			}) // checkout http://jquery.com/api for more syntax and options on this method.
    			
    			// re-test...
    			// by default - we'll always return false so it doesn't redirect the user.
    			return false;
    		})
    	})
    </script>

    мой код корректно работает в:

    opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)

    осталось "пофиксить навигацию".

    ибо если нет JS/AJAX (или вдруг сбой какой произошел после AJAX-получения списка категорий/товаров), то при переходе на какую-либо страницу видим "немного" не то, что хотелось бы :D

    на этом все.

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

    UPD2

    ...не долго мучалась старушка в высоковольтных проводах...

    все здорово, фильтр работает во всех браузерах.

    только вот значения опций фильтра теперь не передаются :D

    а значит битва еще не окончена :?

    UPD3

    ну йомайо. сколько можно провтыкивать такие моменты... :o

    проблема со сбором значений опций фильтра была в том,

    что я собирал input`ы с неправильными именами.

    переработал код вот так (сугубо под свои нужды):

    var $filter_options_fields = $("#filters input:checked").serializeArray();
    			jQuery.each($filter_options_fields, function(j, $filter_options_field){
    				if ($filter_options_field.name != "parent" && $filter_options_field.name != "subcatID[]") {
    				//alert($filter_options_field.name);
    					if (j == 0) {
    						$filter_options_values += $filter_options_field.value;
    					} else if ($filter_options_field.value == '') {
    						$filter_options_values += '';
    					} else {
    						if ($filter_options_values == '') {
    							$filter_options_values += $filter_options_field.value;
    						} else {
    							$filter_options_values += '_' + $filter_options_field.value;
    						}
    					}
    				}
    			});
    отсюда, вобщем-то, вытекает вопрос:

    можно ли как-то так (более "элегантно" ИМХО)

    var $fields = $("#filters input[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]'], #filters select[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]']").serializeArray();
    организовать сбор данных input`ов (или каких других элементов) по именам.

    ушел в поиски регулярок в JS

  19. SSShop, спасибо за терпение и чтение моих не всегда умных мыслей :)

    во-первых:

    ...всем товарам выставил одинаковый порядок сортировки...

    естессно тут он будет сортировать по имени или модели или хз, что там найдет. ибо значение "порядок сортировки" у всех данных одинаковый и просто опускается.

    во-вторых:

    возможно вы правы и я опять что-то прое#а... упустил.

    но к черту.

    если никто не подскажет вам, как решить этот вопрос - отпишусь через пару дней.

    сейчас есть срочные дела.

  20. "даешь IE" или "что-то не работает"

    XP SP3 7.0.5730.13

    поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина.

    кроме того, есть информация, что вобще ни в одной версии IE не работает.

    кто тестил? какие результаты? мысли?

    сейчас думаю чем искать причину.

    но, думаю, проблема в реализации

    $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){
        if (status == "error") {
          error(xhr.status + " " + xhr.statusText);
        } else {
          //effects('out', 'fade', 'load', 200);
        }
      });
    попробую переписать на что-то типа

    jQuery.ajax({
    				data: inputs.join('&'),
    				url: "index.php?route=product/get_ajax_products&path=20&values=" + $values,
    				timeout: 2000,
    				error: function() {
    					//console.log("Failed to submit");
    					alert("Failed to submit");
    				},
    				success: function(r) {
    					//alert(r);
    					$('#content').html(r);
    				}
    			}) // checkout http://jquery.com/api for more syntax and options on this method.
    ибо данный код исправно работает в четырех основных браузерах:

    opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)...

  21. OOPS!....Page Error 500 has occurred.

    печально... =)

    т.е. с таким .htaccess:

    AddHandler phpini-cgi .php .htm
    Action phpini-cgi /cgi-bin/php5-custom-ini.cgi
    сайт работает, но не работает SEO, а с таким:

    AddHandler phpini-cgi .php .htm
    Action phpini-cgi /cgi-bin/php5-custom-ini.cgi
    
    # Подробнее на https://myopencart.com
    
    Options +FollowSymlinks
    
    # Запретить листинг директорий
    Options -Indexes
    
    # Закрыть доступ к файлам шаблонов
    <FilesMatch ".tpl">
    Order deny,allow
    Deny from all
    </FilesMatch>
    
    # Необходимо для ЧПУ.
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)?*$ index.php?_route_=$1 [L,QSA]
    AllowOwerride All
    
    (в обоих случаях в конце файла должна быть пустая строка)

    получаем сервер-oops-500 ? https://opencartforum.com/public/style_emoticons/default/icon_question.gif

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

Important Information

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