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

SooR

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

    1 508
  • З нами

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

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

  1. Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код

    Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64
    Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки.
    • +1 1
  2. Конечно! Забыл о префиксах, тогда запрос будет вида

    CREATE TABLE IF NOT EXISTS `oc_category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `oc_product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    • +1 1
  3. Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил AJAX листалку в категории и AJAX сортировку. Всё это активируется после первого изменения параметров фильтра со стороны пользователя за время нахождения в категории.

    Опишу ф-ции модуля Opencart Product Filter 1.0 :-) :

    добавление опций фильтра и значений к ним

    указание сортировки опций

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

    поддержка мультиязычности

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

    AJAX подгрузка товаров категории при изменении состояния фильтра.

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

    Если что, пишите в асю, сюда редко захожу.

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

    В следующей версии хочу сделать еще несколько типов полей фильтра: слайдер, слайдер-диапазон, текстовое поле.

    Перейдем к установке:

    Если у вас чистая система и вы еще ничего в её коде не изменяли, то качайте архив Openstore_module_product_filter_1.0_(clean_install).rar и просто извлеките файлы в корень с заменой и выполните запрос в базу данных

    CREATE TABLE IF NOT EXISTS `category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Если нет, то установка "вручную", или на систему, которая уже подвергалась изменениям в коде:

    1) Делаем запрос в базу данных

    CREATE TABLE IF NOT EXISTS `category_option` (  `option_id` int(10) NOT NULL AUTO_INCREMENT,  `type` int(1) DEFAULT '0',  `sort_order` int(10) DEFAULT '0',  PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` (  `option_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`option_id`,`language_id`),  KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` (  `option_id` int(11) NOT NULL,  `category_id` int(11) NOT NULL,  PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` (  `value_id` int(10) NOT NULL AUTO_INCREMENT,  `option_id` int(10) DEFAULT '0',  PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` (  `value_id` int(10) NOT NULL DEFAULT '0',  `language_id` int(10) NOT NULL DEFAULT '0',  `option_id` int(10) NOT NULL DEFAULT '0',  `name` varchar(127) DEFAULT NULL,  PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` (  `product_id` int(11) NOT NULL,  `value_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    2) В файле adminviewtemplatecatalogproduct_form.tpl

    После

    <a tab="#tab_links"><?php echo $tab_links; ?></a>
    Вставляем

    <a tab="#tab_filter">Опции фильтра</a>
    После блока

    <div id="tab_general"></div>
    Вставляем

    <!-- Start tab filter-->      <div id="tab_filter">        Сначала необходимо выбрать категории товара      </div>      <!-- End tab filter-->
    Теперь идем в конец файла, ДО

    <?php echo $footer; ?>
    Вставляем

    <script type="text/javascript"><!--$.tabs('#tabs a'); $.tabs('#languages a'); //--></script><script type="text/javascript"><!--$('input[name=product_category[]]').live('change', function() {	getOptions();});<?php if (isset($this->request->get['product_id'])) { ?>  <?php $if_product_id = '&product_id=' . $this->request->get['product_id']; ?>  getOptions();<?php } else { ?>  <?php $if_product_id = ''; ?><?php } ?>function getOptions() {  var loadUrl = '';  var fields = $("input[name=product_category[]]").serializeArray();  jQuery.each(fields, function(i, field){     if (i == 0) {      loadUrl += field.value;     } else {      loadUrl += '_' + field.value;     }   });    $('#tab_filter').load('index.php?route=catalog/product/filter&token=<?php echo $token; ?><?php echo $if_product_id; ?>&path=' + loadUrl); }//--></script>
    Сохраняем и закрываем.

    3) Открываем файл adminmodelcatalogproduct.php

    После блока (метод addProduct)

    if (isset($data['product_store'])) {			foreach ($data['product_store'] as $store_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");			}		}
    Вставляем

    // Start Filter    if (isset($data['product_to_value_id'])) {			foreach ($data['product_to_value_id'] as $value_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'");			}		}    // End filter
    После блока (метод updateProduct)

    $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");		if (isset($data['product_store'])) {			foreach ($data['product_store'] as $store_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");			}		}
    Вставляем

    // Start filter		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");				if (isset($data['product_to_value_id'])) {			foreach ($data['product_to_value_id'] as $value_id) {				$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'");			}		}		// End filter
    После (метод copyProduct)

    $data = array_merge($data, array('product_store' => $this->getProductStores($product_id)));
    Вставляем

    // Start filter			$data = array_merge($data, array('product_to_value_id' => $this->getProductValues($product_id)));			// End filter
    После (метод deleteProduct)

    $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");
    Вставляем

    // Start filter		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'");		// End filter
    Идем в конец файла, до закрытия класса вставляем

    // Start filter	public function getProductValues($product_id) {    $values_id = array();       $query = $this->db->query("SELECT " . DB_PREFIX . "p2v.value_id AS value_id FROM " . DB_PREFIX . "product_to_value p2v WHERE p2v.product_id = '" . (int)$product_id . "'");        foreach ($query->rows as $result) {    	$values_id[] = $result['value_id'];    }        return $values_id;    }  // End filter
    Сохраняем и закрываем

    4) Открываем admincontrollercatalogproduct.php

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

    // Start filter   public function filter() {          $this->load->model('catalog/filter');          $this->load->model('catalog/product');        $this->data['category_options'] = array();        if (isset($this->request->get['path']) && $this->request->get['path'] != '') {             $parts = explode('_', $this->request->get['path']);            $results = $this->model_catalog_filter->getOptionByCategoriesId($parts);             if ($results) {               foreach($results as $option) {              $this->data['category_options'][] = array(                'option_id' => $option['option_id'],                'name' => $option['name'],                'type' => $option['type'],                'category_option_values' => $this->model_catalog_filter->getOptionValues($option['option_id'])              );            }          } else {            $this->data['message'] = 'Этой категории товаров не присвоен ниодин фильтр';          }          } else {          $this->data['message'] = 'Сначала выберите категорию товаров';        }                  if (isset($this->request->get['product_id'])) {             $product_id = $this->request->get['product_id'];          } else {             $product_id = 0;          }                       $product_info = $this->model_catalog_product->getProductValues($product_id);                    if (isset($this->request->post['product_to_value_id'])) {             $this->data['product_to_value_id'] = $this->request->post['product_to_value_id'];          } elseif (isset($product_info)) {             $this->data['product_to_value_id'] = $this->model_catalog_product->getProductValues($product_id);          } else {             $this->data['product_to_value_id'] = array();          }                  $this->data['language_id'] = $this->config->get('config_language_id');                 $this->template = 'catalog/get_ajax_options.tpl';                 $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));       }       // End filter
    Сохраняем и закрываем.

    5) Открываем catalogmodelcatalogproduct.php

    Заменяем

    public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
    На

    public function getProductsByCategoryId($category_id, $values, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
    До блока

    $sort_data = array(			'pd.name',			'p.sort_order',			'special',			'rating',			'p.price',			'p.model'		);
    Вставляем

    // Start filter          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 " . DB_PREFIX . "product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")";        }        // End filter
    Заменяем весь метод public function getTotalProductsByCategoryId

    На

    public function getTotalProductsByCategoryId($category_id = 0, $values) {		$sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2c.category_id = '" . (int)$category_id . "'";        // Start filter    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) . ")";    }    // End filter        $query = $this->db->query($sql);    		return $query->row['total'];	}
    В этом же методе, до
    $query = $this->db->query($sql);
    Вставляем
    // Start filter    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) . ")";    }    // End filter
    Сохраняем, закрываем.

    6) Открываем catalogcontrollerproductcategory.php

    Заменяем

    $product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id);
    На

    $product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id, $values = NULL);
    Заменяем

    $results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
    На

    $results = $this->model_catalog_product->getProductsByCategoryId($category_id, $values = NULL, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
    7) Качаем архив Openstore_module_product_filter_1.0_(manual_install).rar и извлекаем в корень сайта с заменой.

    8) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно.

    • +1 4
  4. Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.

  5. Fatal error: Call to undefined function utf8_decode() in /home/valer/data/www/konserva.ru/admin/controller/catalog/product.php on line 987

    Не найдена функция utf8_decode() в контроллере admin/controller/catalog/product.php при попытке обращения к ней на строке 987.

    utf8_decode() - это стандартная функция языка PHP с включенным модулем XML парсера.

    100% хостинг.

    Решение: пишите хостеру чтобы включили XML парсер и работала функция utf8_decode().

    ИЛИ

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

    /home/valer/data/www/konserva.ru/admin/controller/catalog/product.php

    вот этот кусок

    foreach ($this->request->post['product_description'] as $language_id => $value) {      		if ((strlen(utf8_decode($value['name'])) < 1) || (strlen(utf8_decode($value['name'])) > 255)) {        		$this->error['name'][$language_id] = $this->language->get('error_name');      		}    	}		    	if ((strlen(utf8_decode($this->request->post['model'])) < 1) || (strlen(utf8_decode($this->request->post['model'])) > 64)) {      		$this->error['model'] = $this->language->get('error_model');    	}
  6. Ну разумеется не передается, вы наверное не заметили внизу шаблона скрипт отправки get в контроллер?

    if ($('#on_id').attr('checked')) {		url += '&on_id=1';	}

    Это добавить после

    if ($('#description').attr('checked')) {		url += '&description=1';	}
    И не забудьте присвоить чекбоксу id="on_id".

    На счет "не все находит", есть два способа:

    Возможно нужно принудительно указать тип переменной для $sql .= " AND pd.product_id = '" . $this->db->escape($keyword) . "'";

    т.е. выйдет

    $sql .= " AND pd.product_id = '" . (int)$keyword . "'";

    Хоть я не уверен в правильности такого решения.

    Второй способ глупый, но быстрый. Сымитируйте синтаксическую ошибку запроса SQL (напр указанием product_i вместо product_id) и посмотрите в дебаге что хочет вставить модель в запрос, когда дело касается поиска по id.

    Возможно, что кроме числа передается пробел или что-то левое.

  7. Ну правильно. Делаешь чекбокс в шаблоне

    <legend><input type="checkbox" name="on_id" value="" />По id (артикулу)</legend>
    в модели catalogmodelcatalogproduct.php, в методе public function getProductsByKeyword добавь после аргумента $description = FALSE, вот это $on_id = FALSE,

    В этом же методе, замени конструкцию

    if (!$description) { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";} else { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%')";}
    на эту

    if ($description) { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%')";} elseif ($on_id) { $sql .= " AND pd.product_id = '" . $this->db->escape($keyword) . "'";} else { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";}
    после этого осталось изменить путем копипаста контроллер сatalog/controller/product/search.php

    по аналогии с description

  8. Эммм... а смысл тогда вводить название, если знать id?Не совсем понятно "если не нашел по названию, то нашел по product_id".По id то понятно что найдет)Я думал вы имеете ввиду, чтобы человек не парился с приблизительным поиском, то введя id он гарантированно попадет на нужный ему товар!?

  9. Если хоть немного в ремесле разбираетесь, то чат установить не составит труда.

    К примеру, воспользуйтесь этим готовым решением http://www.ajaxdaddy.com/demo-jquery-shoutbox.html

    Еще есть такой вариант http://www.freeshoutbox.net/

    такой http://borisding.com/projects/qshout/

    это лучшее что видел http://tutorialzine.com/2010/10/ajax-web-chat-css-jquery/

    Для "выставления" товаров нужно несколько дописать скрипт магазина. Просто модуля пока не видел.

  10. Если вам нужен не навороченный форум, то могу поделиться своей собственной работой - форум для opencart.Использует общие с opencart библиотеки, модели, не требует интеграции, просто копирование файлов и запрос бд. Осталось добавить формы в админку. Вскоре выложу как дополнение.

  11. Ну в общем с этим я тоже боролся.

    В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии.

    Вот что получилось в двух проектах

    http://svobodamusic.net/music (нажать на фильтр материала)

    и http://poliit.com.ua/index.php?route=product/category

    Оба c AJAX.

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

    Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product.

    • +1 2
  12. Вот собственно первый опыт работы с openCart:1. http://bijouri.ru2. ocStore 0.1.3 + доработки3. 10 в сутки(сайту неделя)4. 2domains, 100 р/мес.5. Интернет-магазин женской бижутерии. Фабричная бижутерия и бижутерия ручной работы.

    http://bijouri.ru/busy-belye-konfetkiхотяб css пофикси.Модуль новостей мне удобней было писать в information.Т.е. структура такова information/news - всеinformation/news&news_id=32423424 если есть $_GET['news_id'] . . .
  13. Моя городость )) 1. http://svobodamusic.net/index.php

    2. Давно было, 1.4 ровно вродь.

    3. эх, к сожалению теперь нулевая, в нашей гр-ной стране не фунциклирует цифровая подпись.

    4. hostpro.ua, план Лучший

    5. Торговая площадка авторской музыкой / аранжировками / джинглами и пр.

    Делал на заказ. Подразумевался как клон http://audiojungle.net/.

    Но решили по-другому.

    Что было изменено и добавлено:

    Изменен вход в систему.

    Добавлены поля в регистрацию.

    AJAX фильтр и листалка в категории.

    Регистрация как автором так и пользователем.

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

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

    Биллинговая панель с личным счетом.

    И многое другое... в общем от опенкарта осталось ядро и библиотека)

    1. http://poliit.com.ua

    2. Честно, не помню, одна из последних (у меня несколько версий, с и без storage)

    3. пока 30-50 чел

    4. hostpro.ua, план Именинник (висят еще 4 сайта)

    5. Одежда. Прикрутил лупу для увеличения, AJAX листалку, AJAX фильтр по фиксированным критериям, прайс-лист. Дизайнер с меня фиговый, но в коде попыхтел.

    1. http://a-3.od.ua

    2. Одна из последних

    3. 40-50 чел

    4. hostpro.ua, план Именинник (висят еще 4 сайта)

    5. Архитектурная студия. Сайт портфолио. Куча графики и jQuery, это не магазин, но платформа идеальна и для галереи.

    1. http://guitarsound.com.ua (реворк http://muztang.com.ua, который был на медленном виртуалмарте)

    2. Одна из последних

    3. 40-50 чел

    4. hostpro.ua, план Оптима

    5. Продажа аудиотехники.

    Прикрутил новости, статьи с категориями, SEO к новостям и статьям и их категориям, изменил положение корзины и сделал возможным добавлять товары из категории. Существенный редизайн интерфейса стандартного OpenCart, смотрите в общем.

    Есть еще пару проектов, но пока не в действии.

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

  14. Псевдонимы... псевдонимы... пора бы написать автотранслит. Минутное дело.Тем кто жалуется: есть две причины не работы SEO URL1. htaccess--1.1 Не удалено расширение ".txt" файла .htaccess--1.2 На хостинге не работает RewriteEngine On2. Не прописаны вручную каждому товару или категории псевдонимы в админке.

  15. Я не проверял, но теоретически это должно работать.Замени в catalogmodeltoolseo_url.php

    } elseif ($key == 'path') {$categories = explode('_', $value);foreach ($categories as $category) {$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");if ($query->num_rows) {$url .= '/' . $query->row['keyword'];} else {return $link;}}unset($data[$key]);}
    на это
    } elseif ($key == 'path') {$categories = explode('_', $value);$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)end($categories) . "'");if ($query->num_rows) {$url .= '/' . $query->row['keyword'];} else {return $link;}unset($data[$key]);}
  16. Создавая очередной магазин на Opencart, наткнулся на раздражающую проблему с дочерними категориями и присваивания им ссылок ЧПУ.

    Если в категории с введенным полем "Псевдоним" (напр. computers) создать подкатегорию и не заполнять в ней поле "Псевдоним", то когда мы зайдем в категорию http://mysite.com/computers и захотим перейти в её дочернюю категорию - ничего не получится, мы останемся в этой же категории http://mysite.com/computers, а ссылка на дочернюю категорию будет вида http://mysite.com/computers, т.е. своего родителя, а не обычная ссылка без SEO_URL.

    Т.е. вы сможете перейти в дочернюю категорию с включенным SEO_URL только после присвоения дочерней категории псевдонима для ЧПУ. А если нам это не надо?

    Тогда, открываем файл ./catalog/model/tool/seo_url.php

    И заменяем в нем условие (line 28)

    if ($query->num_rows) {							$url .= '/' . $query->row['keyword'];						}
    на

    if ($query->num_rows) {							$url .= '/' . $query->row['keyword'];						} else {return $link;}
  17. В общем решил пока временным способом, разселив конфликтующие данные в разные таблицы.Теперь для входа используется customer, а остальная инфа в customer_info, поправив модели.Конечно, это крайне не удобно, но время поджимает.Пофиксю окончательно - напишу здесь что было.

  18. Да в принципе проблема ясна - не логинит, если в поле обновилась колонка. Всё. Если обновилась - тупо не отдает $customer_query->num_rows (ну и подельшее) в systemlibrarycustomer.php.

    А изменял я.... что я только не изменял. Почти всё ) кроме engine, и всё до этого момента работало нормально.

    Таблица customer выглядит сейчас так:

    CREATE TABLE IF NOT EXISTS `customer` (  `customer_id` int(11) NOT NULL auto_increment,  `firstname` varchar(96) collate utf8_unicode_ci NOT NULL,  `count_money` decimal(15,2) NOT NULL default '0.00',  `sale_sum` decimal(15,2) NOT NULL default '0.00',  `sales` int(11) NOT NULL default '0',  `email` varchar(96) collate utf8_unicode_ci NOT NULL default '',  `homepage` varchar(96) collate utf8_unicode_ci NOT NULL default '',  `city` varchar(96) collate utf8_unicode_ci NOT NULL default '',  `icq` varchar(32) collate utf8_unicode_ci NOT NULL default '',  `welcome` varchar(256) collate utf8_unicode_ci NOT NULL default '',  `wmz` varchar(96) collate utf8_unicode_ci NOT NULL,  `avatar` varchar(256) collate utf8_unicode_ci NOT NULL default '',  `password` varchar(40) collate utf8_unicode_ci NOT NULL default '',  `newsletter` int(1) NOT NULL default '0',  `exclusive` int(1) NOT NULL default '0',  `status` int(1) NOT NULL,  `group_id` int(1) NOT NULL,  `ip` varchar(15) collate utf8_unicode_ci NOT NULL default '0',  `date_added` datetime NOT NULL default '0000-00-00 00:00:00',  PRIMARY KEY  (`customer_id`),  UNIQUE KEY `customer_id` (`customer_id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

    И такая беда появилась примерно после добавления колонки exclusive. Но параллельно этому, мог еще что начудить (

    Уже менял systemlibrarycustomer.php на оригинал, меня контроллер login.php на оригинал и все-равно не пускает.

    Думал что в БД хостера проблема, но на денвере тоже. php отвечает всем требованиям движка.

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

Important Information

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