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

Помощь нужен поиск по SKU артиклу


Recommended Posts

привет всем нужна вот такая помощь нужно добавить в расширенный поиск поиск по артикулу SKU на поиск плиз не направлять перешерстил даже иностранные ффорумы но решения адекватного не нашел подмена типа мол поставьте вмето чего то поиск по артикулу не интересна нужен именно поиск по артикулу в добавок к существующему расширенному поиску думаю интересно будет не только мне многие ищут но пока что как я понял без результатов помогите плиз кто чем может в решении этой проблемы

Надіслати
Поділитися на інших сайтах


Дело в том что SKU как правило предназначен для внутреннего использования, так же как и Расположение, поэтому ты ничего и не нашел ни у нас ни у буржуев.

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

Надіслати
Поділитися на інших сайтах

вот мой сайт http://mebelizstekla.in.ua/ прикладываю скриншот еще того что и где мне нужно post-9085-0-77373600-1310145604_thumb.jpg вот на скриншоте в расширеном поиске можно поставить галочку поиск по описанию и поиск по модели. для меня идеальным было бы добавить еще одну галочку поиск по коду товара (артикулу SKU везде по разному это называют) вот собственно то что меня интересует у меня в магазине каждому товару присвоен уникальный артикул вот поиск по ним мне нужно сделать для удобства когда клиент звонит он говорит код товара и я с легкостью смогу его найти ибо когда клиент говорит модель то постоянно путают то цифры то буквы. вот собственно такая задача стоит если сможете помогите пожалуйста смотрел я на разных форумах люди такое тоже ищут но решения не нашел но думаю тема актуальна. заранее огромное спасибо

Надіслати
Поділитися на інших сайтах


Это по умняку...

Сначала правим вьювер.

Открываем файл catalog/view/theme/default/template/product/search.tpl

Ищем

<tr>
  <td colspan="2"><?php if ($model) { ?>
    <input type="checkbox" name="model" id="model" checked="checked" />
    <?php } else { ?>
    <input type="checkbox" name="model" id="model" />
    <?php } ?>
    <?php echo $entry_model; ?></td>
</tr>
и после найденного добавляем

<tr>
  <td colspan="2"><?php if ($sku) { ?>
    <input type="checkbox" name="sku" id="sku" checked="checked" />
    <?php } else { ?>
    <input type="checkbox" name="sku" id="sku" />
    <?php } ?>
    <?php echo $entry_sku; ?></td>
</tr>

почти в самом низу файла ищем

if ($('#model').attr('checked')) {
	url += '&model=1';
}
и после найденного добавляем

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

Так как мы добавили языковую переменную $entry_sku - добавим её в файл локализации...

Открываем файл catalog/language/russian/product/search.php

В конце файла, перед строкой

?>

добавляем

$_['entry_sku']         = 'Поиск по артикулу';

Вьювер готов, правим контроллер

Открываем файл catalog/controller/product/search.php

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

$this->data['entry_model'] = $this->language->get('entry_model');
и после найденного добавляем

$this->data['entry_sku'] = $this->language->get('entry_sku');

Ищем

if (isset($this->request->get['model'])) {
	$this->data['model'] = $this->request->get['model'];
} else {
	$this->data['model'] = '';
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$this->data['sku'] = $this->request->get['sku'];
} else {
	$this->data['sku'] = '';
}

Ищем

$product_total = $this->model_catalog_product->getTotalProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '');
и изменяем так

$product_total = $this->model_catalog_product->getTotalProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', isset($this->request->get['sku']) ? $this->request->get['sku'] : '');

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

$results = $this->model_catalog_product->getProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));
и изменяем так

$results = $this->model_catalog_product->getProductsByKeyword( $this->request->get['keyword'], isset($this->request->get['category_id']) ? $this->request->get['category_id'] : '', isset($this->request->get['description']) ? $this->request->get['description'] : '', isset($this->request->get['model']) ? $this->request->get['model'] : '', isset($this->request->get['sku']) ? $this->request->get['sku'] : '', $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}

Ищем

if (isset($this->request->get['model'])) {
	$url .= '&model=' . $this->request->get['model'];
}
и после найденного добавляем

if (isset($this->request->get['sku'])) {
	$url .= '&sku=' . $this->request->get['sku'];
}
Если обратил внимание - несколько раз ищем и правим одно и то-же... Это я все правки указал в порядке следования.

С контроллером закончили - переходим к модели.

Открываем файл catalog/model/catalog/product.php

Ищем

public function getProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
и изменяем так

public function getProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sku = FALSE, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {

Ищем

if (!$description) {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";
} else {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%' OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

if ($description) {
	$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($model) {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($sku) {
	$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";
}

$sql .= ")";

Ищем

public function getTotalProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE) {
и изменяем так

public function getTotalProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sku = FALSE) {

Ищем

if (!$description) {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";
} else {
	$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%' OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

if ($description) {
	$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($model) {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";
}

if ($sku) {
	$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";
}

$sql .= ")";
Всё.
  • +1 6
Надіслати
Поділитися на інших сайтах

Самый простой вариант...

Всегда ищет по Наименованию и по SKU, а по Описанию и по Модели - в соответствии с чекбоксами.

Для уменьшения промахов ищется только точное совпадение SKU, в варианте "по умняку" - ищет SKU которые начинаются с введённой поисковой фразы

Открываем файл catalog/model/catalog/product.php

Ищем в двух местах

if (!$model) {
	$sql .= ")";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
и изменяем в двух местах так

if (!$model) {
	$sql .= " OR p.sku = '" . $this->db->escape($keyword) . "')";
} else {
	$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%' OR p.sku = '" . $this->db->escape($keyword) . "')";
}
Всё.
  • +1 4
Надіслати
Поділитися на інших сайтах

  • 3 months later...

изумительно работает как всегда спасибо Yesvik

единственно в модели сделал вот так

$sql .= " AND (pd.name LIKE '%" . $this->db->escape($keyword) . "%'";

$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";

if ($description) {

$sql .= " OR pd.description LIKE '%" . $this->db->escape($keyword) . "%'";

}

if ($model) {

$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%'";

}

if ($inventorynumber) {

$sql .= " OR p.sku LIKE '" . $this->db->escape($keyword) . "%'";

}

$sql .= ")";

после чего начало искать по части кода товара и из обычного поиска и из расширенного

не знаю чем мне это грозит но работает :-)

Надіслати
Поділитися на інших сайтах

Я для 1.5.1.{1,2,3} описывал поиск по SKU

К сожалению, очень запутано и непонятно описали.

Кто-то может помочь с более понятной инструкцией?

Спасибо.

Надіслати
Поділитися на інших сайтах


К сожалению, очень запутано и непонятно описали.

Кто-то может помочь с более понятной инструкцией?

Спасибо.

Красным цветом и "-" отмечено, что надо убрать, зелёным и "+" то, что добавлено.

Имена изменяемых файлов можно увидеть в строках с "---/+++".

До и после изменений показаны 3-5 строк для облегчения поиска правильного места.

Здешние понятные описания отличаются только тем, что вместо "-" пишут словами "найдите вот это", а вместо "+" -- "замените на это".

В каких файлах искать - тоже видно. По аналогии. Красненькое и зелененькое. У меня ко всему прочему ещё и номера строк видны, по ним дополнительно можно сориентироваться в большом файле.

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

Надіслати
Поділитися на інших сайтах


Вот к примеру

Имена изменяемых файлов можно увидеть в строках с "---/+++".

--- a/public_html/catalog/model/catalog/product.php

+++ b/public_html/catalog/model/catalog/product.php

Я не очень понимаю смысла. Один и тот же файл.

Или тут имеется в виду, что в одном и том же файле, и удаляются и добавляются строки, то это только в заблуждение вводит?

Вот это откуда строчка?

@@ -106,10 +106,12 @@ class ModelCatalogProduct extends Model {

В целом, я все сделал. Спасибо большое, все ищет!

Надіслати
Поділитися на інших сайтах


oae, добавьте индекс по этому полю в БД:

ALTER TABLE `opencart_product` ADD INDEX ( `sku` )

Вместо "opencart_" свой префикс поставьте

Спасибо за подсказку но это не помогло.

Если оставляешь только по полю name то ищет 1 сек.

Если оставляешь по полю sku ищет 4-5 сек. Индекс добавил тоже самое.

Если делаешь и по тому и потому полю ищет тоже 4-5 сек. что с индексом что без. не зависимо от того что ввожу в поле поиск.

:(

Помогите!!!! Вторую ночь не сплю а сделать не могу.

Надіслати
Поділитися на інших сайтах


  • 5 months later...
  • 11 months later...
  • 1 month later...

Нужен отдельный модуль поиска, только по артикулу. Подскажите, как можно реализовать?

 

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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